天天看点

实模式与保护模式详解三:寻址方式

寻找操作数物理地址的方式叫寻址方式

操作数的存放点

  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。

继续阅读