将较小的操作数移动到较大的操作数

时间:2018-01-25 18:44:28

标签: assembly x86-64 cpu-registers

我想象数据如何进入RAX寄存器有点麻烦。

这是汇编语言:

.data
dwordVal DWORD 94326732h
.code
mov rax, 0FFFFFFFF00000000h
mov rax, dwordVal

我读到你不能用MOV将较小的操作数移动到更大的操作数中。在我看来,dwordVal只会填充64位rax寄存器的下半部分,所以这是不允许的。如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:2)

mov指令将始终使用与目标操作数完全相同的完整值填充目标操作数。

所以,你的理解是不正确的。您无法使用rax填充mov的部分内容。

正如Jester在评论中已经说过的那样,mov rax, dwordVal的结果恰恰取决于你的汇编程序所遵循的约定,而一些汇编程序实际上会拒绝这样的非法事件。

我可以告诉你的一件事是,rax中的0FFFFFFFF00000000h绝对没有留下任何先前加载到其中的内容。