寻址方式与指令系统
第三章 寻址方式与指令系统
主要内容:
– 8086/8088指令系统的寻址方式 – 8086/8088指令格式 – 8086/8088指令系统 – 80x86指令系统
8086/8088指令系统的寻址方式
所谓寻址方式就是寻找操作数存放地址 (位置)的方法。在8086/8088系统中操作数存 放的位置有以下4种:
+ SI: 2000H
M
32000H
AX
40 50
30000H
32000H
50 40
…… ……
DS:30000H
+ BX: 1000H
M
31000H
AL
30000H
50
31000H
50
⑶ 寄存器相对寻址
MOV ((BBCXPL)) , [BX8位+1d0is6p4H]
EA= (DI) + 16位 disp
1. 数据的寻址方式
对于数据操作数,有四种形式:
① 无操作数
② 单操作数:可以是源操作数,也可以是 目的操作数。
③ 双操作数:一个是源操作数,一个是目的 操作数。
④ 隐含操作数:可能隐含一个操作数(源或 目的),也可能隐含两个操作数。
源操作数:在操作过程中其值不变的操作数。 (可以提供数据的操作数)
DS:(S2I0)000H
BX: 1000H
+
1064H
操作码
代
码
64
段
10
22064H
20000H
CL
45
…
21000H
数 据
…
段
22064H 45
⑷ 基址加变址寻址方式
(BX) (DI) EA= (BP) + (SI)
MOV AH, [BP][SI]
M
SS:40000H BP: 2000H + SI: 1200H
41444H AH 45
…
数
据
…
段
41444H 45
4)I/O端口寻址方式 ⑴ 直接端口寻址方式
IN AL, 21H
I/O接口
01H 02H
……
AL
80 21H
80
操作码
代
21H
码
段
⑵ 间接端口寻址方式 OUT DX, AL
I/O接口 0001H 0002H
80 1234H
……
DX
12
34
AL 80
MOV AX,2500H (AX)=
MOV AX,[300H] (AX)=
MOV AX,[BX]
(AX)=
MOV AX,500H[BX] (AX)=
MOV AX,[BX][SI] (AX)=
MOV AX,[BX+SI+2] (AX)=
设(DS)= 1000H,(ES)= 2000H,(SS)= 3000H,(SI)= 0080H,(BX)= 02D0H ,(BP)= 0060H,试指出下列指令的源操 作数字段是什么寻址方式?它的物理地址是 多少?
指出下列指令中,源操作数及目的操作数的寻 址方式
SUB BX,[BP+35] MOV AX,2030H
SCASB IN AL,40H MOV [DI+BX],AX ADD AX,50H[DI] MOV AL,[1300H]
MUL BL
已知(DS)= 1000H,(SI)= 0200H,(BX)= 0100H ,(10100H)= 11H,(10101H)= 22H,( 10600H)= 33H,(10601H)= 44H,(10300H)= 55H,(10301H)= 66H,(10302H)= 77H,( 10303H)= 88H,试分析下列各条指令执行完后AX 寄存器的内容。
43200H
……
AH
40000H
56H
43200H 56H
⑸ 基址加变址相对寻址
EA=
(BX) (BP) +
(DI) (SI)
+
8位 disp 16位 disp
MOV [BX+DI+1234H], AH
操作码
代
码
34
段
DS:40000H
BX: 0200H
DI: 0010H
+
1234H
12 40000H
⑴ 直接寻址方式
EA= 16位 disp
MOV AL, [1064H]
DS:20000HΒιβλιοθήκη +1064H
21064H
操作码
代
64
码
10
段
AL 45
20000H
…
数 据
21064H 45
段
⑵ 寄存器间接寻址 MOV AX, [SI] MOV [BX], AL
(BX) EA= (DI)
(SI)
DS:30000H
目的操作数:在操作后可被操作结果代替的 操作数。(可以接收数据的操作数)
1)立即数寻址方式 例如:MOV AL, 80H
MOV AX, 1234H
MOV AL, 80H AL 80H
程序存储器
操作码字节 指
令
80H
码
MOV AX, 1234H
程序存储器
AH AL
12H 34H 操作码字节 指
34H
⑴ 操作数包含在指令字节中。即指令格式 中操作数部分就是操作数本身。这种操作数叫 立即数操作数。
⑵ 操作数存放在CPU的某个内部寄存器中。 这种操作数叫寄存器操作数。
⑶ 操作数在内存的数据区中。这种操作数 叫存储器操作数。
⑷ 操作数来自或送到I/O端口。这种操作 数叫I/O操作数。
在8086/8088系统中,操作数又可分为两大 类:数据操作数和地址操作数。因此,寻址方 式也分为数据寻址方式和地址寻址方式两大类。
MOV AX,0CBH
MOV AX,[100H]
MOV AX,[BX]
MOV AX,[BP]
MOV AX,[BP+50]
MOV AX,[BX][SI]
2.地址的寻址方式 地址的寻址方式其时是程序转移地址的寻 址方式,也就是找出程序转移的地址号,而不 是操作数。 转移地址可以在段内(称段内转移),也 可以跨段(称段间转移)。寻求转移地址的方 法有以下四种: 1)段内直接寻址 转移的地址是当前IP内容和指令规定的8位 或16位位移量之和。 当位移量是8位时,称为短程转移;位移量 是16位时称为近程转移。
PM
opcode
位移量 位移量
当前IP
+
EA
有效转移地址
(CS) ×10H + EA
这种寻址方式适用于条件转移或无条件转 移类指令。但条件转移只有8位位移量的短程转 移。
例:JMP SHORT ALPHA
存储器
本例指令是一无条件转移
令
码
12H
有效地址可以由以下三种地址分量组成:
● 位移量:它是存放在指令中的一个8位或 16位的带符号数。
● 基 址:它是存放在基址寄存器BX或BP 中的内容。
● 变 址:它是存放在变址寄存器SI或DI 中的内容。
对于某条具体指令,这三个地址分量可有不 同的组合。正是因为这三种地址分量有不同的组 合,才使得对存储器操作数的寻址产生了若干种 不同的方式。