在我使用转储出来的以下汇编代码中objdump
:
lea 0x0(%esi,%eiz,1),%esi
什么是注册%eiz
?前面的代码是什么意思?
See 为什么选择 GCC LEA EIZ? http://web.archive.org/web/20090523160558/http://www.blog.bit-blit.org/?p=9:
显然%eiz
是一个伪寄存器,它的值始终为零(例如r0
在 MIPS 上)。
...
我最终找到了 binutils 大师 Ian Lance Taylor 的邮件列表帖子,其中揭示了答案。有时,GCC 会在代码流中插入 NOP 指令,以确保正确对齐等。 NOP 指令占用一个字节,因此您可能会认为可以根据需要添加任意数量的字节。但根据 Ian Lance Taylor 的说法,芯片执行一条长指令比执行许多短指令要快。因此,他们没有插入 7 个 NOP 指令,而是使用一个奇怪的 LEA,它占用了 7 个字节,并且在语义上等同于 NOP。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)