伪指令是什么?书上也好,百度上也好,都没说清。 对于ORG的功能和用法,书上所说,要么不完整,要么就有错误。 一、解释 对于ORG的正确而完整的解释是:以下程序在汇编成机器代码后,将以其所指出的地址作为首地址,在进行烧写时在程序存储器中顺序存放,直到被下一个ORG所改变。 ORG后面的地址值,在编写源程序时并无数字大小之顺序规定,允许交叉,也就是说你可以先写大数值再写小数值或乱序。这个,有些书上说的是错的。 二、原理 51机的指令运行规定是:上电后,控制电路将程序存储器中0000H地址的内容当作指令而非数值,这个是该程序的第一条指令,然后程序顺序往下执行除非遇到跳转指令。 51机的程序汇编工具对对源程序汇编的规定是:按源程序的顺序进行编译并顺序填入汇编工具自己的预写表中,除非遇到ORG指令。 51机的机器代码烧写入程序存储器中的规定是:按汇编工具预写表中代码的顺序,将所有代码顺序写入程序存储器中,在烧写过程中不会有任何改变。 所以,ORG指令可以称作程序汇编跳转指令,它告诉汇编工具以下程序从指定位置开始写入而不是顺序写入,它是为了让程序员按自己的思路编写主程序然后再去编写其它程序,以免受到汇编工具顺序汇编的影响。如中断处理程序,51机规定其必须放在程序存储器中从03H开始的一段空间内,但程序员想先写完主程序后再回过头来写中断,那就必然用到ORG。 三、用法 可使用在程序中任何位置,可倒序、交叉使用,其使用次数并无特别限制。 四、使用注意事项 1、允许乱序,但是别让后面的程序把前面的程序给覆盖了,所以,各ORG之间的地址相隔空间应留足。如果没把握估算,或想充分利用程序存储器空间,那就得计算每一段程序的长度了,也就是要对程序存储器的空间进行事先规划。 2、主程序前一定要有ORG,也就是程序员一定要指定主程序的入口地址。否则,主程序一定会覆盖掉中断向量入口部分的空间。 3、如果你将中断处理程序(包括其跳转指令)放在主程序前面,而不在主程序前指定主程序的入口地址,那程序也能运行。 多说一点:有的程序员把这个中断处理程序非要放在前面而不敢放在后面,就是因为没弄懂ORG的用法而未指定主程序的入口地址而造成的。这样的程序看上去有点别扭,一般子程序都是放在后面的啊。这种情况,主程序在程序存储器中的存储位置是紧跟在最后一个中断处理程序的最后一个字节后面的,。上电后,这些主程序前面的程序之所以没被执行,是因为在0000H开始段有一个跳至主程序的跳转指令,否则,这些程序是会被先执行的,搞不好程序会飞。
|