首页 文章

汇编MOV指令操作数

提问于
浏览
1

当我们想要创建一个这样的初始化变量时:

name db 'zara ali'

我们创建了一个字节大小变量,但我们在其中存储了一个字符串

怎么可能?

当我们使用这个指令时:

MOV ecx, name

我们在4字节大小的寄存器中存储了一个字节大小的变量,而在MOV指令中,两个操作数必须大小相同 . 怎么可能?

1 回答

  • 7

    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 .

    MOV ecx, name 在不同的汇编程序中具有不同的语义 .
    在NASM中它不读取变量 name 它在 ecx 中存储符号 name 的值 - 它等同于TASM / MASM表示法

    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] .

相关问题