MARS汇编器为什么不能识别org、set等指示语句? org 后面给的是程序的
汇编语言中ORG的使用问题 一条ORG指令的判断 求高人指点
可以这样用,等价于ORG 0E000H
ORG -2000H<=>ORG -8192<=>ORG 0E000H
汇编语言中伪指令
指定绝对地址的好处是,维护代码的时候不必再行计算相应代码被安排的地址。换句话说,如果你接手一份代码的时候,尚未完全了解硬件平台,未必清楚它的中断向量表大小,如果没有指定主程序入口地址,你又如何能快速的判断呢
举例说,你的“一般的 2000H;ajmp main; 2013H;ajmp Int_ADC......”
实际上是指 ajmp main这条指令被放在rom的0x2000,ajmp Int_ADC这条指令被放在0x2013,而并不是说“main函数从0x2000开始、Int_ADC函数从0x2013开始”,所以你不必担心。只需要确保一条ajmp指令的长度不要大于0x13就没有问题(当然不会大于,64位系统的jmp也只有5字节)
如果程序强行指定那两个函数的入口地址,是这样写的:
“
2000H
main:
xxx
xxx
...
2013H
Int_ADC:
xxx
xxx
”
如果是这样写的,那么就表示main被强制指定到0x2000,Int_ADC被强制指定到0x2013,那么如果main后面的代码多于0x13字节,就会出问题了。
汇编语言,帮忙看下ORG 0000H和LJMP MAIN有什么意义,不要这两句可以吗
51单片机,上电后,要从 0000H 开始执行程序。
你写的程序,如果不想让它开机就执行,
那么,你就不要写 ORG 0000H。
汇编指令的疑惑。。
预处理--编译--汇编--链接,这是高级语言的编译全过程,对于纯汇编,就只有
汇编和链接两个步骤。
指令时链接时使用的,不是汇编那一步使用的。即不是cpu的一条指令,而是给编译器看的伪指令。
在51单片机、x86 dos、win32 exe中实现都有差异。
以最简单的51单片机为例,编译器最终链接生成HEX文件,再烧录到51的rom中去。单片机很简单,没有x86的分段、分页,启动就是从rom的0x0的位置开始执行。同时0x30H位置开始存放中断向量,
所以单片机程序一般开头就是
ORG 0000H
AJMP MAIN
ORG 0030H
这里的ORG 0000H指令,使得程序链接成HEX文件时,AJMP MAIN这条指令的机器码就在HEX文件的0x0位置。这是链接器的工作。
至于x86 dos和win 32 exe,ORG的实现就复杂了,我也不清楚,ORG不再是绝对定位,只能在一个段里相对定位。