打印

请教:LJMP和JMP到底有什么区别?

[复制链接]
18747|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fxhfxh|  楼主 | 2010-2-9 10:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一直没有搞懂:LJMP和JMP到底有什么区别?我在keil中试过,这两个指令相互代换后都能汇编通过,字节数也无变化,程序也可运行,就是不知区别何在?我想老外既然搞2个,总有他的道理吧?谢谢先。

相关帖子

沙发
computer00| | 2010-2-9 10:47 | 只看该作者
跳转的距离不一样啊,L的是long,跳得远一些。

使用特权

评论回复
板凳
jerkoh| | 2010-2-9 11:00 | 只看该作者
JMP比较好用
编译器有的可以 自动帮你选择 sjmp 还是ljmp 还是ajmp
所以我一直用jmp 懒得去区分了

使用特权

评论回复
地板
john_light| | 2010-2-9 11:02 | 只看该作者
3楼说的对,如果你写了JMP,编译器会根据距离选择合适的xJMP。

使用特权

评论回复
5
fxhfxh|  楼主 | 2010-2-9 11:06 | 只看该作者
谢谢圈圈。原来听课,只知道SJMP是短跳转,LJMP是长跳转,AJMP是绝对跳转,JMP 也是短跳转,也就是说是和SJMP一样的,一山也有两虎。留下JMP有何用?

使用特权

评论回复
6
fxhfxh|  楼主 | 2010-2-9 11:12 | 只看该作者
TO 3、4楼,那就是说,JMP,可长,可短?字节数可为2(sjmp),可为3(ljmp)?

使用特权

评论回复
7
jerkoh| | 2010-2-9 11:16 | 只看该作者
jmp 就是智能化的,编译的时候,一看调的地址 短的 就自动替换指令SJMP 的机器码
这样。。

使用特权

评论回复
8
computer00| | 2010-2-9 11:23 | 只看该作者
51本来没有JMP addr这个指令,JMP addr这个是编译器提供的伪指令,由编译器帮你翻译成实际的指令。至于翻译成哪个指令,跟编译器的处理以及优化等有关。

使用特权

评论回复
9
程序匠人| | 2010-2-10 09:58 | 只看该作者
如果你不关注编译之后的结果(字节数),那用jmp倒也方便。如果在特殊场合,要严格计算字节,那还得自己去选择。

使用特权

评论回复
10
leichao| | 2010-2-10 14:33 | 只看该作者
学习拉!

使用特权

评论回复
11
冷漠| | 2010-2-12 10:03 | 只看该作者
本帖最后由 冷漠 于 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)早就替代人工了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

382

帖子

1

粉丝