【发布时间】:2013-03-05 17:27:00
【问题描述】:
在x86汇编语言中,有没有办法获取EAX寄存器的上半部分?我知道AX 寄存器已经包含了EAX 寄存器的下半部分,但是我还不知道有什么方法可以获得上半部分。
我知道mov bx, ax 会将eax 的下半部分移动到bx,但我想知道如何将eax 的上半部分也移动到bx。
【问题讨论】:
-
只需将其下移 16 位。
-
要么做
shr eax, 16,然后移动。 (破坏eax),或者做mov ebx, eax和shr ebx, 16(将ebx的上半部分归零)我不确定在bx上进行操作是否会自动将ebx的上半部分归零反正。所以如果是这样的话,你还不如选择后一种方法。 -
ror eax,16mov bx,axror eax,16如果你想保持 eax/ebx 的上半部分不变 -
@Mysticial 在
bx上执行操作不会自动将ebx的上半部分归零。但是,在 x86-64 中,使用ebx(但不是bx、bl或bh)作为 dest 将rbx的前 32 位归零。 -
@nrz 啊。很高兴知道。我知道 x64 上的归零行为。我只是不确定这种行为在早期是否已经存在。