如何解决如何解决 x64 程序集中的矛盾?
我正在编写一个汇编程序。我一直认为汇编中的某条汇编指令和相应的指令是一一对应的,所以我觉得写一个还是很容易的。但在实际阅读英特尔 64 位软件开发手册后,我现在意识到像
这样的命令mov %rdx,%rbx
对此有一定的矛盾。它可以翻译成 48 89 D3
对应于
REX.W + 89 /r - MOV r64,r/m64
来自 Intel 64 Software Dev Manual 的第 1235 页。
但也可以翻译成 48 8B DA
(REX.W + 8B /r - MOV r/m64,r64)。
这是二进制文件的 objdump -d
反汇编的输出:
0: 48 89 d3 mov %rdx,%rbx
3: 48 8b da mov %rdx,%rbx
通过阅读手册,很明显为什么会存在这种矛盾。像这样的矛盾心理在少数情况下是存在的。
我在某些情况下测试了代码,结果完全一样。
使用一个优于另一个(gnu 汇编程序在我查看的所有情况下都使用 48 89 D3
)还是我应该随机选择其中一个?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。