1

我在将以下程序集翻译成 c++ 时遇到问题

MOVZX EAX, DX

其中 EDX 是一个 32 位寄存器。我需要获得最低的 16 位(DX)。

我尝试了以下方法:

unsigned edx = 0x123ABCDE;
unsigned dx = (edx>>16) & 0xff;

我希望得到存储在 dx 中的 BCDE 的值,但它有点错误。

任何帮助将非常感激。

4

1 回答 1

2

让我们逐步分析您的代码。
unsigned edx = 0x123ABCDE;
没有什么不寻常的。

让我们根据评估顺序分解下一条语句。
(edx >> 16)-- 右移 16 位。
这是右移 2 个字节或 4 个十六进制数字。
答案应该是 0x123A。

现在,让我们保留最右边的 8 位(与 0xFF 进行与运算):
0x123A & 0xFF == 0x3A

结果应该是变量中的 0x3A dx

于 2016-08-05T19:53:08.347 回答