将汇编指令转换为c ++

时间:2016-08-05 19:45:29

标签: c++

我无法将下面的程序集翻译成c ++

MOVZX EAX, DX

EDX是32位寄存器。我需要得到最低的16位(DX)。

我尝试了以下内容:

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

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

让我们一步一步地分析你的代码 unsigned edx = 0x123ABCDE;
没什么不寻常的。

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

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

变量dx中的结果应为0x3A。