Assembly memory operands clarification

后端 未结 1 1789
暗喜
暗喜 2021-01-29 10:35

I understand when for example [BX] is in between brackets it is referring to its memory contents. But at the same time I do not understand that.

CMP [BX], 12ADH
         


        
1条回答
  •  无人及你
    2021-01-29 10:56

    CMP [BX], 12ADH
    

    This is actually an invalid instruction, as you haven't specified the size of the first operand. Assuming you intend a WORD (16-bit) comparison, like:

    CMP WORD [BX], 12ADH
    

    This will first fetch a 16-bit WORD from memory at the address specified in the BX register. Then, it will compare that value to the immediate value 12ADh.

    Note that CMP does the same thing as SUB, but without actually modifying any values. It only "pretends" to do the subtraction, and sets the FLAGS accordingly.


    MOV EBX, [BX]
    

    This will fetch a 32-bit DWORD from memory at the address specified in the BX register. Then, it will store that value in the EBX register.


    In an expression like WORD [BX], we can say that BX "points to" a 16-bit WORD in memory:

             Memory             Register File
               ...
            _________             ________
     100h  |  1234h  |     /---- |  102h  | BX
           |_________|     |     |________|
     102h  |  5678h  | <---/        ...
           |_________|
     104h  |  9ABCh  |
           |_________|
     106h  |  DEF0h  |
           |_________|
               ...
    

    0 讨论(0)
提交回复
热议问题