8086CPU-指令操作寻址方式

指令格式

指令:指示计算机按照特定操作的命令

指令系统:是计算机能够执行全部命令的集合,它取决于计算机的硬件设计.指令系统因机而异,没用通用性.(可移植性)

指令格式: 操作码 [操作数], [操作数] 对应:执行何种操作 目的操作数(指令加工之后形成的数据) 源操作数(指令加工之前的数据)

指令中的操作数表征方法:表征参加操作的数据本身->立即数 表征数据存放的地址:寄存器和存储器

操作数类型

立即数操作数:

表示参加操作的数据本身,可以是8位或16位

例:

MOV AX, 1234H; 1234H数据传送給AX

MOV BL, 22H; 22H数据传送给BL

立即数无法作为目标操作数,可以是无法好数或带符号数,其数值应在可取范围内.

寄存器操作数:

表示参加运算的数存放在指令给出的寄存器中,可以16位或8位.(必须对应长度)

例:

MOV AX, BX

MOV DL, CH

存储器操作数:

表示当前参加运算的数存放在存储器的某一个或某两个单元中.

例:

MOV AX, [1200H] 将1200H单元的数据传到AL和AX, 是16位数据

MOV AL, [1200H] 将1200H单元的数据传到AL, 是8位数据

指令的字长与指令的执行速度:

指令字长有操作码的长度,操作数地址长度,操作数个数决定.

8088/8086cpu采用变字长指令格式.

指令的字长影响指令的执行速度.

对不同的操作数,指令执行的时间不同.

(慢) 存储器->立即数->寄存器 (快)

寻址方式

指令的寻址方式就是寻找指令操作数所在地址的方式

立即寻址

例:

MOV AX, 36H; 立即数364H传送給AX

立即数在代码段中.

注意:立即寻址方式只能用于源操作数,主要用于给寄存器赋值

立即寻址方式不执行总线周期,执行速度块.

寄存器寻址

操作数放在寄存器内,由指令直接给出某个寄存器的名字,以寄存器的内容作为操作数.

寄存器可以是16位的AX,BX,CS.....也可以是8位的AH,AL,BH...寄存器

例:

MOV AX, CX

DEC AL

注意:

寄存器寻址方式的指令操作在CPU内部执行,不需要执行总线周期,执行速度快.

寄存器寻址方式既适用于指令的源操作数,也适用于目的操作数,并且可同时用于源操作数和目的操作数.

直接寻址 (直接给出偏移地址)

操作数在存储器中,指令中直接给出操作数所在存储单元的有效地址EA,即段内偏移地址,表示操作数所在存储单元距离段首址的字节数.有效地址是一个无符号的16位二进制数.

例:

MOV AH, [2100H] 将DS段中2100H单元的内容送给AH

MOV AX, [2100H] 讲DS段中2100H单元的内容送给AL; 2100H单元的内容送给AH.

MOV [1000H], AH; 将AH送给偏移地址为1000H的那个单元.

低地址存地位,高地址存高位

注意:

直接寻址方式的操作数所在存储单元的段地址一般在数据段寄存器DS中.

如果操作数在其它段,则需要在指令中用段超越前缀之处响应的段寄存器名.

前面加个ES表明通过ES寻找物理地址,而不是默认的DS

寄存器间接寻址

操作数在存储器中,指令中寄存器的内容作为操作数所在存储单元的有效地址EA(偏移地址). 寄存器仅限于BX,BP,SI,DI.

当使用BX,SI,DI时,操作数所在存储单元的段地址存在数据段寄存器DS中

当使用BP时,操作数所在存储单元的段地址存在堆栈段寄存器SS中.

注意:

只有SI,DI,BX,BP可作为间址寄存器

若操作数所在存储单元不再数据段DS中,需要在指令中用段超越前缀表明其所在段的段名

基址寻址

操作数在存储器中,指令中寄存器(BX或BP)的内容于指令指定的位移量之和作为操作数所在存储单元的有效地址EA(偏移地址)

使用BX时,段地址为DS的内容;

使用BP时,段地址为SS的内容.

变址寻址

跟基址寻址一样,只不过用的是变址寄存器.

基址加变址寻址

操作数在存储器内.指令将基址寄存器BX,BP与变址寄存器SI,DI的内容之和再加上偏移量(8位或16位),得到操作数所在存储单元的有效地址EA.

基址寄存器只能用一个,变址寄存器也只能用一个

当使用BX时,段寄存器为DS

当使用BP时,段寄存器为SS

例: MOV AX, [BP + SI];

物理地址=SSx16+BP+SI

字符串寻址

用于字符串操作指令.规定变址寄存器SI中的内容是源数据串的段内偏移地址,而变址寄存器DI中的内容是目标数据串的段内偏移地址.

I/O端口寻址 (独立编址)

寻找输入输出设备的端口地址,可分为直接端口寻址和间接端口寻址.

直接端口寻址:由指令直接给出I/O设备的端口地址,它规定端口地址位8位,能寻址256个端口.

间接端口寻址:由DX给出I/O设备的端口地址. 由于DX是16位,因此间接端口寻址能寻址多达64K个端口.

例:

IN AL, 20H; 将地址为20H的外设内容读入AL中.

OUT DX, AL; AL中内容输出给以DX的内容为地址的外设.

隐含寻址:

指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中.

例:

AAA; 对AL中的内容进行十进制加法调整,并把调整后的结果放入AH和AL中.这条指令的隐含操作数是AH和AL.

猜你喜欢

转载自blog.csdn.net/m0_59069134/article/details/126853036