当我们想要创建一个这样的初始化变量时:
name db 'zara ali'
我们创建了一个字节大小变量,但我们在其中存储了一个字符串
怎么可能?
当我们使用这个指令时:
MOV ecx, name
我们在4字节大小的寄存器中存储了一个字节大小的变量,而在MOV指令中,两个操作数必须大小相同 . 怎么可能?
name db 'zara ali' 只是一个简写
name db 'z', 'a', 'r', 'a', ' ', 'a','l','i'
这是另一种简写
name db 'z' db 'a' db 'r' db 'a' db ' ' db 'a' db 'l' db 'i'
因此,这是一个字节序列,第一个的地址被赋予名称 name .
name
MOV ecx, name 在不同的汇编程序中具有不同的语义 .在NASM中它不读取变量 name 它在 ecx 中存储符号 name 的值 - 它等同于TASM / MASM表示法
ecx
mov ecx, OFFSET name lea ecx, name ;This is an abuse of notation but valid in TASM
在MASM / TASM中,它在地址 name 处读取DWORD(通过使用像 ecx 这样的DWORD寄存器隐含),从而读取前四个字节( zara ) .它相当于NASM中的 mov ecx, [name] 或 mov ecx, DWORD [name] .
zara
mov ecx, [name]
mov ecx, DWORD [name]
1 回答
name db 'zara ali'
只是一个简写这是另一种简写
因此,这是一个字节序列,第一个的地址被赋予名称
name
.MOV ecx, name
在不同的汇编程序中具有不同的语义 .在NASM中它不读取变量
name
它在ecx
中存储符号name
的值 - 它等同于TASM / MASM表示法在MASM / TASM中,它在地址
name
处读取DWORD(通过使用像ecx
这样的DWORD寄存器隐含),从而读取前四个字节(zara
) .它相当于NASM中的
mov ecx, [name]
或mov ecx, DWORD [name]
.