Q:
很多程序都是这种结构,如, ORG 0000HAJMP MAINORG 0030H
...请问ORG何用,为什么要设置ORG 0030H?
A:
ORG是个用于定位的伪指令。简单的说就是把从这句话开始直到下一个ORG指令或者END指令前的程序语句都顺序放在它指定的地址里。比如说你的程序里ORG只管了一个语句(AJMP MAIN),则从0000h这个地址开始放语句。放多少,看下面有几条语句(直到org或end 指令为止)。同样ORG 0030H是把它后面的所有到下一个ORG或END命令前的所有代码都顺序放到从0030H开始的程序单元。这应该是一个子程序。就像C语言里的子函数。
设置ORG 0030H的原因是因为在0030H 之前的一段地址空间还要有其它用途,见下面
——————————————————————————————
| 各中断源所对应的中断服务程序入口地址如下: |
| -----------------------------
| ORG 0003H ;外中断 0 中断程序入口地址 |
| ORG 000BH ;定时器 T0 中断程序入口地址 |
| ORG 0013H ;外中断 1 中断程序入口地址 |
| ORG 001BH ;定时器 T1 中断程序入口地址 |
| ORG 0023H ;串行中断程序入口地址 |
| ORG 002BH ;定时器 T2 中断程序入口地址(8052才有) | ——————————————————————————————
结论:现在我们知道了 0030H 之前的一段地址空间要作为各中断源所对应的中断服务程序入口地址用。如果你在程序设计时不用中断方式子程序时,那么主程序可以从0000H 开始。如果你以后改动程序要使用中断子程序了,就没有中断地址可用了。所以建议大家要养成良好习惯,使主程序从0030H或更后面的地址开始。