天天看點

實模式與保護模式詳解三:尋址方式

尋找操作數實體位址的方式叫尋址方式

操作數的存放點

  1. 操作數在指令中

    指令的操作數部分就是操作數本身

    也叫立即數

  2. 操作數存放在CPU寄存器中

    指令的操作數部分是寄存器的編碼

    也叫寄存器操作數

  3. 操作數存放在記憶體中

    指令的操作數部分包含操作數所在的記憶體位址

    也叫儲存器操作數

尋址方式

  1. 立即數尋址

    e.g.

    ​​

    ​MOV AL, 10H​

    ​特點:操作數直接放在指令中
  2. 寄存器尋址

    ​​

    ​INC SI​

    ​特點:指令中需給出寄存器名,寄存器中的内容即為操作數
  3. 儲存器尋址方式
  1. 直接尋址

    例子

    ​MOV AL,[2000H] ; AL ← PA=DSx16+2000​

    ​特點: p指令中直接給出有效位址EA:8位或16位位移量。 PA = (段寄存器)X 10H +指令中的EA 。 預設方式下:段寄存器是資料段DS。段跨越:指令增加段寄存器名字首:CS,ES,SS等
  2. 寄存器間接尋址方式

    例子

    ​MOV AX,[SI] ;AX ← DSx16 + [SI],[SI+1]​

    ​​

    ​MOV BH,[BP] ;BH ← SSx16 + BP​

    ​​

    ​MOV CX,ES:[BX] ;将ES段[BX][BX+1]内容送CL,CH​

    ​特點: 操作數的有效位址EA在寄存器中。 對16位尋址,EA隻能放在DI、SI、BX、 BP中 ,若EA在DI、SI、BX中,預設段為資料段DS ,若EA在BP中,預設段為堆棧段SS ,支援段跨越。
  3. 寄存器相對尋址方式

    例子

    ​MOV AX, [BX+10H] ; EA=(BX)+10H​

    ​特點 :給定基址/變址寄存器和相對偏移量,兩者之和為EA。 寄存器BX、SI、DI預設是資料段DS,寄存器BP預設堆棧段SS。 支援段跨越。
  4. 基址變址尋址方式

    例子

    ​MOV AX, [BX+SI] ; EA=(BX)+(SI) ;DS段​

    ​特點:有效位址EA是基址寄存器與變址寄存器的和。 預設段由基址寄存器決定。 支援段跨越。
  5. 相對基址變址尋址方式

    特點 :有效位址EA是基址寄存器+變址寄存器+偏移量三者之和。 基址寄存器可取BX或BP,變址寄存器可取SI或DI。 段寄存器由基址寄存器決定 p基址寄存器是BX,則預設段為DS; p基址寄存器是BP,則預設段為SS。

繼續閱讀