在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指令的意义不同吗?还是我的理解中哪部分除了问题?
51åçæºè¿è¡æ¶æç¨åºå è½½å°äºä»0030Hå¼å§çå åï¼