51单片机和NASM中ORG指令是否不同?

在51单片机中,代码通常由此开始:
ORG 0x0000
JMP MAIN
ORG 0x0030
······(程序部分)
此处解释是,从0x0004到0x0030前被分配给了中断,因而如果要使用中断的话,程序除了JMP MAIN外就应当从0x0030开始,这样CPU从0x0000启动,执行JMP MAIN,跳过存中断的内存,开始执行程序部分。如果没有ORG 0x0030,似乎程序部分就会把存中断的内存给覆盖掉。也就是说51单片机中,ORG指令使得生成的代码文件从0x0004到0x0030这部分是没有东西的?

而在NASM中,ORG只影响对绝对位置的访问,这意味着在访问ORG后的标号时,访问的地址是(编译后文件中的地址+ORG后的地址参数=在内存中的真实地址),而形成的二进制文件中代码是连续的。

这意味如果用NASM编译51单片机那段代码,形成的二进制文件从0x0000开始时一直有数据的,被加载到0x0000后,依然会覆盖掉0x0004开始的存中断的内存。

是NASM和51单片机中ORG指令的意义不同吗?还是我的理解中哪部分除了问题?

ORG只是一个宏指令,也就是说只在编译时起作用,用来定位尾随其后指定的起始地址。在51单片机中,普通的51单片机有5个中断,中断向量分别是:0003H,000BH,0013H,001BH,0023H,编程时一般尽量避开这个区域,所以主程序入口都定位0030H,如果不用中断的话,从000H开始也是可以的。追问

51单片机运行时把程序加载到了从0030H开始的内存?

温馨提示:答案为网友推荐,仅供参考
相似回答