1. 首页 > 科技

MARS汇编器为什么不能识别org、set等指示语句? org 后面给的是程序的

MARS汇编器为什么不能识别、set等指示语句? 后面给的是程序的

汇编语言中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不再是绝对定位,只能在一个段里相对定位。