汇编语言中伪指令org
答案:6 悬赏:80 手机版
解决时间 2021-02-03 04:23
- 提问者网友:疯子也有疯子的情调
- 2021-02-02 09:06
汇编语言中伪指令org
最佳答案
- 五星知识达人网友:妄饮晩冬酒
- 2021-02-02 09:56
org是汇编器的伪指令,是告诉编译器下一条汇编语句的偏移地址。
org 0000H #告诉汇编器这里偏移0
LJMP MAIN #跳转到main,这是要翻译为机器指令
ORG 0040H #告诉编译器这里偏移直接跳到40H
MAIN:MOV R1,#20H
org 0000H #告诉汇编器这里偏移0
LJMP MAIN #跳转到main,这是要翻译为机器指令
ORG 0040H #告诉编译器这里偏移直接跳到40H
MAIN:MOV R1,#20H
全部回答
- 1楼网友:煞尾
- 2021-02-02 13:28
org伪指令用来确定随后的指令或数据的起始偏移地址。
如:
org 100h----通常用来确定com文件的第一条指令的起始地址。
如:
org 100h----通常用来确定com文件的第一条指令的起始地址。
- 2楼网友:走死在岁月里
- 2021-02-02 12:07
org 2000h
是使下一条指令在内存中占用的单元的偏移地址是2000h
org 2013h依此类推
org伪指令告诉编译程序在将程序代码加载到内存时,按指定的立即数的值作为下一条指令的代码的偏移地址来分配内存空间
放在这里
是ajmp main指令的偏移地址为2000h
是ajmp int_ADC指令的偏移地址为2013h
它们不是紧挨着的
是使下一条指令在内存中占用的单元的偏移地址是2000h
org 2013h依此类推
org伪指令告诉编译程序在将程序代码加载到内存时,按指定的立即数的值作为下一条指令的代码的偏移地址来分配内存空间
放在这里
是ajmp main指令的偏移地址为2000h
是ajmp int_ADC指令的偏移地址为2013h
它们不是紧挨着的
- 3楼网友:持酒劝斜阳
- 2021-02-02 11:28
org 2000h
是使下一条指令在内存中占用的单元的偏移地址是2000h
org 2013h依此类推
main函数和中断函数Int_ADC是跳转到各自的函数区的。
其实加跳转,对于小程序来说看不出来什么,但是如果程序大了,是会对程序产生影响的。因为低位存储区有很多寄存器(组)以及栈等,程序代码太长会占用这些区域,对程序产生干扰。(而且编译器还不报错)
用跳转指令,可以跳转到数据区域,用户可以放心的使用,不用担心会产生干扰的。
是使下一条指令在内存中占用的单元的偏移地址是2000h
org 2013h依此类推
main函数和中断函数Int_ADC是跳转到各自的函数区的。
其实加跳转,对于小程序来说看不出来什么,但是如果程序大了,是会对程序产生影响的。因为低位存储区有很多寄存器(组)以及栈等,程序代码太长会占用这些区域,对程序产生干扰。(而且编译器还不报错)
用跳转指令,可以跳转到数据区域,用户可以放心的使用,不用担心会产生干扰的。
- 4楼网友:污到你湿
- 2021-02-02 11:19
org 2000h
是使下一条指令在内存中占用的单元的偏移地址是2000h
org 2013h依此类推
org伪指令告诉编译程序在将程序代码加载到内存时,按指定的立即数的值作为下一条指令的代码的偏移地址来分配内存空间
放在这里
是ajmp main指令的偏移地址为2000h
是ajmp int_ADC指令的偏移地址为2013h
它们不是紧挨着的
中间跳过了13h个字节的单元,至于中间13h个单元你想要放些什么数据或者代码,就得看你自己了,
根据你自己的设计,数据重叠的情况很可能会有的,编译器如何处理、会不会报错,就得编译来检查了。
是使下一条指令在内存中占用的单元的偏移地址是2000h
org 2013h依此类推
org伪指令告诉编译程序在将程序代码加载到内存时,按指定的立即数的值作为下一条指令的代码的偏移地址来分配内存空间
放在这里
是ajmp main指令的偏移地址为2000h
是ajmp int_ADC指令的偏移地址为2013h
它们不是紧挨着的
中间跳过了13h个字节的单元,至于中间13h个单元你想要放些什么数据或者代码,就得看你自己了,
根据你自己的设计,数据重叠的情况很可能会有的,编译器如何处理、会不会报错,就得编译来检查了。
- 5楼网友:持酒劝斜阳
- 2021-02-02 10:54
org指定绝对地址的好处是,维护代码的时候不必再行计算相应代码被安排的地址。换句话说,如果你接手一份代码的时候,尚未完全了解硬件平台,未必清楚它的中断向量表大小,如果没有org指定主程序入口地址,你又如何能快速的判断呢
举例说,你的“一般的 org 2000H;ajmp main;org 2013H;ajmp Int_ADC......”
实际上是指 ajmp main这条指令被放在rom的0x2000,ajmp Int_ADC这条指令被放在0x2013,而并不是说“main函数从0x2000开始、Int_ADC函数从0x2013开始”,所以你不必担心。只需要确保一条ajmp指令的长度不要大于0x13就没有问题(当然不会大于,64位系统的jmp也只有5字节)
如果程序强行指定那两个函数的入口地址,是这样写的:
“
org 2000H
main:
xxx
xxx
...
org 2013H
Int_ADC:
xxx
xxx
”
如果是这样写的,那么就表示main被强制指定到0x2000,Int_ADC被强制指定到0x2013,那么如果main后面的代码多于0x13字节,就会出问题了。
举例说,你的“一般的 org 2000H;ajmp main;org 2013H;ajmp Int_ADC......”
实际上是指 ajmp main这条指令被放在rom的0x2000,ajmp Int_ADC这条指令被放在0x2013,而并不是说“main函数从0x2000开始、Int_ADC函数从0x2013开始”,所以你不必担心。只需要确保一条ajmp指令的长度不要大于0x13就没有问题(当然不会大于,64位系统的jmp也只有5字节)
如果程序强行指定那两个函数的入口地址,是这样写的:
“
org 2000H
main:
xxx
xxx
...
org 2013H
Int_ADC:
xxx
xxx
”
如果是这样写的,那么就表示main被强制指定到0x2000,Int_ADC被强制指定到0x2013,那么如果main后面的代码多于0x13字节,就会出问题了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯