当我将存储在eax,ebx,ecx等中的4字节值移动到分配的空间少于4字节的地址空间时,nasm的行为如何?当我将var
中存储的1字节值移动到4字节寄存器时,nasm分别表现如何?
赞:
.bss
var resb 1
.text
mov eax, 2000000000
mov [var], eax
xor ebx, ebx
mov ebx, [var]
[var]
和ebx
将具有什么值?又为什么呢?当用printf
调用%d
时,我得到的是2000000000
。但是怎么可能呢? var
只能保存1个字节。怎么可能从中接收到需要更大字节数的数字?
与MASM不同,Nasm不会跟踪变量的大小。 (它实际上没有变量,它只有标签。)因此,mov指令将简单地覆盖(或读取)从标签var
开始的四个字节中的任何内容。