关于汇编语言的ORG伪指令

ORG 0000H
LJMP MAIN
ORG 0040H
MAIN:MOV R1,#20H
MOV R2,#10
LOOP:MOV @R1,#00H
INC R1
DJNZ R2,LOOP
SJMP $
END

ORG不是只要写一条,确定程序的初始地址就好了么?为什么后来还得写多一条“ORG 0040H”?

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字节,就会出问题了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-21
org是汇编器的伪指令,是告诉编译器下一条汇编语句的偏移地址
org 0000H #告诉汇编器这里偏移0
LJMP MAIN #跳转到main,这是要翻译为机器指令
ORG 0040H #告诉编译器这里偏移直接跳到40H
MAIN:MOV R1,#20H
===============
也就是说在ljmp指令在000处,而 main:mov指令在40H处,,,他们中间隔了一段没有的物理地址本回答被提问者采纳
第2个回答  2011-10-21
ORG伪指令 上述程序可以2条都不用,因为程序简单,但一般程序中会有几个中断 有可能要用好几个ORG. 原因中断入口地址是固定的,如
ORG 0000H 可以省
LJMP MAIN 如果本条指令3字节 可以省下一条 ORG 0003H
ORG 0003H
LJMP INT0 如果本条指令8字节 可以省下一条 ORG 000BH
ORG 000BH
LJMP T0
ORG 0013H
LJMP INT1
ORG 001BH
LJMP T1
程序开始一般安排在 所有中断入口地址 后面 如ORG 0040H
第3个回答  2010-05-22
org 2000h
是使下一条指令在内存中占用的单元的偏移地址是2000h
org 2013h依此类推

org伪指令告诉编译程序在将程序代码加载到内存时,按指定的立即数的值作为下一条指令的代码的偏移地址来分配内存空间

放在这里
是ajmp main指令的偏移地址为2000h
是ajmp int_ADC指令的偏移地址为2013h
它们不是紧挨着的
中间跳过了13h个字节的单元,至于中间13h个单元你想要放些什么数据或者代码,就得看你自己了,

根据你自己的设计,数据重叠的情况很可能会有的,编译器如何处理、会不会报错,就得编译来检查了。
第4个回答  2010-05-22
org 2000h
是使下一条指令在内存中占用的单元的偏移地址是2000h
org 2013h依此类推
main函数和中断函数Int_ADC是跳转到各自的函数区的。
其实加跳转,对于小程序来说看不出来什么,但是如果程序大了,是会对程序产生影响的。因为低位存储区有很多寄存器(组)以及栈等,程序代码太长会占用这些区域,对程序产生干扰。(而且编译器还不报错)
用跳转指令,可以跳转到数据区域,用户可以放心的使用,不用担心会产生干扰的。

org是什么
ORG,在汇编语言中是一条指令。其作用是告诉汇编程序,在开始执行的时候,将某段机器语言装载到内存中的哪个地址。如果没有它,有些指令就不能正确地翻译和执行。由于这条指令不是机器语言中的直接指令,所以又被称之为伪指令。另外,某些指令符号的含义也随之变化。例如::RESB 0x1fe-$这条指令的含...

org汇编语言
ORG是起始地址,源的缩写,在汇编语言源程序的开始通常使用ORG伪指令来规定程序的起始地址。若未使用ORG指令,汇编得到的目标程序将会从0000H地址开始。例如,以下代码展示了如何使用ORG指令指定程序的起始地址。ORG指令之后的数字表示程序的起始地址。在本例中,ORG 2000H表示程序从地址2000H开始。ORG 2000H...

汇编org是什么意思?
org是汇编语言中的一个非常重要的伪指令,意为“origin”(起始位置)。它被用来定义汇编代码的起始位置,并让汇编器知道机器指令的放置地址。通常,org指令定义了汇编程序的起始地址,并告诉汇编器将生成的机器码放置在哪个特定的内存地址之后。在使用org指令之前,汇编程序员必须考虑一些因素,例如操作系统...

微机原理中ORG是什么意思啊?
在汇编语言中,ORG 伪指令的作用是指示汇编器从指定的地址开始编制程序。这个地址可以是程序的起始地址,也可以是数据段、堆栈段等的起始地址。使用 ORG 伪指令可以让程序员更灵活地组织程序结构,避免受到汇编器顺序汇编的影响。

51单片机中ORG是什么意思
ORG(伪指令)(Pseudo Instruction)是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有机器代码,只用于汇编过程中为汇编程序提供汇编信息。例如,提供如下信息:哪些是指令、哪些是数据及数据的字长、程序的起始地址和结束地址等。伪指令有2个特点:(1)由于是伪“指令”,因而它只存在于...

汇编伪指令ORG是干什么用的?
一、调整偏移量伪指令ORG 调整偏移量伪指令格式:ORG 数值表达式伪指令的作用是:告诉汇编程序,本伪指令下面的内存变量从该“数值表达式”所指定的地址开始分配。 二、汇编语言提供了一个特殊的符号“$”来引用偏移量计数器的值。例如:W1 DW $,ORG $+3;从当前地址开始空3个字节 B1 DB 43h ...

汇编中的ORG是什么意思?
伪指令org用来规定目标程序存放单元的偏移量。比如,如果在源程序的第一条指令前用了如下指令:org 200h 那么,汇编程序会把指令指针的ip的值设成200h,即目标程序的第一个字节放在200h处,后面的 内容则顺序存放,除非遇上另一个org 语句

单片机的ORG程序问题
ORG 是一条伪指令,告诉汇编程序在汇编时,将其后面的汇编语言程序代码存放在程序存储器中其指定的地址开始的连续存储单元内,直到遇到下一个ORG 指令为止。所以这里第一个ORG指定将LJMP MAIN 的代码存入0000H开始的单元中。 第二个ORG 指定将“MAIN:...(后面省略”的代码存入0030H开始的单元中。

汇编语言中ORG的疑问
ORG 就是一个伪指令,可以不用的。用了,也很简单的,就是定义程序的起始地址,就这么简单,没有什么可讲的,所以,只能草草带过,没有必要再讲什么了。好了,回到你的问题上,这起始应该是越来越大的,你的是越来越小了,就错了。为什么这么写呢?

汇编语言中第一行有ORG 地址;表示什么啊!
汇编语言中的ORG,就是程序起始地址的意思,后面通常有一组地址,例如ORG 1000H ;表示程序从地址1000H开始 ORG 1000H MAIN: MOV A,#6BH ;表示强行指定main程序,从1000H开始 若是没有ORG指定地址,程序就从0000H开始。

相似回答