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

Move smaller operand into larger operand

我在想象数据如何移入 RAX 寄存器时遇到了一些困难。

这里是汇编语言:

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

我了解到不能使用 MOV 将较小的操作数移动到较大的操作数。在我看来,dwordVal 只会填充 64 位 rax 寄存器的下半部分,因此这是不允许的。如有不妥请指正

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

所以,你的理解是错误的。您不能用 mov.

填充 rax 的一部分

正如 Jester 在评论中所说的那样,mov rax, dwordVal 的确切结果取决于您的汇编程序所遵循的约定,一些汇编程序实际上会拒绝这种非法的事情。

我可以告诉你的一件事是,rax 中绝对不会有之前加载到其中的 0FFFFFFFF00000000h 中的任何东西。