ORG是伪指令,告诉编译器,程序从ROM的0000开始存放程序,但是AJMP MAIN是一条无条件跳转指令,也就是说,单片机上电之后首先从0000处开始执行程序,但是,AJMP直接将程序跳转到MAIN标号指向的存储区域开始取指令,并执行,而一般MAIN标号是放在语句ORG 0030之后的,也即,主程序是从0030这个地址开始存放的;
这是因为,单片机内部有几个中断源,默认内部中断(包含几个定时器中断,还有外部中断)的入口是在0000-0030之间的,每个中断大概占用两个字节还是四个字节,记不清楚了。而这些内部中断一旦产生,指针必然立刻指向0004-0030之间,如果你的程序有语句放在这个地址内,程序必然跑飞!!!
因此,在8051这个MCU的设计中,已经将0004-0030分配给内部使用了,所以,你的程序只能从0030之后的任何存储区域开始存放,AJMP MAIN就是为了在MCU上电的时候知道从ROM中的那个地址开始取指令
而如果你使用到中断,也必然要在已经定义为中断入口的地址0004--0030写上AJMP,以便于跳转到你自己编写的相应的中断程序中
转载于:https://www.cnblogs.com/yuqilihualuo/p/3357571.html