03_指令系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二个寄存器都能修改,所以比直接变址方式更灵活。
MOV AX, MASK [BX] [DI] (5)基址变址相对寻址 或 MOV AX, MASK [BP] [SI] 假设:(DS)=3000H (BX)=1346H (DI)=0500H MASK=1234H (32A7AH)=4050H
则 EA=2A7AH PA=32A7AH (AX)=4050H
A0H 50H …
数 据 段
BH 50H
BL A0H
(2)寄存器间接寻址
(2)以BP为寄存器进行间接寻址。 默认段寄存器SS 操作数物理地址为:
PA=16d×(SS)+(BP) 若使用其它段寄存器,需要前缀指明
MOV [BP], AX 假设:(SS)=1000H (BP)=3000H (AX)=1234H
MOV AX, [3100H] 物理地址: PA=16d×(DS)+EA ∵ (DS)=6000H; ∴ PA=63100H;
+
DS 6000H 60000H 3100H …
操作码
00 31 … 50H 30H …
代 码 段
63100H
63100H
∵ (63100)=3050H ∴ 执行指令后 AH (AX)=3050H 30H
3.2 寻址方式
数据寻址方式
存储器寻址
立即数寻址 寄存器寻址 直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 相对基址变址寻址
1.立即数寻址
操作数直接由指令给出 例如: MOV BL,60H ;(BL=60H) MOV AX,3100H ;(AX=3100H)
82000H
操作码
3.3 8086指令系统
数据传送指令
算术运算指令
逻辑运算和位操作类指令
串操作指令 程序控制指令
处理器控制指令
3.3.1 数据传送类指令
1.通用数据传送指令 2.地址传送指令 3.标志寄存器传送指令
1.通用数据传送指令
(1)数据传送指令 指令格式: MOV dst,src 指令功能:(dst)←(src) 实 现: 寄存器 寄存器 寄存器 内存 寄存器/内存 立即数 例如: MOV AX, BX; MOV AL, [1000H];
代码段
4 3 0 0 0
操作码
4.段间间接寻址
这种寻址方式和段内间接寻址相似。但是,由于确 定转移地址需要32位信息,因此只适用于存贮器寻 址方式。用这种寻址方式可计算出存放转移地址的 存贮单元的首地址,与此相邻的4个单元中,前两个 单元存放16位的段内偏移地址;而后两单元存放的 是16位的段地址,如图3-13所示。 例:JMP DWORD PTR [BP] [DI]
3.2 寻址方式
转移地址的寻址方式
段内直接寻址 段内间接寻址 段间直接寻址
段间间接寻址
3.2.2 转移地址的寻址方式
1.段内直接寻址
段内直接寻址方式也称为相对寻址方式,转移 的目标地址是当前IP内容和一个8位或16位的 位移量DISP之和。即物理地址=CS×16+IP+ DISP
AH 40H
…
32A7AH 50H 40H AL 50H …
数 据 段
用途:
这种寻址方式为堆栈处理提供方便: BP为栈顶值(一般都是用BP指向栈顶);从栈顶 到数组的首地址可用MASK表示;变址寄存器(SI) 或(DI)指向数组中某个元素。
小结:
纵观8086/8088寻址方式,其操作数有3种类型:
5000H 50000H 3000H 2040H 55040H 3000H
代 码 段 …
堆 栈 段
+
50000H
55040H 48H
则 EA=5040H PA=55040H; (55040)=5548H (AX)=5548H
AH
55H
AL
48H
55H …
用途:
这种寻址方式一般用于表格处理。 表格首地址为COUNT,修改基址或变址寄存器来取 得表格中其它元素的值
若使用其它段寄存器,需要前缀指明
MOV BX, [DI] ( MOV BX,DI ) 假设 (DS)=6000H (DI)=2000H DS
6000H
DI 2000H
…
∴ PA=62000H;
+
∵ (62000)= 50A0H ∴ (BX)= 50A0H
60000H 2000H 62000H 62000H
MOV指令注意事项
1.立即数只能作为源操作数,不能作为目的操作数。 2.目的操作数与源操作数必须类型一致。 3.两个操作数不能都是存储器操作数。 4.不能将任何数据传送给CS寄存器。 5.指令指针IP不能作为操作数。 6.段寄存器之间不能传送值。 7.立即数不能直接传送到段寄存器,但可通过其他寄 存器或堆栈传送。 8.不影响标志位。
存储器操作数可以作为源操作数,也可以作为目 的操作数。 但多数指令不允许源操作数、目的操作数 同时为存储器操作数。
MOV [BX], [3100H] ×
练习1:
1.若CS=5200H时,某指令的物理地址为5A230H, 则CS=7800H时,此时的物理地址是多少? 2.设BX=637DH, SI=2A9BH,位移量为C237H,试确 定由这些寄存器和下列寻址方式产生的有效地址。 (1)直接寻址 (2)用BX的寄存器间接寻址 (3)用BX的相对寄存器间接寻址 (4)基址加变址寻址 (5)相对基址加变址寻址
(2)寄存器间接寻址
有效地址EA=
[BX] [BP] [SI] [DI] [3100H]
直接
(2)寄存器间接寻址
(1)以SI,DI,BX为寄存器进行间接寻址。 默认段寄存器DS 操作数物理地址为: PA=16d×(DS)+(BX) PA=16d×(DS)+(SI) PA=16d×(DS)+(DI)
寄存器操作数可能存放在: 8088/8086的通用寄存器、地址指针或变址寄 存器以及段寄存器中。
隐含寄存器操作数: 某些指令规定只能使用指定寄存器操作数, 从指令形式上看,似乎没有指出操作数,实际上 是隐含了某些特定寄存器操作数。 MUL CL ; AL*CL AX
(3)存储器操作数
存储器操作数类型可以为:字节、字、双字。
例:JMP DISP
图3-10中,1000H是CPU读取这条指令的位 移量50H后IP的内容。所以,该指令使CPU 转向31050H去执行。
1.段内直接寻址
ROM
. . .
CS 3 0 0 0 IP 1 0 0 0 5 0 3 1 0 5 0 31050H 操作码 操作码 50 代码段
. . .
. . .
操作数寻址 寻找指令中操作数所在地址的方法(指令中 关于如何计算操作数有效地址的方法)。
ADD AL, 5; (加法指令) ADD AL, BL;(加法指令)
指令地址寻址
JMP next;
3.2 寻址方式
指令中可以直接给出所使用的操作数本身,或 者只给出操作数所在的寄存器,存储器或I/O端 口的地址或地址的计算方法。 计算机按照指令给出的寻址方式求出操作数的 有效地址和存取操作数的过程称为寻址操作。
第3章 指令系统
3.1 指令系统概述 3.2 寻址方式 3.3 8086指令系统
3.4 80286、80386扩充指令
3.1 8086指令系统概述
一条指令需要指出两部分内容: 1.要进行什么操作(由操作码指出) 2.指令所涉及的操作数和操作结果存放的位置
例:
ADD AL,5;(加法指令)
Fra Baidu bibliotek
3.2 寻址方式
练习2 指出下列指令源操作数的寻址方式
MOV MOV MOV MOV MOV MOV MOV MOV AL, 12H; AX, 12A0H AL, BL DX, SI CX, [12A0H] AX, [BP] (或[SI]/[DI]/[BX]) AX, [BX] [SI] AL, [BP] [DI]
. . .
操作码
. . .
3.段间直接寻址
在这种寻址方式中,指令码中将直接给出16位 的段地址和16位的段内偏移地址。 例:JMP FAR PTR
CS IP
DADD1
ROM
. . .
操作码 偏移量低字节00 偏移量高字节30 段地址低字节00 段地址高字节40
4 0 0 0 3 0 0 0
{ {
43000H
2.段内间接寻址
这种寻址方式在段内进行,其转移的目标地址是 16位寄存器或两个相邻的存储单元的内容,即以 寄存器或存储器单元内容来更新IP的内容。如图 3-11所示。
例:JMP CX JMP WORD PTR [BX]
2.段内间接寻址
ROM
. . .
CS CX(IP) 3 0 0 0 4 0 0 0 3 4 0 0 0 34000H 操作码 代码段
例如:
某数据表的首地址为COUNT 欲读取表中第n个数据,存放到(AL)中, 第n个数据的有效地址:EA=COUNT+(n-1) MOV SI, n-1 MOV AL, [SI+COUNT]
MOV AX, [BX] [SI] MOV AX, [BP] [DI]
假设:(DS)=3200H (BX)=0456H (SI)=1094H (334EAH)=1234H
4.段间间接寻址
ROM SS 3 0 0 0 BP 1 0 0 0 DI 2 0 0 0 3 3 0 0 0
33000H
. . .
操作码
. . .
CS IP
8 0 0 0 2 0 0 0 8 2 0 0 0
{ {
偏移量低字节00 偏移量高字节20 段地址低字节00 段地址高字节80
代码段
. . .
立即操作数 寄存器操作数 存储器操作数
(1) 立即操作数
立即操作数只能作为源操作数,不能作为目的 操作数 MOV AX, 3100H √ MOV 3100H, AX ×
指令中的立即操作数不能超过8位或16位的取 值范围 MOV AL, 100H × MOV AX, 20000H ×
(2) 寄存器操作数
63101H
AL 50H
数 据 段
(2)寄存器间接寻址
操作数在存储器中,存储单元的有效地址在寄存 器中。
特点:需要1个以上总线周期。 说明:寄存器可为BX,BP,SI,DI。 如果没有指明具体的段寄存器,默认的段寄存 器为DS;当寄存器为BP时,段寄存器为SS. 允许在指令中使用8位或16位的偏移量。
+
SS 1000H 10000H 3000H 13000H
BP 3000H
…
则 PA=13000H;
∴ (13000)=1234H
13000H 34H
堆 栈 段
AH 12H
AL 34H
12H
…
(3)寄存器相对寻址
有效地址EA=
[BX] [BP] [SI] [DI]
8位的位移量 + 16位的位移量
MOV AX, COUNT [BP] (或MOV AX,[BP+COUNT]) (或MOV AX,[BP]+COUNT) 其中COUNT为16位位移量 SS BP 假设:(SS)=5000H (BP)=3000H COUNT=2040H (AX)=1234H
(4) 基址变址寻址
BX 0456H 32000H 0456H 1094H 334EAH SI 1094H
…
+
334EAH 67H 45H …
数 据 段
则 EA=14EAH PA=334EAH (AX)=4567H
AH
45H
AL
67H
用途:
这种寻址方式也常用于数组或表格处理。
表格首地址位于基址寄存器中,用变址寄存器来访 问数组中的元素。
特点:不需要使用总线周期,速度比较快 说明:立即数可以是8位,也也可以是16位 只能为整数 只能作为源操作数
2.寄存器寻址
操作数在CPU内的寄存器中,指令中只给出寄存 器名 例如: MOV AX,BX ; 将BX内容传到AX
特点:不需要使用总线周期,执行速度快 说明:16位寄存器为 AX,BX,CX,DX,SI,DI,SP,BP 8位寄存器为 AH,AL,BH,BL,CH,CL,DH,DL 源操作数、目的操作数同时可以使用寄存器 寻址
2.寄存器寻址
MOV SS, AX 执行指令前:(AX)--3064H (SS)--1234H 执行指令后:(SS)--3064H (AX) 保持不变
SS 执行指令前: 1234H 执行指令后: 3064H AX 3064H 3064H
3.存储器寻址
(1)直接寻址
操作数在存储器中,存储单元的有效地址由指令直 接给出。 例如: MOV AX, [3100H] ( MOV AX,3100H ) 特点:需要1个总线周期。 说明:默认的段寄存器为DS,如果不是DS,则需要 用前缀指出。 MOV BX, ES:[3100H] 将ES段的3100H和3101H两单元的内容取到BX