我正在查看一些编译器生成的汇编代码(x86_64),并发现几条指令零位移如下:
movzbl 0x0(%rbp),%eax
这种0x0位移背后的原因是什么? (我是汇编的新手,如果已经讨论过问题,请指出链接。)根据我的理解,上面的指令将零扩展rbp +(0x0)复制到eax 。
编辑:我找到了一个解释 leal 的链接 what-does-0x0-indicate-in-the-instruction
谢谢..!
答案 0 :(得分:4)
这意味着movzx eax, byte [rbp + 0]
。
(e|r)bp
中包含的地址的内存操作数没有编码,但有(e|r)bp + constant
。因此,对于该常量,您有0从rbp
中的地址中提取一个字节。