将两个字节移入寄存器的最低部分

问题描述 投票:0回答:1

假设寄存器%rdi包含8个字节,构成一个有效地址,编写x86-64指令以取消引用地址,并将两个字节移到%rsi的最低部分。

我的答案是movq 2(%rdi), %rsi,但这是不正确的。

我不太了解如何表达“移动两个字节”部分。我希望有人可以帮我解释一下。非常感谢

assembly x86-64 att
1个回答
0
投票

移动2个字节= word操作数大小。 movw (%rdi), %si

或者只是让汇编程序从寄存器mov (%rdi), %si推断操作数大小。这些汇编器使用相同的机器代码(这很重要),只是编写方式不同。

写入ESI会零扩展到整个RSI,但是写入低字节(SIL)或字(SI)会使高字节保持不变。 (即,将某些字节合并到RSI中。)造成这种差异的原因是,在使用更广泛的regs扩展x86时,386与AMD64架构师做出了不同的选择。 Why do x86-64 instructions on 32-bit registers zero the upper part of the full 64-bit register?

此分配的目的似乎是要确保您了解部分寄存器如何在RSI上别名。

© www.soinside.com 2019 - 2024. All rights reserved.