MOV和MOV ptr之间的区别

时间:2019-04-30 08:34:04

标签: c assembly x86 mov

我不了解MOVMOV ptr之间的区别。

例如,在此C代码中:

unsigned char x, y;
x = 2; 

汇编的第二行是:

`MOV x, 2`

但此C代码的第二行:

tabbyte[0] = 15
unsigned char tabbyte[4]

在汇编中是:

MOV byte ptr tabbyte[0], 15

这两个汇编指令之间有什么区别,何时应使用每个汇编指令?

2 个答案:

答案 0 :(得分:4)

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

         

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

         

    例如说明

        mov     [ESI], al  ; Store a byte-size value in memory location pointed by ESI
    
         

    由于AL是8位寄存器,建议应移动8位量。

         

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

        mov     [ESI], 5   ; Error: operand must have the size specified
    
         

    要解决这个实例,我们必须使用指针指令,例如

        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
    
         

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

         

    通常,PTR运算符会强制将表达式视为指定类型的指针:

        .DATA
        num  DWORD   0
    
        .CODE
        mov     ax, WORD PTR [num] ; Load a word-size value from a DWORD
    
  2.   

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

答案 1 :(得分:2)

如果操作数未暗示

byte ptrword ptr等内容,则仅需指示操作的大小。它是方括号([]),在MASM中,裸符号表示内存引用。要在MASM中使用变量的地址加上offset前缀,对于NASM,只需省略方括号即可。

在英特尔语法模式下,GNU AS在这方面的行为类似于MASM。

相关问题