8086/8088寻址方式

计算机是通过执行指令序列来解决问题的

因而每种计算机都有一组指令集提供用户使用,这组指令就称为计算机的指令系统。

计算机中的指令由操作码字段和操作数字段两部分组成。

指令的操作码字段在机器里的表示比较简单,只需对每一种操作指定确定的二进制代码就可以了。指令的操作数字段的情况就比较复杂,如果操作数存放在寄存器中,则由于寄存器的数量较少,因而需要指定的操作数地址的位数就较少。

但如果操作数存放在存储器里,那么一个存储单元的地址就需要20位,怎样设法使它在指令的操作数字段的表示中减少位数呢?

为了便于人们使用而采用汇编语言来编写程序。

汇编语言是一种符号语言,它用助记符表示操作码,用符号或地址来表示操作或操作数地址。它与机器指令一一对应的。

寻址方式:表示指令中用于说明操作数所在的地址的方法

8086/8088有七种基本的寻址方式:

1,立即数寻址方式

操作数就包含在指令中,它作为指令的一部分,跟在操作码后存放在代码段。这种操作数称为立即数。立即数可以是8位的可以是16位的。

如果立即数是16位的按‘高高低低’的原则。

例如:MOV AL,5  则指令执行后,(AL) =05H

           MOV BC,3064H 则指令执行后,(BX) = 3064H

2,寄存器寻址方式

操作数在CPU内部的寄存器中,指令指定寄存器号。

对于16位操作数,寄存器可以是:

AX、BX、CX、DX、SI、DI、SP、BP等;

对于8位操作,寄存器可以是:

AL、AH、BL、BH、CL、CH、DL、DH。

这种寻址方式由于操作灵敏就在寄存器中,不需要访问储存器来取得操作数,因而可以取得较高的运算速度。

例如:MOV AX,BX

如指令执行前(AX) = 3064h,(BX) = 1234H;则指令执行后,

(AX) = 1234H, (BX)保持不变

例如:MOV SL,AX

           MOV AL,DH

3,直接寻址方式

操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)。所以操作数地地址由DS加上指令中直接给出的16位偏移地址。如果采用段超越前段,则操作也可含在数据段外的其它段中。

例如:MOV AX,[8054] 如 (DS) = 2000H (28054) = 3050

则物理地址= 20000 + 8054 = 28054

在汇编语言指令中,可以用符号地址代替值地址,

如:MOV AX, VALUE

此时VALUE为存放操作单元的符号地址。

如写成:MOV AX,[VALUE]

也是可以的,两者是等效的。如VALUE在附加段中,则应指定超越前缀如下:

MOV AX, ES:VALUE

或MOV AX,ES:[VALUE]

直接地址方式常用处理单个存储变量的情况。直接寻址的操作通常是程序使用的变量。

4,寄存器间接寻址方式

操作数在存储器中,操作数有效地址在SI、DI、BX、BP

这四个寄存器之一中。在一般情况下,

如果有效地址在SI、DX和BX中,则DS段寄存器之内容为段值。

如果有效地址在BP中,则以SS段寄存器之内容为段值。

例如:MOV AX,[SI]

         如果(DS) =5000H (SI) = 1234H

则物理地址= 50000 + 1234 = 51234H

5,寄存器相对寻址方式

操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器的(SI,DI)内容加上指令中给定的8位或16位位移量之和。

 

EA(有效地址) = BX|BP|SI|DI +8|16位位移量

 

在一般情况下,如果SI、DI或BX之内容作为有效地址的一部分,那么引用的段寄存器是DS;

如果BP之内容作为有效地址的一部分,那么引用的段寄存器是SS。

 

物理地址= 16D * (DS)+ (BX|SI|DI)+ 8|16位位移量

 

物理地址= 16D * (DS)+ (BP)+ 8|16位位移量

 

在指令中给定的8位或16位移量采用补码形式表示。在计算机有效地址时,如位移量是8位,则被符号扩展16位。

你可能感兴趣的:(8086/8088寻址方式)