ORG是Origin的缩写:起始地址,源。在汇编语言源程序的开始通常都用一条ORG伪指令来实现规定程序的起始地址。如果不用ORG规定则汇编得到的目标程序将从0000H开始。
ORG的使用:
ORG2000H
START:MOVAX,#00H
扩展资料
51单片机最常用的伪指令如下:
(1)起始(Origin)伪指令
标号:ORGnn
功能:定义程序或数据块的起始地址。指示此语句后面的程序或数据块以nn为起始地址连续存放在程序存储器中。
例如:
ORG2000H
MOVA,20H
…
ORG伪指令规定了程序的起始地址从2000H开始,即该程序的第一条指令“MOVA,20H”从地址2000H开始存放。)
(2)字节定义(DefineByte)伪指令
标号:DB(字节常数或字符或表达式)
功能:指示在程序存储器中以标号为起始地址的单元里存放的数为字节数据(8位二进制数)。
例如:
OGR100H
TAB1:DB0FFH,'C',16,−1
从TAB1开始的地址单元依次存放0FFH、43H、10H、0FFH
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字节,就会出问题了。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)