MOV 和 MOV ptr 之间的区别

Ian*_*one 3 c x86 assembly mov

我不明白之间的区别MOV我不明白和MOV ptr

例如,在这段C代码中:

unsigned char x, y;
x = 2; 
Run Code Online (Sandbox Code Playgroud)

汇编中的第二行是:

`MOV x, 2`
Run Code Online (Sandbox Code Playgroud)

但这段代码的第二行C

tabbyte[0] = 15
unsigned char tabbyte[4]
Run Code Online (Sandbox Code Playgroud)

在装配中是:

MOV byte ptr tabbyte[0], 15
Run Code Online (Sandbox Code Playgroud)

两种汇编指令之间有什么区别以及何时应使用每种指令?

P__*_*J__ 5

  1. 指令 BYTE PTR、WORD PTR、DWORD PTR

    有时我们需要协助汇编器将引用转换为内存中的数据。

    例如,指令

        mov     [ESI], al  ; Store a byte-size value in memory location pointed by ESI
    
    Run Code Online (Sandbox Code Playgroud)

    建议移动 8 位数量,因为 AL 是一个 8 位寄存器。

    当指令没有引用操作数大小时,

        mov     [ESI], 5   ; Error: operand must have the size specified
    
    Run Code Online (Sandbox Code Playgroud)

    为了绕过这个实例,我们必须使用指针指令,例如

        mov     BYTE PTR [ESI], 5  ; Store 8-bit value
        mov     WORD PTR [ESI], 5  ; Store 16-bit value
        mov     DWORD PTR [ESI], 5 ; Store 32-bit value
    
    Run Code Online (Sandbox Code Playgroud)

    这些指令要求操作数大小相同。

    一般来说,PTR 运算符强制表达式被视为指定类型的指针:

        .DATA
        num  DWORD   0
    
        .CODE
        mov     ax, WORD PTR [num] ; Load a word-size value from a DWORD
    
    Run Code Online (Sandbox Code Playgroud)

http://www.c-jump.com/CIS77/ASM/Instructions/I77_0250_ptr_pointer.htm