将汇编指令翻译成 C++

Translate assembly instructions to c++

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

MOVZX EAX, DX

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

我试过以下方法:

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

我希望得到一个存储在 dx 中的 BCDE 值,但是有点不对。

如有任何帮助,我们将不胜感激。

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

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

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

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