8086的寻址方式(两大类)

8086的寻址方式

一:概念介绍:

所谓寻址方式,通俗的讲就是指令中给出的操作数(包括数据操作数和地址操作数)的方法:8086指令系统的寻址方式根据操作数的种类分为两大类,即数据寻址方式和地址寻址方式。如下所示:
1、数据寻址方式(四类,九种):
(1)立即数寻址方式
(2)寄存器寻址方式
(3)存储器寻址方式:直接寻址方式;寄存器间接寻址方式;寄存器相对寻址方式;基址变址寻址方式;基址变址相对寻址方式。
(4)I/O端口寻址方式
2、地址寻址方式(四类)
(1)段内直接寻址方式
(2)段内间接寻址方式
(3)段间直接寻址方式
(4)段间间接寻址方式

二:知识储备

1、相关寄存器的介绍

8086的寻址方式(两大类)_第1张图片
注意点:
(1)8086CPU不支持直接将数据送入段寄存器的操作,所以段寄存器只能经过其他寄存器作为中转寄存器,再载入值;
(2)基址寄存器BX,BP用于保存相对段首地址的偏移地址,如无特殊说明,BX的默认段寄存器是DS;BP的默认段寄存器是SS;
(3)变址寄存器SI(源变址寄存器),DI(目的变址寄存器),既可用于存放存储单元在段内的偏移量,又可用于存放在相对于段内偏移量的偏移量;
(4)上面图中的AX,BX,CX,DX都是16位寄存器,但是同时又可以分为低8位(AL,BL,CL,DL,)和高8位(AH,BH,CH,DH),其他寄存器不能这样拆分;
(5) EA(有效地址):操作数相对于段首的偏移地址。其中有效地址由三种地址分量组成:1)位移量:存放在指令中的8位或者16位的数,即地址;2)基址:存放在基址寄存器BX或者BP中的内容;3)变址:存放在变址寄存器SI或者DI中的内容。

2、端口的介绍

端口的作用是交换主机与外设的数据,端口分为三种:1)数据端口;2)状态端口;3)控制端口。 PC机给予每一个端口分配了一个地址,即端口号,在8086中,端口地址的范围是0000~FFFF。CPU对外设的操作通过专门的端口读写指令来完成。读端口用IN指令,写端口用OUT指令。

三:寻址方式介绍

1、数据寻址方式:

(1)立即数寻址方式
立即数:立即数寻址方式所提供的操作数直接包含在指令中,紧跟在操作码之后,它作为指令的一部分,这种操作数就称为立即数。
操作示例如下:
在这里插入图片描述
注意点:
1)立即数可以使8位的,也可以是16位的,但是进行数据传输或者运算时,要进行指令的操作对象的位数应该是匹配的。比如,下面的图示就是错误的:
在这里插入图片描述
2)立即数寻址方式只能作为源操作数,主要用来给寄存器或者存储单元赋值。

(2)寄存器寻址方式
寄存器寻址方式的操作数就存放在指令规定的寄存器中,寄存器的名字在指令中指出。对于16位操作数,寄存器可以有AX,BX,CX,DX,SI,DI,SP,BP;对于8位操作数,寄存器可以有AH,AL,BH,BL,CH,CL,DH,DL。
操作示例如下:
在这里插入图片描述
注意点:进行数据传输或者运算时,要进行指令的操作对象的位数应该是匹配的。比如,下面的图示就是错误的:
在这里插入图片描述
(3)存储器寻址方式(5种)
1)直接寻址方式(与立即数寻址方式不同):直接寻址方式的操作数有效地址只包含位移量一种分量,即在指令的操作码后面直接给出有效地址(EA=位移量),一般来说,如果没有明确给出段寄存器名称,则默认在数据段中(ds为数据段的寄存器,如指令1),如果需要实现段超越,此时需要在指令中指出要用到的段寄存器(如指令2所示的es段)。
操作示例如下:(其中[ ]括起来的整体代表地址)
在这里插入图片描述
2)寄存器间接寻址方式:寄存器间接寻址方式的操作数有效地址包含基址寄存器BX的内容或者变址寄存器SI,DI的内容的一种分量,即操作数的有效地址在某个寄存器中。书写时,用作间址的寄存器必须加上“[ ]”,避免和一般的寄存器的寻址方式混淆。
操作示例如下:
在这里插入图片描述
3)寄存器相对寻址方式:寄存器相对寻址方式的操作数有效地址是一个基址寄存器(BX,BP)或变址寄存器(SI,DI)的内容+指令中给定的8位或16位位移量,即有效地址由两种分量组成。一般情况下,如果指令中的寄存器是BX,SI,DI,则对应的段地址默认是DS,如果是BP,则对应的段地址默认是SS。同样的,寄存器相对寻址方式也允许段超越。其中位移量可以是一个8位或者16位的立即数,也可以是符号地址。
操作示例如下:8086的寻址方式(两大类)_第2张图片
4)基址变址寻址方式:基址变址寻址方式的操作数有效地址是一个基址寄存器(BX,BP)和一个变址寄存器(SI,DI)的内容之和,即有效地址由两种分量组成。
操作示例如下:
在这里插入图片描述
5)基址变址相对寻址方式:基址变址相对寻址方式的操作数有效地址是一个基址寄存器与一个变址寄存器的内容和指令中给定的8位或16位位移量之和,即有效地址由三种分量组成。
操作示例如下:
在这里插入图片描述
(4)I/O端口寻址方式(2种)
1)端口直接寻址方式:这种寻址方式的端口地址用8位立即数(0~255)表示。
操作示例如下:
在这里插入图片描述
该条语句表达的是将地址为21H的的端口中读取到的数据放入ax寄存器中。
2)端口间接寻址方式:当I/O端口的地址大于FFH时,一定要事先将端口地址放在DX寄存器中。
操作示例如下:
在这里插入图片描述
语句1表达的是将端口地址122H送入dx寄存器中,语句2表达的是将ax中的内容输出到由dx寄存器指定的端口中。

2、地址寻址方式:

(1)段内直接寻址方式(也称为:相对寻址方式)
转移地址是当前的IP内容和指令规定的下一条指令到目标地址之间的8位或16位的相对位移量之和(相对位移量可正可负)。
操作示例如下:
在这里插入图片描述
(2)段内间接寻址方式
该寻址方式是将转移地址存放在寄存器或者存储单元中(存储器可用各种数据寻址方式表示)。指令操作的实质是利用寄存器或者存储单元中的值替换当前IP中的内容,实现段内转移的功能。
操作示例如下:
在这里插入图片描述
(3)段间直接寻址方式:在指令中直接用16位的段地址和16位的偏移地址来修改当前的CS:IP,实现段间直接寻址。
操作示例如下:
在这里插入图片描述
(4)段间间接寻址方式:由指令中给出的存储器寻址方式求出存放转移地址的四个连续存储单元的地址。指令的操作是用存储器的前两个单元的内容修改IP,后两个单元的内容修改CS,从而实现段间转移。
操作示例如下:
在这里插入图片描述

四:后语

以上就是介绍的8086的7种寻址方式。由于还是初学者,所以难免有不完善或者一些没有发现的错误,所以还希望看到错误的朋友可以留言,促我改进!

你可能感兴趣的:(汇编)