如何解决 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 (将#修改为@)