【发布时间】:2019-06-20 13:19:21
【问题描述】:
x86汇编设计有指令后缀,如l(long)、w(word)、b(byte)。
所以我认为jmpl 是long jmp
但是当我组装它时它的工作很奇怪:
Test1 jmp: 汇编源码和反汇编
main:
jmp main
eb fe jmp 0x0804839b <main>
Test2 jmpl: 汇编源码和反汇编
main:
jmpl main # added l suffix
ff 25 9b 83 04 08 jmp *0x0804839b
与Test1相比,Test2的结果出乎意料。
我觉得应该和Test1一样组装。
问题:jmpl 是 8086 设计中的一些不同指令吗?
(根据here,SPARC 中的jmpl 表示jmp 链接。是这样的吗?)
...或者这只是 GNU 汇编器中的一个错误?
【问题讨论】:
-
在 32 位代码中使用 AT&T
jmp main是到标签 main 的相对跳转。jmpl main是间接近跳转到存储在标签main处的地址。 -
您应该在第二次测试中收到关于组装时缺少星号的警告。
-
相关:What is callq instruction? 和 What is the difference between retq and ret?。在这些情况下,它只是操作数大小的后缀。
标签: assembly x86 gnu-assembler att