本帖最后由 冷漠 于 2010-2-12 18:55 编辑
还是没搞懂。
JMP是宏汇编MASM或者A51指令,sjmp/ajmp/ljmp是小汇编asm指令 ;小汇编是在DOS年代用命令行和edit行编辑写源代码的时候吧。现在有4张以上的老师说他们那时汇编一写几万行(单模块)!敬佩呀。
如今,早就没人用小汇编asm了,KEIL下的A51.exe是宏汇编程序,支持一个项目多人合作,模块化编程,——分段连接技术。早就没有一个人写几万行汇编指令的时代了。早就不用sjmp/ajmp/ljmp了,——JMP通吃。当然宏汇编兼容小汇编(高的兼容低的),谁现在一定要用ORG 0000H 和LJMP 0050H 来写 51 小汇编程序,当然宏汇编A51编译也通过。
什么?精确计算字节?如果隔模块跳转,当然只能按照标号地址指明跳转位置L123,那么在多模块连接定位之前,各模块地址浮动不定,如何精确计算L123的确切地址?是sjmp?还是ajmp,ljmp ? 所以,只能JMP,由连接定位程序L51.EXE去计算后确定。
宏汇编程序内的跳转只能按标号名来指定: JMP 标号。所谓精确计算跳转字节?20年前的技术?人算不如机器算,算错了麻烦。软件(宏汇编A51)早就替代人工了。
|