新闻中心

8086寻址方式

作者: 时间:2016-11-27 来源:网络 收藏
BTW--符号的说明:

PA表示某一存储单元的物理地址
EA表示某一存储单元的有效地址
(地址)表示地址的内容
[地址]表示地址的内容为偏移地址
DEST表示目的地址,即目的操作数存放的偏移地址
SOUR表示源地址,即源操作数存放的偏移地址
-表示传送。如:(AX)-BX表示把AX的内容传送给BX
?逻辑与
?逻辑或
逻辑异或
----上划线表示逻辑非
____下划线表示从键盘输入
或者
Flags表示状态寄存器

8086和8088 CPU就功能而言可分成两大部分:总线接口单元BIU(Bus Inte***ce Unit)和执行单元EU(Execution Unit)

EU主要实现两种操作:一是根据指令进行算术逻辑运算。二是由计算出指令要求寻址单元地址偏移量,以形成一个20位物理地址,去存取器存取所要求的操作数。
BIU主要负责80868088 CPU与存储器和外设之间的信息传送,BIU用来实现EU所有总线操作。
在EU执行指令的过程中,BIU负责从内存指定区域取出传送给EU部分去执行。在执行指令时,所需的操作数也是由BIU从内存指定区域取出传送给EU部分执行。

与数据有关的寻址方式

1 立即寻址方式(Immediate addressing)

立即数可以是8位的或16位的。如果是16 位数,则高位字节存放在高地址中,低位字节存放在低地址中,如果是32 位数,则高位字在高地址中,低位字在低地址中。

  立即寻址方式常用于给寄存器赋初值,并且只能用于源操作数字段,不能用于目的操作数字段。


例 MOV AL, 9
         指令执行后,(AL)= 09H

例 MOV AX, 3064H
         指令执行后,(AX)= 3064H

注意:不能直接给段寄存器和标志寄存器赋予立即数。

     显然,下面的指令是错误的:
     MOV DS, 1250H

2 寄存器寻址方式(Register addressing)

  对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、SP、BP、CS、DS、ES和SS;对于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL、DH。由于操作数就在寄存器中,指令执行时不需要访问存储器,因此这是一种快速的寻址方式。

例 MOV  AX, BX
          如指令执行前(AX)= 1234H,(BX)= 5678H;
          则指令执行后(AX)= 5678H,(BX)保持不变。

  注意:源寄存器和目的寄存器的位数必须一致。

  例如:MOV CL, BX是一条错误指令。


  除上述两种寻址方式外,下面五种寻址方式的操作数都在除代码段以外的存储区中。
  这里先引入有效地址EA(Effective Address)的概念:在8086里,把操作数的偏移地址称为有效地址,下面五种计算EA的方法体现了五种寻址方式。

3 直接寻址方式(Direct addressing)

  在这种寻址方式中,操作数存放在存储单元中,而这个存储单元的有效地址就在指令的操作码之后,操作数的物理地址可通过((DS)×16)再加上这个有效地址形成。

  在汇编语言指令中,可以用符号地址(变量名或标号)代替数值地址。
  例如: MOV AX, DATA
    或 MOV AX, [DATA]
    这里DATA是存放操作数单元的符号地址。

  直接寻址方式默认操作数在数据段中,如果操作数定义在其它段中,则应在指令中指定段跨越前缀。
  例如: MOV AX, ES:NUMBER
    或 MOV AX, ES:[NUMBER]
    这里NUMBER是附加段中的字变量。

  直接寻址方式适合于处理单个变量。

例 MOV AX, [2000H]
         如果(DS)= 3000H,则执行情况如图3.2所示。
         最后的执行结果为(AX)= 3050H。

4 寄存器相对寻址方式(Register indirect addressing)

  这种寻址方式通过基址寄存器BX、BP或变址寄存器SI、DI与一个位移量相加形成有效地址,计算物理地址的缺省段仍然是SI、DI和BX为DS,BP为SS。  

  寄存器相对寻址方式也可以使用段跨越前缀。
  例如:MOV AX, ES:[DI+10]

  这种寻址方式同样可用于表格处理。
  表格的首地址可设置为位移量,修改基址或变址寄存器的内容取得表格中的值。

例 MOV AX, COUNT[SI](也可表示为MOV AX, [COUNT+SI])
        其中COUNT为16位位移量的符号地址。
        如果 (DS)= 3000H,(SI)= 2000H,COUNT = 3000H

        则物理地址 = 30000H + 2000H + 3000H = 35000H
        指令执行情况如图3.4所示,最后的执行结果是(AX)= 1234H。

5 基址变址寻址方式(Based indexed addressing)

  这是一种基址加变址来定位操作数地址的方式,也就是说,操作数的有效地址是一个基址寄存器(BP或BX)和一个变址寄存器(SI或DI)的内容之和。如基址寄存器为BX时,与DS形成的物理地址指向数据段;如基址寄存器为BP时,与SS形成的物理地址指向堆栈段。如左图所示。  

  此种寻址方式也可使用段跨越前缀。
  例如:MOV AX, ES:[BX][SI]

  注意:一条指令中同时使用基址寄存器或变址寄存器是错误的。
  例如:MOV CL, [BX+BP] 或 MOV AX, [SI+DI] 均为非法指令。

  这种寻址方式同样适用于数组或表格处理。
  首地址可存放在基址寄存器中,而用变址寄存器来访问数组中的各个元素。由于两个寄存器的值都可以修改,所以它比寄存器相对寻址方式更加灵活。

例 MOV AX, [BX][DI] (或写为 MOV AX, [BX+DI])
        如 (DS ) = 2100H,(BX)= 0158H,(DI)= 10A5H
        则 EA = 0158H +10A5H = 11FDH


        物理地址 = 21000H +11FDH = 221FDH
        指令执行情况如图3.5所示,最后的执行结果是(AX)= 1234H。

6 相对基址变址寻址方式(Relative based indexed addressing)

  这种寻址方式与基址变址寻址方式类似,不同的是基址加变址再加上一个位移量形成操作数的有效地址。缺省段的使用仍然是DS与BX组合,SS与BP组合。  

  这种寻址方式通常用于对二维数组的寻址。
  例如,存储器中存放着由多个记录组成的文件,则位移量可指向文件之首,基址寄存器指向某个记录,变址寄存器则指向该记录中的一个元素。

上一页 1 2 下一页

关键词:8086寻址方

评论


技术专区

关闭