我无法将下面的程序集翻译成c ++
MOVZX EAX, DX
EDX是32位寄存器。我需要得到最低的16位(DX)。
我尝试了以下内容:
unsigned edx = 0x123ABCDE;
unsigned dx = (edx>>16) & 0xff;
我希望得到存储在dx中的BCDE值,但它有点不对。
非常感谢任何帮助。
答案 0 :(得分:2)
让我们一步一步地分析你的代码
unsigned edx = 0x123ABCDE;
没什么不寻常的。
让我们按照评估顺序分解下一个陈述
(edx >> 16)
- 右移16位
这是正确的移位2个字节或4个十六进制数字
答案应该是0x123A。
现在,让我们保持最右边的8位(与0xFF进行AND运算):
0x123A & 0xFF == 0x3A
变量dx
中的结果应为0x3A。