燕山大学电气工程学院自动化教研室第 3章 8086指令系统指令的执行过程燕山大学电气工程学院自动化教研室第 3章 8086指令系统第三章 8086指令系统汇编语言硬件特性
C PU 工作模式
C PU 寄存器体系指令系统存储管理机制中断与外设依赖于充分发挥汇编语言依赖硬件的特性燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.1 基本数据类型燕山大学电气工程学院自动化教研室第 3章 8086指令系统
80X86多字节数据的存放原则是低位字节在低端地址,高位字节在高端地址,而 低位字节的地址是多字节数据的访问地址。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.1.2 数字数据类型
1、整数
( 1)无符号整数无符号数的最高位不是符号位而是数值的一部分
( 2)符号整数把二进制数的最高一位定义为符号位,符号位为 0表示正数,符号位为 1表示负数。所有操作都假定用 2的补码表示。 正数的补码与原码相同
,负数补码则先对该数的原码除符号外各位取反,然后末位加1.
燕山大学电气工程学院自动化教研室第 3章 8086指令系统符号整数编码
0
1
2
3
4
5
6
7
0 00
0 01
0 10
0 11
1 00
1 01
1 10
1 11
二进制十进制燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.2 IA-32指令格式
操作码,规定计算机所要执行的操作 ;
操作数,指出在指令执行过程中所需要的数或操作数所在的地址 。
格式,
指令语句,[标号,]助记符 [操作数 ] [;注释 ]
伪指令语句,[名字 ]定义符 [操作数 ] [;注释 ]
例,LOOP,ADD AX,0001H; AX内容加 1
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.3 寻址方式
3.3.1立即寻址
操作数所在的地址直接包含在指令中。
指令的操作数部分就是操作数本身。
多媒体演示:
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.3.2 寄存器寻址
寄存器中保存的是操作数的内容 。
多媒体演示:
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.3.3 存储器操作数寻址方式
1规定段寄存器
y 3£?′?′′?′ ò? μ×?·
è· à? CS?T IP
o 2? ×÷ SS?T SP
′? 2? ×÷?′ μ×?· DS CS?¢ SS?¢ ES SI
′? 2? ×÷ μ? μ×?· ES?T DI
ó? B Pó?°?· SS CS?¢ SS?¢ ES óD D§μ×?· EA
òo °? êy?Y ′? è? DS CS?¢ SS?¢ ES óD D§μ×?· EA
2? ×÷?à Dí
où?·
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
2 规定偏移量
任何内存实际地址 ( PA) 都由两部分组成:
PA= 段基址+段内偏移地址 ( 此单元与段基址的距离 )
段内的偏移地址又称为有效地址
( EA),
EA= 基地址寄存器内容+索引×比例系数+位移量燕山大学电气工程学院自动化教研室第 3章 8086指令系统有效地址元素 16位寻址 32位寻址基址寄存器 BX BP 任何 32位通用寄存器
(索引)变址寄存器 SI DI
除 ESP外的任何 32位通用寄存器比例系数 无(或 1) 1,2,4,8
位移量 0,8,16位 0,8,16,32位
16位寻址和 32位寻址四成员定义燕山大学电气工程学院自动化教研室第 3章 8086指令系统基址变址加位移量基址加位移量寄存器间接寻址直接寻址 图 3 - 10
图 3 - 11
图 3 - 12
图 3 - 13
MOV AX,2000 H
MOV AX,[ BP ]
COUNT EQU 3000 H
MOV AX,COUNT [ SI ]
COUNT EQU 250 H
MOV AX,COUNT [ BX ][ SI ]
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.3.4 I/O端口寻址
寻址个数,65536( 2 )
8位 I/O端口(也可以定义 16位或 32位)
用立即数寻址只能用 8位立即数,可寻址 I/O端口前 256个;
用 DX寄存器寻址可寻址全部 I/O端口。
16
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4 8086指令系统
8086共 133条指令,从功能上可分为以下类:
1、数据传送指令
2、算术运算指令
3、逻辑运算指令
4、串操作指令
5、控制转移指令
6、处理器控制指令指令中的约定表示符号( P71)
燕山大学电气工程学院自动化教研室第 3章 8086指令系统指令系统学习方法概述
英文还原法操作码助记符是该指令功能的英文缩写,将缩写还原成英语原文,再对照汉语有助于理解其助记符含义,从而加强记忆 。 例如:
增量 INC- Incremect 减量 DNC- Decrement
交换 XCHG- Exchange 加法 ADD- Addition
乘法 MUL- Multiplication 除法 DIV- Division
传送 mov- move
燕山大学电气工程学院自动化教研室第 3章 8086指令系统图示记忆法
图示记忆法是把操作功能相同或相似、但其操作数不同的指令,用图形和箭头将目的、
源操作数的关系表示出来的一种记忆方法。
规则:通常箭头指向为数据传送方向指令学习注意事项
操作数类型
寻址方式
对标志寄存器影响燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.1 数据传送指令
1、通用数据传送指令
2、累加器专用传送指令
3、目标地址传送指令
4、标志位传送指令
特点:寻址方式最丰富,不影响标志位。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 1)通用数据传送指令
[ mem ]
r
Im
CS,ES
DS,SS
AX
( AL )
除
CS
,IP
除
CS
燕山大学电气工程学院自动化教研室第 3章 8086指令系统通用传送指令
格式,MOV DEST,SRC
功能,把源操作数 SRC中的字节或字传送到目的操作数 DEST中。
MOV 指令不影响标志位燕山大学电气工程学院自动化教研室第 3章 8086指令系统
1、不能在两个存储单元之间传送。
MOV [1000H],[2000H]
2,立即数不能送段寄存器。
MOV DS,300H
3,段寄存器之间不能传送。
MOV DS,ES
4,CS不能做目的但可做源操作数。 MOV CS,AX
MOV AX,CS
5,操作数类型要匹配,字对字,字节对字节传送
MOV AX,BL
6,MOV指令不影响标志寄存器的值。
注意的问题:
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 2) 堆栈操作指令 [ me m ]
r
cs,ds,
es,ss
PUSH
POP
PUSH
POP
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
8086/8088的堆栈建栈 MOV AX,1050H
MOV SS,AX
MOV SP,000 EH
进栈 PUSH AX ( 设 AX=1234H)
PUSH BX ( 设 BX=5CF8H)
1050FH
10500H
初始栈顶
(栈底)SP= 0EH
SS= 1050H
堆栈起地址栈的范围
SP= 0EH
12H
34HSP= 0CH
5CH
F8HSP= 0AH
10500H
(不变)
1050FH
SS = 1050H
- 2
- 2
当前栈顶进栈后的 SP和 SS的值
SP=000AH SS=1050H进栈前 SP和 SS的值SP=000EH SS=1050H
(变化)
(AX)
(BX)
8086通过赋值 SS和 SP建栈 进栈操作:先 SP减 2,再内容进栈。
高低燕山大学电气工程学院自动化教研室第 3章 8086指令系统出栈操作:先栈顶内容出栈,再修改 SP,
使 SP加 2。(字操作)
出栈 POP CX
POP DS
SP= 0EH
12H
34HSP= 0CH
5CH
F8HSP= 0AH
10500H
(不变)
1050FH
SS = 1050H
- 2
- 2 当前栈顶出栈前的 SP和 SS的值
SP=000AH SS=1050H
(变化)
SP= 0EH
CX=5CF8H
DS=1234H
SS=1050H
出栈后 SP和 SS的值
SP=000EH SS=1050H
SP=0AH
SP=0CH
+2
+2
F8H
5CH
34H
12H
1050FH
高低燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(3)交换指令
r [ m em ]
AX
( AL )
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
XCHG OPR1,OPR2
功能,将两个操作数 OPR1和 OPR2( 字节或字)互换。
如,XCHG AL,CL
– XCHG SI,DI
– XCHG BX,[BP+DI]
注意,
– 段寄存器不能作为交换指令的操作数
– 两个操作数中,必须有一个是寄存器操作数,
而不允许两个都是存储器操作数
– 交换指令不影响标志位
8 位数据 8 位数据
XC H
G
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.4.1.2 累加器专用传送指令
1、输入输出指令
2、换码指令
r [ me m ]
AX
( AL )
in
out in
out
XLAT
燕山大学电气工程学院自动化教研室第 3章 8086指令系统输入输出指令只能通过累加器 AL或 AX来传送数据。
输入输出指令的字或字节传送操作的选用,取决于外设端口的宽度。
直接寻址的输入输出指令(端口用立即数表示),寻址外设的端口的范围为 00---FFH; 间接寻址的输入输出指令(端口用寄存器表示),
寻址的范围为 0000--FFFFH。
输入输出指令不影响标志位。
3、输入输出指令小结燕山大学电气工程学院自动化教研室第 3章 8086指令系统(2)换码指令
格式,XLAT
功能,使累加器 AL中的值变换为内存表格中的某个对应值。
用途,常用来把一种代码转换为另一种代码。
注意,该指令不影响标志位。 P77 例子燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.1.3 地址目的传送指令
r
ES
LEA
src
L
DS
LDS
LES
LDS
LES
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 1)有效地址传送指令 LEA
格式,LEA REG,SRC
功能,把源操作数的有效地址 EA送到目的操作数中。
注意,
– 源操作数必须是存储器操作数,而目的操作数必须是
16位通用寄存器。
– 不影响标志位
例子,LEA BX,[BX+DI+2000H]
– 指令执行前,BX=4000H,DI=0100H
– 指令执行后,BX=4000+0100+2000H=6100H
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 2)有效地址传送指令 LDS
格式,LDS REG,SRC
功能,从源操作数所指定的存储器单元中取出 4个字节的变量地址指针,把前两个字节(变量的偏移地址)传送到目标操作数,后两个字节(变量的段基址)传送到 DS段寄存器中。
注意,
– 变量的 16位地址偏移量必须传送至一个 16位的通用寄存器,典型为 SI。。
– 不影响标志位
例子,LDS SI,[1000H]
– 指令执行前,DS=6000H,( 61000H) =0600H,
( 61002H) =2000H
– 指令执行后,SI=0600H,DS=2000H
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 3)有效地址传送指令 LES
格式,LES REG,SRC
功能,从源操作数所指定的存储器单元中取出 4个字节的变量地址指针,把前两个字节(变量的偏移地址)传送到目标操作数,后两个字节(变量的段基址)传送到 ES段寄存器中。
注意,
– 变量的 16位地址偏移量必须传送至一个 16位的通用寄存器,
典型为 DI。。
– 不影响标志位
– 不要与 LDS混淆。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.1.4 标志位传送指令
1、标志位送 AH指令 LAHF
2,AH内容送标志寄存器指令 SAHF
3,标志位压入堆栈指令 PUSHF
4,标志位弹出到标志寄存器 FR指令 POPF
AH [ m em ]
LA H F
ps w L
S A HF
P U S H F
P O P F
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 1)标志位送 AH指令 LAHF
格式,LAHF
功能,将标志寄存器的低字节内容传送至 AH寄存器中。即将标志位 SF,ZF,AF,PF和 CF传送至 AH寄存器的相应位。
不影响这些标志位 。
P78 图 3- 16
( 2) AH内容送 FR指令 SAHF
格式,SAHF
功能,将 AH寄存器中的相应位传送至标志寄存器的 SF,ZF,AF,PF和 CF位。
不影响 OF,DF,IF和 TF等状态 。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 3)标志位压入堆栈指令 PUSHF
格式,PUSHF
功能,将整个标志寄存器 FR的 9个标志位推入堆栈保存,同时修改堆栈指针,即 SP=SP-2。
不影响标志位
( 4)标志位弹出到 FR指令 POPF
格式,POPF
功能,将现行堆栈栈顶的字数据送入标志寄存器 FR,
同时修改堆栈指针,即 SP=SP+2。
影响标志位 。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.2 算术运算指令
1、加法指令
2、减法指令
3、乘法指令
4、除法指令
5、十进制调整指令
除数据宽度变换指令外,算术运算指令影响标志寄存器 EFLAGS中的状态标志位。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.2.1 加法指令
[ mem ]
r
Im
AX
( AL )
INC DE C NEG
I
N
C
D
E
C
N
E
G
ADD
ADC
SUB
SBB
A
D
D
A
D
C
S
U
B
S
B
B
A D D A D C S U B S B B
A
D
D
A
D
C
S
U
B
S
B
B
ADD
ADC
SUB
SBB
ADD
ADC
SUB
SBB
ADD
ADC
SUB
SBB
INC AAA DAA
DEC AAS DAS
燕山大学电气工程学院自动化教研室第 3章 8086指令系统( 1)不带进位的加法指令
格式,ADD DEST,SRC
功能,将源操作数 SRC与目的操作数 DEST相加,并将结果送回到目的操作数。
注意,
– 目的操作数不能为立即数。
– 不允许两个操作数均为存储器操作数。
– 指令结果影响标志位 C,O,P,S,Z和 A。
– O位可用来表示带符号数的溢出;
– C位则可用来表示无符号数的溢出。
例,
– ADD AL,66H
– ADD [BX+6000H],AX
燕山大学电气工程学院自动化教研室第 3章 8086指令系统( 2)带进位的加法指令
格式,ADDC DEST,SRC
功能,将源操作数 SRC与目的操作数 DEST和进位标志 CF
相加,并将结果送回到目的操作数。
注意,
– 目的操作数不能为立即数。
– 不允许两个操作数均为存储器操作数。
– 指令结果影响标志位 C,O,P,S,Z和 A。
– O位可用来表示带符号数的溢出;
– C位则可用来表示无符号数的溢出。
例,
– ADDC AL,66H
– ADDC [BX+6000H],AX
燕山大学电气工程学院自动化教研室第 3章 8086指令系统( 3) 加 1指令
格式,INC DEST
功能,将目的操作数加 1后送回目的操作数
注意,
– 目的操作数为无符号数
– 段寄存器不能进行加 1操作
– 本指令影响标志位 OF,PF,SF,ZF和 AF,但不影响 CF
例,
– INC BL
– INC CX
– INC BYTE PTR[BX+SI]
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(4)加法的 ASCII码调整指令
格式,AAA
功能,将 AL中的两个非组合的 BCD相加的结果,调整为正确的非组合的 BCD,并把调整后的结果放在 AL中。
调整方法,P82
例,AX=06H,BX=07H
ADD AX,BX
– AAA AX=0103H
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(5)BCD码的加法十进制调整指令
格式,DAA
功能,将 AL中的两个组合的 BCD表示的十进制数相加的结果,调整为正确的 BCD码十进制数,并把调整后的结果放在 AL中。
调整方法,P82
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.4.2.2 减法指令燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 1)不带借位的减法指令
格式,SUB DEST,SRC
功能,将目的操作数减去源操作数,并将结果送回目的操作数。
注意点与 ADD相同 。
例,
– SUB AL,55H
– SUB BX,4000H
– SUB WORD PTR[BX+15H],6800H
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 2)带借位的减法指令
格式,SBB DEST,SRC
功能,将目的操作数减去源操作数和标志 CF的现行值,并将结果送回目的操作数。
注意点与 ADDC相同 。
例,
– SBB AL,55H
– SBB BX,4000H
– SBB WORD PTR[BX+15H],6800H
燕山大学电气工程学院自动化教研室第 3章 8086指令系统( 3) 减 1指令
格式,DEC DEST
功能,将目的操作数减去 1后,并将结果送回目的操作数。
注意点与 INC相同 。
例,
– DEC CL
– DEC AX
– DEC BYTE PTR[BX]
燕山大学电气工程学院自动化教研室第 3章 8086指令系统( 4) 求补指令
格式,NEG DEST
功能,将目的操作数求补(即用 0减去目的操作数),并将结果送回目的操作数。
注意,
– 目的操作数可以是寄存器或存储器。
– 在字节操作时,对 -128( 80H) 求补,或在字操作时,
对 -32768求补,则目的操作数不变,但 OF=1
– 指令执行结果影响标志 AF,OF,PF,SF,ZF和 CF。
仅当目的操作数为 0时,CF=0; 否则 CF=1
燕山大学电气工程学院自动化教研室第 3章 8086指令系统( 5)比较指令
êy?Y?à Dí?×?μ CF ZF SF OF
d e s t =s r c 0 1 0 0
d e s t <s r c - 0 1 0
′? ·? 1? 2? ×÷ êy - 0 0 1
d e s t >s r c - 0 0 0
- 0 1 1
d e s t =s r c 0 1 0 0
T ·? 1? êy d e s t <s r c 1 0 - -
d e s t >s r c 0 0 - -
燕山大学电气工程学院自动化教研室第 3章 8086指令系统比较指令格式,CMP DEST,SRC
功能,将目的操作数减去源操作数,结果影响标志位,但不将结果送回目的操作数。
1)判断相等,Z
2)判断无符号数大小,C
3)判断有符号数大小,O S
燕山大学电气工程学院自动化教研室第 3章 8086指令系统BCD编码表十进制数 BCD码 十进制数 BCD码
0 0000 10 0001 0000
1 0001 11 0001 0001
2 0010 12 0001 0010
3 0011 13 0001 0011
4 0100 14 0001 0100
5 0101 15 0001 0101
6 0110 16 0001 0110
7 0111 17 0001 0111
8 1000 20 0010 0000
9 1001 21 0010 0001
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(6)减法的 ASCII码调整指令
格式,AAS
功能,将 AL中的两个非组合的 BCD相减的结果,调整为正确的非组合的 BCD,并把调整后的结果放在 AL中。
调整方法,P87
注意,影响标志位 AF,CF。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(7)BCD码的减法的十进制调整指令
格式,DAS
功能,将 AL中的两个组合的 BCD表示的十进制数相减的结果,调整为正确的 BCD码十进制数,并把调整后的结果放在 AL中。
调整方法,P88
注意,影响标志位 AF,CF,PF,SF和 ZF,
而对 OF无意义。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.4.2.3 乘法指令 [ me m ]
AX
( AL )
MUL IMUL
DIV IDIV
r
DX
MUL IMUL
DIV IDIV
CW D
AAM A DD C BW
燕山大学电气工程学院自动化教研室第 3章 8086指令系统(1) 无符号的乘法指令
格式,MUL SRC
功能,
– 字节相乘:将 AL的内容与指令的源操作数相乘,
乘积在 AX中; AH存放高字节,AL存放低字节 ;
– 字相乘:将 AX的内容与指令的源操作数相乘,
乘积在 DXAX中; DX存放高字,AX存放低字 ;
注意,源操作数可以是寄存器或存储器操作数。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
格式,IMUL SRC
功能,
– 字节相乘:将 AL的内容与指令的源操作数相乘,
乘积在 AX中; AH存放高字节,AL存放低字节 ;
– 字相乘:将 AX的内容与指令的源操作数相乘,乘积在 DXAX中; DX存放高字,AX存放低字;
注意,源操作数可以是寄存器或存储器操作数。
(2) 带符号的乘法指令燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(3) 乘法的 ASCII码调整指令
格式,AAM
功能,将 AL中的两个非组合的十进制相乘的积进行调整,在 AX中得到正确的非组合的十进制数。
调整方法,P89将 AL的结果除以 10,商放在
AH中,余数放在 AL中。
注意,
– 影响标志位 PF,SF和 ZF。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.2.4 除法指令 _DIV
(1) 无符号数的除法指令
格式,DIV SRC
功能,
– 字节相除,AX—被除数,源操作数 SRC为 8
位除数;结果,AL—8位商,AH—8位余数
– 字相除,32位除数在 DX和 AX中,高位字在
DX,低位字在 AX中,16位 SRC为除数;结果:字商 AX中,字余数在 DX中。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
格式,IDIV SRC
功能,
– 同 DIV SRC
注意,
– 操作数必须为带符号数,商和余数为带符号数,
且余数的符号和被除数符号相同。
(2) 带符号数的除法指令燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(3)除法的 ASCII码调整指令
格式,AAD
功能,将 AX中的两个非组合的十进制进行调整,以使除法运算后,得到正确的非组合的十进制数商。
调整方法,将 AH的结果乘以 10,再与 AL相加,结果存于 AL中,同时使 AH=0。
注意,
– 影响标志位 PF,SF和 ZF。
– 必须放在除法指令之前进行。
例,P90
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.4.3逻辑运算指令和移位指令
逻辑运算和移位指令除 NOT外,都影响标志寄存器的状态标志位,且逻辑运算后进位标志 CF一定为 0。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.4.3.1 单操作数运算
NOT
r
[ mem ]
Im ( 1 )
N
O
T
S
A
L
S
H
L
S
A
R
S
H
R
R
O
L
R
O
R
R
C
L
R
C
R
S
A
L
S
H
L
S
A
R
S
H
R
R
O
L
R
O
R
R
C
L
R
C
R
S
A
L
S
H
L
S
A
R
S
H
R
R
O
L
R
O
R
R
C
L
R
C
R
SAL SHL
SAR SHR
ROL RO R
RCL RCR
CL
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 1)逻辑非指令
格式,NOT DEST
功能,对目的操作数按位求反,且把结果关回目的操作数
注意,不影响标志位。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统(2)非循环移位指令
共性,
– 如果只移 1位,可直接用立即数表示;如果要移动若干位,则必须用 CL寄存器预先指定所移的位数。
– 移位指令根据移位结果影响标志位 CF,OF、
PF,SF和 ZF。
– CF总是目的操作数最后被移出的那一位的值。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
CF 0
0
0
最低位最低位最低位最低位最高位最高位最高位最高位
CF
CF
CF
SAL
SHL
SAR
SHR
移位指令操作过程燕山大学电气工程学院自动化教研室第 3章 8086指令系统算术右移指令
格式,
– SAR DEST,COUNT
注意,符号位保持不变。
用途,算术右移一位相当于除 2,负数除 2绝对值减小,
其补码变大。(如,-4的补码为 FCH,-2的补码为 FEH)
格式,
–SHR DEST,COUNT
注意,最高位补 0。
用途,适用于无符号的乘 2或除 2运算。
逻辑右移指令燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 3)循环移位指令
共性,
– 可对 8位或 16位寄存器数或存储器操作数进行指定循环移位
– 可以用立即数 1指定只循环一次
– 也可以由 CL的值规定循环移位的次数。
– 只影响标志位 CF和 OF。 CF总是最后 1次移入的值燕山大学电气工程学院自动化教研室第 3章 8086指令系统不带进位的循环左移不带进位的循环右移带进位的循环左移带进位的循环右移
CF
CF
CF
CF
ROL
ROR
RCL
RCR
循环移位指令图示燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.4.3.2 双操作数运算
[ me m ]
r
Im
AX
( AL )
AN D ( TEST )
OR X OR
AN D
( TEST )
OR
XOR
AN D
( TEST )
OR
XOR
AN D
( TEST )
OR
XOR
A
N
D
(
T
E
S
T
)
O
R
X
O
R
A
N
D
(
T
E
S
T
)
O
R
X
O
R
AN D
( TEST )
OR
XOR
燕山大学电气工程学院自动化教研室第 3章 8086指令系统逻辑与、或、异或和测试指令
相同点,
–目的操作数不能为立即数。
–两个操作数不能同时为存储器操作数。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
格式,AND DEST,SRC
注意,影响标志位 SF,ZF和 PF。
用途,可以使目的操作数的某些位被屏蔽 (P96)。
逻辑与指令测试指令
格式,TEST DEST,SRC
功能,与 AND指令基本相同,唯一的区别是结果不回送目的操作数,只根据结果影响标志位。
注意,影响标志位 SF,ZF和 PF。
用途,可用来在不改变操作数的情况下测试某一操作数某一位或某几位的状态 (P96)。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统逻辑或指令
格式,OR DEST,SRC
注意,影响标志位 SF,ZF和 PF。
用途,( P97) 可以使目的操作数的某些位置 1。
逻辑异或指令
格式,XOR DEST,SRC
注意,影响标志位 SF,ZF和 PF。
用途,( P98)
– 常用来对寄存器操作数清 0。
– 可用来使某些位变反,
– 可用来测试某一操作数是否与另一操作数相等。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.4 串操作指令五条基本串操作指令
MOVSB / MOVSW ; 传送字节 /字 DS,SI ES:
DI
CMPSB / CMPSW ; 比较指令 ES,DI 与 DS,SI 比较
(相减)
SCASB / SCASW ; 扫描指令 ES,DI 与 AL / AX 比较
LODSB / LODSW ; 装入(读)指令 DS,SI AL /
AX
STOSB / STOSW ; 存入(写)指令 AL / AX ES:
DI
燕山大学电气工程学院自动化教研室第 3章 8086指令系统字串指令执行流程
1、对 DS,SI,ES,DI 赋值( DS和 ES可隐含)
这类指令都是用 SI对源操作数进行间接寻址并在 DS段,用 DI对目的操作数进行间接寻址并在 ES段。
2、将字串长度送 CX( 计数值)
3、设置方向标志 DF的值:若 SI,DI是起址,使
DF = 0( CLD),地址加 1或加 2修改,若 SI、
DI是末地址,使 DF = 1 ( STD),地址减 1或减 2修改。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
4、加重复前缀时 (P133,此时用作重复计数器的一定是( E) CX),指令执行的顺序是:
( 1)先判断 CX = 0? CX = 0 退出,CX = 0,
CX - 1
( 2) 执行字串指令
( 3)修改 SI,DI 的内容
( 4)回到( 1)
5,注意:对串装入 LODS,串存储 STOS,串扫描
SCAS指令,另一个隐含的操作数一定是 AL/AXE/AX;
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3、过程调用和返回指令
调用指令 CALL 目标地址(标号)
返回指令 RET
×
×
× ×
×
×
CALL A1
RET
返回地址过程入口 A1
….
返回地址是 CALL指令的下一条指令,CALL是三字节指令可段内直接、间接段间直接、间接。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
LOOP OPRD,CX = 0 循环
1、目的地址范围 -128 ~ +127
2、先将循环次数送 CX中
3、指令执行时,先将 CX减 1,直到 CX = 0 循环结束。 ZF
不受 CX影 响。
4、循环控制指令燕山大学电气工程学院自动化教研室第 3章 8086指令系统
P105 JMP
P107 INT n
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.6 处理器控制指令
(一)、对标志操作的指令
1,CLC ; 使 CF = 0
STC ; 使 CF = 1
CMC ; 使 CF = CF
2,CLD ; 使 DF = 0
STD ; 使 DF = 1
3,CLI ; 使 IF = 0
STI ; 使 IF = 1
( 二)外部同部指令
1,HLT ; 暂停
2,NOP ; 空操作
3,WAIT; 等待
4,ESC ; 交权
5,LOOK ; 封锁
C PU 工作模式
C PU 寄存器体系指令系统存储管理机制中断与外设依赖于充分发挥汇编语言依赖硬件的特性燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.1 基本数据类型燕山大学电气工程学院自动化教研室第 3章 8086指令系统
80X86多字节数据的存放原则是低位字节在低端地址,高位字节在高端地址,而 低位字节的地址是多字节数据的访问地址。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.1.2 数字数据类型
1、整数
( 1)无符号整数无符号数的最高位不是符号位而是数值的一部分
( 2)符号整数把二进制数的最高一位定义为符号位,符号位为 0表示正数,符号位为 1表示负数。所有操作都假定用 2的补码表示。 正数的补码与原码相同
,负数补码则先对该数的原码除符号外各位取反,然后末位加1.
燕山大学电气工程学院自动化教研室第 3章 8086指令系统符号整数编码
0
1
2
3
4
5
6
7
0 00
0 01
0 10
0 11
1 00
1 01
1 10
1 11
二进制十进制燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.2 IA-32指令格式
操作码,规定计算机所要执行的操作 ;
操作数,指出在指令执行过程中所需要的数或操作数所在的地址 。
格式,
指令语句,[标号,]助记符 [操作数 ] [;注释 ]
伪指令语句,[名字 ]定义符 [操作数 ] [;注释 ]
例,LOOP,ADD AX,0001H; AX内容加 1
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.3 寻址方式
3.3.1立即寻址
操作数所在的地址直接包含在指令中。
指令的操作数部分就是操作数本身。
多媒体演示:
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.3.2 寄存器寻址
寄存器中保存的是操作数的内容 。
多媒体演示:
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.3.3 存储器操作数寻址方式
1规定段寄存器
y 3£?′?′′?′ ò? μ×?·
è· à? CS?T IP
o 2? ×÷ SS?T SP
′? 2? ×÷?′ μ×?· DS CS?¢ SS?¢ ES SI
′? 2? ×÷ μ? μ×?· ES?T DI
ó? B Pó?°?· SS CS?¢ SS?¢ ES óD D§μ×?· EA
òo °? êy?Y ′? è? DS CS?¢ SS?¢ ES óD D§μ×?· EA
2? ×÷?à Dí
où?·
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
2 规定偏移量
任何内存实际地址 ( PA) 都由两部分组成:
PA= 段基址+段内偏移地址 ( 此单元与段基址的距离 )
段内的偏移地址又称为有效地址
( EA),
EA= 基地址寄存器内容+索引×比例系数+位移量燕山大学电气工程学院自动化教研室第 3章 8086指令系统有效地址元素 16位寻址 32位寻址基址寄存器 BX BP 任何 32位通用寄存器
(索引)变址寄存器 SI DI
除 ESP外的任何 32位通用寄存器比例系数 无(或 1) 1,2,4,8
位移量 0,8,16位 0,8,16,32位
16位寻址和 32位寻址四成员定义燕山大学电气工程学院自动化教研室第 3章 8086指令系统基址变址加位移量基址加位移量寄存器间接寻址直接寻址 图 3 - 10
图 3 - 11
图 3 - 12
图 3 - 13
MOV AX,2000 H
MOV AX,[ BP ]
COUNT EQU 3000 H
MOV AX,COUNT [ SI ]
COUNT EQU 250 H
MOV AX,COUNT [ BX ][ SI ]
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.3.4 I/O端口寻址
寻址个数,65536( 2 )
8位 I/O端口(也可以定义 16位或 32位)
用立即数寻址只能用 8位立即数,可寻址 I/O端口前 256个;
用 DX寄存器寻址可寻址全部 I/O端口。
16
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4 8086指令系统
8086共 133条指令,从功能上可分为以下类:
1、数据传送指令
2、算术运算指令
3、逻辑运算指令
4、串操作指令
5、控制转移指令
6、处理器控制指令指令中的约定表示符号( P71)
燕山大学电气工程学院自动化教研室第 3章 8086指令系统指令系统学习方法概述
英文还原法操作码助记符是该指令功能的英文缩写,将缩写还原成英语原文,再对照汉语有助于理解其助记符含义,从而加强记忆 。 例如:
增量 INC- Incremect 减量 DNC- Decrement
交换 XCHG- Exchange 加法 ADD- Addition
乘法 MUL- Multiplication 除法 DIV- Division
传送 mov- move
燕山大学电气工程学院自动化教研室第 3章 8086指令系统图示记忆法
图示记忆法是把操作功能相同或相似、但其操作数不同的指令,用图形和箭头将目的、
源操作数的关系表示出来的一种记忆方法。
规则:通常箭头指向为数据传送方向指令学习注意事项
操作数类型
寻址方式
对标志寄存器影响燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.1 数据传送指令
1、通用数据传送指令
2、累加器专用传送指令
3、目标地址传送指令
4、标志位传送指令
特点:寻址方式最丰富,不影响标志位。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 1)通用数据传送指令
[ mem ]
r
Im
CS,ES
DS,SS
AX
( AL )
除
CS
,IP
除
CS
燕山大学电气工程学院自动化教研室第 3章 8086指令系统通用传送指令
格式,MOV DEST,SRC
功能,把源操作数 SRC中的字节或字传送到目的操作数 DEST中。
MOV 指令不影响标志位燕山大学电气工程学院自动化教研室第 3章 8086指令系统
1、不能在两个存储单元之间传送。
MOV [1000H],[2000H]
2,立即数不能送段寄存器。
MOV DS,300H
3,段寄存器之间不能传送。
MOV DS,ES
4,CS不能做目的但可做源操作数。 MOV CS,AX
MOV AX,CS
5,操作数类型要匹配,字对字,字节对字节传送
MOV AX,BL
6,MOV指令不影响标志寄存器的值。
注意的问题:
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 2) 堆栈操作指令 [ me m ]
r
cs,ds,
es,ss
PUSH
POP
PUSH
POP
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
8086/8088的堆栈建栈 MOV AX,1050H
MOV SS,AX
MOV SP,000 EH
进栈 PUSH AX ( 设 AX=1234H)
PUSH BX ( 设 BX=5CF8H)
1050FH
10500H
初始栈顶
(栈底)SP= 0EH
SS= 1050H
堆栈起地址栈的范围
SP= 0EH
12H
34HSP= 0CH
5CH
F8HSP= 0AH
10500H
(不变)
1050FH
SS = 1050H
- 2
- 2
当前栈顶进栈后的 SP和 SS的值
SP=000AH SS=1050H进栈前 SP和 SS的值SP=000EH SS=1050H
(变化)
(AX)
(BX)
8086通过赋值 SS和 SP建栈 进栈操作:先 SP减 2,再内容进栈。
高低燕山大学电气工程学院自动化教研室第 3章 8086指令系统出栈操作:先栈顶内容出栈,再修改 SP,
使 SP加 2。(字操作)
出栈 POP CX
POP DS
SP= 0EH
12H
34HSP= 0CH
5CH
F8HSP= 0AH
10500H
(不变)
1050FH
SS = 1050H
- 2
- 2 当前栈顶出栈前的 SP和 SS的值
SP=000AH SS=1050H
(变化)
SP= 0EH
CX=5CF8H
DS=1234H
SS=1050H
出栈后 SP和 SS的值
SP=000EH SS=1050H
SP=0AH
SP=0CH
+2
+2
F8H
5CH
34H
12H
1050FH
高低燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(3)交换指令
r [ m em ]
AX
( AL )
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
XCHG OPR1,OPR2
功能,将两个操作数 OPR1和 OPR2( 字节或字)互换。
如,XCHG AL,CL
– XCHG SI,DI
– XCHG BX,[BP+DI]
注意,
– 段寄存器不能作为交换指令的操作数
– 两个操作数中,必须有一个是寄存器操作数,
而不允许两个都是存储器操作数
– 交换指令不影响标志位
8 位数据 8 位数据
XC H
G
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.4.1.2 累加器专用传送指令
1、输入输出指令
2、换码指令
r [ me m ]
AX
( AL )
in
out in
out
XLAT
燕山大学电气工程学院自动化教研室第 3章 8086指令系统输入输出指令只能通过累加器 AL或 AX来传送数据。
输入输出指令的字或字节传送操作的选用,取决于外设端口的宽度。
直接寻址的输入输出指令(端口用立即数表示),寻址外设的端口的范围为 00---FFH; 间接寻址的输入输出指令(端口用寄存器表示),
寻址的范围为 0000--FFFFH。
输入输出指令不影响标志位。
3、输入输出指令小结燕山大学电气工程学院自动化教研室第 3章 8086指令系统(2)换码指令
格式,XLAT
功能,使累加器 AL中的值变换为内存表格中的某个对应值。
用途,常用来把一种代码转换为另一种代码。
注意,该指令不影响标志位。 P77 例子燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.1.3 地址目的传送指令
r
ES
LEA
src
L
DS
LDS
LES
LDS
LES
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 1)有效地址传送指令 LEA
格式,LEA REG,SRC
功能,把源操作数的有效地址 EA送到目的操作数中。
注意,
– 源操作数必须是存储器操作数,而目的操作数必须是
16位通用寄存器。
– 不影响标志位
例子,LEA BX,[BX+DI+2000H]
– 指令执行前,BX=4000H,DI=0100H
– 指令执行后,BX=4000+0100+2000H=6100H
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 2)有效地址传送指令 LDS
格式,LDS REG,SRC
功能,从源操作数所指定的存储器单元中取出 4个字节的变量地址指针,把前两个字节(变量的偏移地址)传送到目标操作数,后两个字节(变量的段基址)传送到 DS段寄存器中。
注意,
– 变量的 16位地址偏移量必须传送至一个 16位的通用寄存器,典型为 SI。。
– 不影响标志位
例子,LDS SI,[1000H]
– 指令执行前,DS=6000H,( 61000H) =0600H,
( 61002H) =2000H
– 指令执行后,SI=0600H,DS=2000H
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 3)有效地址传送指令 LES
格式,LES REG,SRC
功能,从源操作数所指定的存储器单元中取出 4个字节的变量地址指针,把前两个字节(变量的偏移地址)传送到目标操作数,后两个字节(变量的段基址)传送到 ES段寄存器中。
注意,
– 变量的 16位地址偏移量必须传送至一个 16位的通用寄存器,
典型为 DI。。
– 不影响标志位
– 不要与 LDS混淆。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.1.4 标志位传送指令
1、标志位送 AH指令 LAHF
2,AH内容送标志寄存器指令 SAHF
3,标志位压入堆栈指令 PUSHF
4,标志位弹出到标志寄存器 FR指令 POPF
AH [ m em ]
LA H F
ps w L
S A HF
P U S H F
P O P F
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 1)标志位送 AH指令 LAHF
格式,LAHF
功能,将标志寄存器的低字节内容传送至 AH寄存器中。即将标志位 SF,ZF,AF,PF和 CF传送至 AH寄存器的相应位。
不影响这些标志位 。
P78 图 3- 16
( 2) AH内容送 FR指令 SAHF
格式,SAHF
功能,将 AH寄存器中的相应位传送至标志寄存器的 SF,ZF,AF,PF和 CF位。
不影响 OF,DF,IF和 TF等状态 。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 3)标志位压入堆栈指令 PUSHF
格式,PUSHF
功能,将整个标志寄存器 FR的 9个标志位推入堆栈保存,同时修改堆栈指针,即 SP=SP-2。
不影响标志位
( 4)标志位弹出到 FR指令 POPF
格式,POPF
功能,将现行堆栈栈顶的字数据送入标志寄存器 FR,
同时修改堆栈指针,即 SP=SP+2。
影响标志位 。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.2 算术运算指令
1、加法指令
2、减法指令
3、乘法指令
4、除法指令
5、十进制调整指令
除数据宽度变换指令外,算术运算指令影响标志寄存器 EFLAGS中的状态标志位。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.2.1 加法指令
[ mem ]
r
Im
AX
( AL )
INC DE C NEG
I
N
C
D
E
C
N
E
G
ADD
ADC
SUB
SBB
A
D
D
A
D
C
S
U
B
S
B
B
A D D A D C S U B S B B
A
D
D
A
D
C
S
U
B
S
B
B
ADD
ADC
SUB
SBB
ADD
ADC
SUB
SBB
ADD
ADC
SUB
SBB
INC AAA DAA
DEC AAS DAS
燕山大学电气工程学院自动化教研室第 3章 8086指令系统( 1)不带进位的加法指令
格式,ADD DEST,SRC
功能,将源操作数 SRC与目的操作数 DEST相加,并将结果送回到目的操作数。
注意,
– 目的操作数不能为立即数。
– 不允许两个操作数均为存储器操作数。
– 指令结果影响标志位 C,O,P,S,Z和 A。
– O位可用来表示带符号数的溢出;
– C位则可用来表示无符号数的溢出。
例,
– ADD AL,66H
– ADD [BX+6000H],AX
燕山大学电气工程学院自动化教研室第 3章 8086指令系统( 2)带进位的加法指令
格式,ADDC DEST,SRC
功能,将源操作数 SRC与目的操作数 DEST和进位标志 CF
相加,并将结果送回到目的操作数。
注意,
– 目的操作数不能为立即数。
– 不允许两个操作数均为存储器操作数。
– 指令结果影响标志位 C,O,P,S,Z和 A。
– O位可用来表示带符号数的溢出;
– C位则可用来表示无符号数的溢出。
例,
– ADDC AL,66H
– ADDC [BX+6000H],AX
燕山大学电气工程学院自动化教研室第 3章 8086指令系统( 3) 加 1指令
格式,INC DEST
功能,将目的操作数加 1后送回目的操作数
注意,
– 目的操作数为无符号数
– 段寄存器不能进行加 1操作
– 本指令影响标志位 OF,PF,SF,ZF和 AF,但不影响 CF
例,
– INC BL
– INC CX
– INC BYTE PTR[BX+SI]
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(4)加法的 ASCII码调整指令
格式,AAA
功能,将 AL中的两个非组合的 BCD相加的结果,调整为正确的非组合的 BCD,并把调整后的结果放在 AL中。
调整方法,P82
例,AX=06H,BX=07H
ADD AX,BX
– AAA AX=0103H
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(5)BCD码的加法十进制调整指令
格式,DAA
功能,将 AL中的两个组合的 BCD表示的十进制数相加的结果,调整为正确的 BCD码十进制数,并把调整后的结果放在 AL中。
调整方法,P82
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.4.2.2 减法指令燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 1)不带借位的减法指令
格式,SUB DEST,SRC
功能,将目的操作数减去源操作数,并将结果送回目的操作数。
注意点与 ADD相同 。
例,
– SUB AL,55H
– SUB BX,4000H
– SUB WORD PTR[BX+15H],6800H
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 2)带借位的减法指令
格式,SBB DEST,SRC
功能,将目的操作数减去源操作数和标志 CF的现行值,并将结果送回目的操作数。
注意点与 ADDC相同 。
例,
– SBB AL,55H
– SBB BX,4000H
– SBB WORD PTR[BX+15H],6800H
燕山大学电气工程学院自动化教研室第 3章 8086指令系统( 3) 减 1指令
格式,DEC DEST
功能,将目的操作数减去 1后,并将结果送回目的操作数。
注意点与 INC相同 。
例,
– DEC CL
– DEC AX
– DEC BYTE PTR[BX]
燕山大学电气工程学院自动化教研室第 3章 8086指令系统( 4) 求补指令
格式,NEG DEST
功能,将目的操作数求补(即用 0减去目的操作数),并将结果送回目的操作数。
注意,
– 目的操作数可以是寄存器或存储器。
– 在字节操作时,对 -128( 80H) 求补,或在字操作时,
对 -32768求补,则目的操作数不变,但 OF=1
– 指令执行结果影响标志 AF,OF,PF,SF,ZF和 CF。
仅当目的操作数为 0时,CF=0; 否则 CF=1
燕山大学电气工程学院自动化教研室第 3章 8086指令系统( 5)比较指令
êy?Y?à Dí?×?μ CF ZF SF OF
d e s t =s r c 0 1 0 0
d e s t <s r c - 0 1 0
′? ·? 1? 2? ×÷ êy - 0 0 1
d e s t >s r c - 0 0 0
- 0 1 1
d e s t =s r c 0 1 0 0
T ·? 1? êy d e s t <s r c 1 0 - -
d e s t >s r c 0 0 - -
燕山大学电气工程学院自动化教研室第 3章 8086指令系统比较指令格式,CMP DEST,SRC
功能,将目的操作数减去源操作数,结果影响标志位,但不将结果送回目的操作数。
1)判断相等,Z
2)判断无符号数大小,C
3)判断有符号数大小,O S
燕山大学电气工程学院自动化教研室第 3章 8086指令系统BCD编码表十进制数 BCD码 十进制数 BCD码
0 0000 10 0001 0000
1 0001 11 0001 0001
2 0010 12 0001 0010
3 0011 13 0001 0011
4 0100 14 0001 0100
5 0101 15 0001 0101
6 0110 16 0001 0110
7 0111 17 0001 0111
8 1000 20 0010 0000
9 1001 21 0010 0001
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(6)减法的 ASCII码调整指令
格式,AAS
功能,将 AL中的两个非组合的 BCD相减的结果,调整为正确的非组合的 BCD,并把调整后的结果放在 AL中。
调整方法,P87
注意,影响标志位 AF,CF。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(7)BCD码的减法的十进制调整指令
格式,DAS
功能,将 AL中的两个组合的 BCD表示的十进制数相减的结果,调整为正确的 BCD码十进制数,并把调整后的结果放在 AL中。
调整方法,P88
注意,影响标志位 AF,CF,PF,SF和 ZF,
而对 OF无意义。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.4.2.3 乘法指令 [ me m ]
AX
( AL )
MUL IMUL
DIV IDIV
r
DX
MUL IMUL
DIV IDIV
CW D
AAM A DD C BW
燕山大学电气工程学院自动化教研室第 3章 8086指令系统(1) 无符号的乘法指令
格式,MUL SRC
功能,
– 字节相乘:将 AL的内容与指令的源操作数相乘,
乘积在 AX中; AH存放高字节,AL存放低字节 ;
– 字相乘:将 AX的内容与指令的源操作数相乘,
乘积在 DXAX中; DX存放高字,AX存放低字 ;
注意,源操作数可以是寄存器或存储器操作数。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
格式,IMUL SRC
功能,
– 字节相乘:将 AL的内容与指令的源操作数相乘,
乘积在 AX中; AH存放高字节,AL存放低字节 ;
– 字相乘:将 AX的内容与指令的源操作数相乘,乘积在 DXAX中; DX存放高字,AX存放低字;
注意,源操作数可以是寄存器或存储器操作数。
(2) 带符号的乘法指令燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(3) 乘法的 ASCII码调整指令
格式,AAM
功能,将 AL中的两个非组合的十进制相乘的积进行调整,在 AX中得到正确的非组合的十进制数。
调整方法,P89将 AL的结果除以 10,商放在
AH中,余数放在 AL中。
注意,
– 影响标志位 PF,SF和 ZF。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.2.4 除法指令 _DIV
(1) 无符号数的除法指令
格式,DIV SRC
功能,
– 字节相除,AX—被除数,源操作数 SRC为 8
位除数;结果,AL—8位商,AH—8位余数
– 字相除,32位除数在 DX和 AX中,高位字在
DX,低位字在 AX中,16位 SRC为除数;结果:字商 AX中,字余数在 DX中。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
格式,IDIV SRC
功能,
– 同 DIV SRC
注意,
– 操作数必须为带符号数,商和余数为带符号数,
且余数的符号和被除数符号相同。
(2) 带符号数的除法指令燕山大学电气工程学院自动化教研室第 3章 8086指令系统
(3)除法的 ASCII码调整指令
格式,AAD
功能,将 AX中的两个非组合的十进制进行调整,以使除法运算后,得到正确的非组合的十进制数商。
调整方法,将 AH的结果乘以 10,再与 AL相加,结果存于 AL中,同时使 AH=0。
注意,
– 影响标志位 PF,SF和 ZF。
– 必须放在除法指令之前进行。
例,P90
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.4.3逻辑运算指令和移位指令
逻辑运算和移位指令除 NOT外,都影响标志寄存器的状态标志位,且逻辑运算后进位标志 CF一定为 0。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.4.3.1 单操作数运算
NOT
r
[ mem ]
Im ( 1 )
N
O
T
S
A
L
S
H
L
S
A
R
S
H
R
R
O
L
R
O
R
R
C
L
R
C
R
S
A
L
S
H
L
S
A
R
S
H
R
R
O
L
R
O
R
R
C
L
R
C
R
S
A
L
S
H
L
S
A
R
S
H
R
R
O
L
R
O
R
R
C
L
R
C
R
SAL SHL
SAR SHR
ROL RO R
RCL RCR
CL
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 1)逻辑非指令
格式,NOT DEST
功能,对目的操作数按位求反,且把结果关回目的操作数
注意,不影响标志位。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统(2)非循环移位指令
共性,
– 如果只移 1位,可直接用立即数表示;如果要移动若干位,则必须用 CL寄存器预先指定所移的位数。
– 移位指令根据移位结果影响标志位 CF,OF、
PF,SF和 ZF。
– CF总是目的操作数最后被移出的那一位的值。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
CF 0
0
0
最低位最低位最低位最低位最高位最高位最高位最高位
CF
CF
CF
SAL
SHL
SAR
SHR
移位指令操作过程燕山大学电气工程学院自动化教研室第 3章 8086指令系统算术右移指令
格式,
– SAR DEST,COUNT
注意,符号位保持不变。
用途,算术右移一位相当于除 2,负数除 2绝对值减小,
其补码变大。(如,-4的补码为 FCH,-2的补码为 FEH)
格式,
–SHR DEST,COUNT
注意,最高位补 0。
用途,适用于无符号的乘 2或除 2运算。
逻辑右移指令燕山大学电气工程学院自动化教研室第 3章 8086指令系统
( 3)循环移位指令
共性,
– 可对 8位或 16位寄存器数或存储器操作数进行指定循环移位
– 可以用立即数 1指定只循环一次
– 也可以由 CL的值规定循环移位的次数。
– 只影响标志位 CF和 OF。 CF总是最后 1次移入的值燕山大学电气工程学院自动化教研室第 3章 8086指令系统不带进位的循环左移不带进位的循环右移带进位的循环左移带进位的循环右移
CF
CF
CF
CF
ROL
ROR
RCL
RCR
循环移位指令图示燕山大学电气工程学院自动化教研室第 3章 8086指令系统
3.4.3.2 双操作数运算
[ me m ]
r
Im
AX
( AL )
AN D ( TEST )
OR X OR
AN D
( TEST )
OR
XOR
AN D
( TEST )
OR
XOR
AN D
( TEST )
OR
XOR
A
N
D
(
T
E
S
T
)
O
R
X
O
R
A
N
D
(
T
E
S
T
)
O
R
X
O
R
AN D
( TEST )
OR
XOR
燕山大学电气工程学院自动化教研室第 3章 8086指令系统逻辑与、或、异或和测试指令
相同点,
–目的操作数不能为立即数。
–两个操作数不能同时为存储器操作数。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
格式,AND DEST,SRC
注意,影响标志位 SF,ZF和 PF。
用途,可以使目的操作数的某些位被屏蔽 (P96)。
逻辑与指令测试指令
格式,TEST DEST,SRC
功能,与 AND指令基本相同,唯一的区别是结果不回送目的操作数,只根据结果影响标志位。
注意,影响标志位 SF,ZF和 PF。
用途,可用来在不改变操作数的情况下测试某一操作数某一位或某几位的状态 (P96)。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统逻辑或指令
格式,OR DEST,SRC
注意,影响标志位 SF,ZF和 PF。
用途,( P97) 可以使目的操作数的某些位置 1。
逻辑异或指令
格式,XOR DEST,SRC
注意,影响标志位 SF,ZF和 PF。
用途,( P98)
– 常用来对寄存器操作数清 0。
– 可用来使某些位变反,
– 可用来测试某一操作数是否与另一操作数相等。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.4 串操作指令五条基本串操作指令
MOVSB / MOVSW ; 传送字节 /字 DS,SI ES:
DI
CMPSB / CMPSW ; 比较指令 ES,DI 与 DS,SI 比较
(相减)
SCASB / SCASW ; 扫描指令 ES,DI 与 AL / AX 比较
LODSB / LODSW ; 装入(读)指令 DS,SI AL /
AX
STOSB / STOSW ; 存入(写)指令 AL / AX ES:
DI
燕山大学电气工程学院自动化教研室第 3章 8086指令系统字串指令执行流程
1、对 DS,SI,ES,DI 赋值( DS和 ES可隐含)
这类指令都是用 SI对源操作数进行间接寻址并在 DS段,用 DI对目的操作数进行间接寻址并在 ES段。
2、将字串长度送 CX( 计数值)
3、设置方向标志 DF的值:若 SI,DI是起址,使
DF = 0( CLD),地址加 1或加 2修改,若 SI、
DI是末地址,使 DF = 1 ( STD),地址减 1或减 2修改。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
4、加重复前缀时 (P133,此时用作重复计数器的一定是( E) CX),指令执行的顺序是:
( 1)先判断 CX = 0? CX = 0 退出,CX = 0,
CX - 1
( 2) 执行字串指令
( 3)修改 SI,DI 的内容
( 4)回到( 1)
5,注意:对串装入 LODS,串存储 STOS,串扫描
SCAS指令,另一个隐含的操作数一定是 AL/AXE/AX;
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3、过程调用和返回指令
调用指令 CALL 目标地址(标号)
返回指令 RET
×
×
× ×
×
×
CALL A1
RET
返回地址过程入口 A1
….
返回地址是 CALL指令的下一条指令,CALL是三字节指令可段内直接、间接段间直接、间接。
燕山大学电气工程学院自动化教研室第 3章 8086指令系统
LOOP OPRD,CX = 0 循环
1、目的地址范围 -128 ~ +127
2、先将循环次数送 CX中
3、指令执行时,先将 CX减 1,直到 CX = 0 循环结束。 ZF
不受 CX影 响。
4、循环控制指令燕山大学电气工程学院自动化教研室第 3章 8086指令系统
P105 JMP
P107 INT n
燕山大学电气工程学院自动化教研室第 3章 8086指令系统3.4.6 处理器控制指令
(一)、对标志操作的指令
1,CLC ; 使 CF = 0
STC ; 使 CF = 1
CMC ; 使 CF = CF
2,CLD ; 使 DF = 0
STD ; 使 DF = 1
3,CLI ; 使 IF = 0
STI ; 使 IF = 1
( 二)外部同部指令
1,HLT ; 暂停
2,NOP ; 空操作
3,WAIT; 等待
4,ESC ; 交权
5,LOOK ; 封锁