2017微机原理与接口技术05
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6
§3-3 算术运算指令
4.除法指令(Division)
【8086的指令系统】
⑴ DIV无符号数除法指令(Division,unsigned)
指令格式:DIV 源 指令功能:对两个无符号二进制数进行除法操作。
▲源操作数为字节:16位被除数必须放在AX中,8位除数为源操作数。
AL ← AX/源(字节)的商 AH ←AX/源(字节)的余数 若被除数只有8位,必须把它放在AL中,并将AH清0。 ▲源操作数为字:32位被除数在(DX,AX)中,16位除数作源操作数。 AX ← (DX,AX)/源(字)的商 DX ← (DX,AX)/源(字)的余数
D0 AL D0
D7
0
D0 AL=正数 D0
▲若AL中的D7=1,则将这个1扩展到AH中,使AH=FFH,即: D7 D7
AH
1 ······ 1
AL 1
AL=负数
注意:CBW指令执行后,不影响标志位。
23:30 10
§3-3 算术运算指令
指令格式:CWD
【8086的指令系统】
⑷ CWD把字转换成双字指令(Convert Word to Double Word)
;屏蔽高半字节,AL=09H ;屏蔽高半字节,BL=06H
MUL BL
;相乘, AL=36H
;调整,AX=0504H AX,3030H
如要将结果转换成ASCII码,可用指令OR
实现,使 AX=3534H。
OR
23:30
0000 0101 0000 0100
0011 0000 0011 0101 0011 0000 0011 0100
MUL BL AAM ;AL 09与06之乘积36H ;调整得AH=05H(十位), AL=04H(个位) 结果:AX=0504H,即BCD数54。
23:30
5
§3-3 算术运算指令
例
之积。
解:用以下指令实现: AND AL,0FH AND AAM BL,0FH
【8086的指令系统】
如果 AL 和 BL 中分别存放 9 和 6 的ASCII 码,求两数
指令格式:AAM 指令功能: 对AL中的两个非压缩十进制数相乘的乘积进行十进制数的调整 ,在AX中得到正确的非压缩十进制数的乘积,高位在AH中,低位在AL中 调整过程: 把AL寄存器内容除以10,商放在AH中,余数在AL中。即: AH ← AL/10所得的商 AL ← AH/10所得的余数
注意:
▲两个 ASCII码数相乘之前,先屏蔽掉每个数字的高半字节,使每个字 节包含一个非压缩十进制数(BCD数),再用MUL指令相乘,乘积放到AL
式。
例 两个无符号数7A86H和04H相除,商应为多少? 解:MOV AX,7A86H MOV BL,04H DIV BL 结果:①正确的商应为1EA1H。 ②由于BL中的除数04H为字节,被除数为字,商1EA1H大于AL中能存
放的最大无符号数FFH,产生除法错误中断。
23:30
9
§3-3 算术运算指令
指令格式:CBW
【8086的指令系统】
⑶ CBW把字节转换为字指令(Convert Byte to Word)
指令功能:把寄存器AL中字节的符号位扩充到AH的所有位。(AH被称
为AL的符号扩充)
扩展方法: ▲若AL中的D7=0,则将这个0扩展到AH中,使AH=00H,即: D7 AH
0 ······ 0
⑷ XOR异或操作指令(Exclusive OR)
指令格式:XOR 目的,源
指令功能:目的目的∨源
【8086的指令系统】
主要用于使操作数的某些位保留(和‚0”相异或),而使某些位取反(和‚1” 相异或)
⑸ TEST测试指令(Test)
指令格式:TEST 目的,源 指令功能:目的∧源
逻辑与操作,并修改标志位,但不回送结果,两个操作数都不变。 常用于在要检测某些条件是否满足,但又不希望改变原有操作数的 情况下。紧跟在这条指令后面的往往是一条条件转移指令,根据测 试结果产生分支,转向不同的处理程序。
寄存器中,然后用AAM指令进行调整。
▲标志位的影响:影响ZF、SF和PF,但AF、CF和OF无定义。 ▲8086的指令系统中,十进制乘法运算不允许采用压缩十进制数,故调 整指令仅此一条。
23:30 4
§3-3 算术运算指令
解:MOV AL,09H ;置初值
【8086的指令系统】
例 求两个非压缩十进制数09和06之乘积。 MOV BL,06H
127~+127,或-81H~+7FH);
字操作时:被除数的高16位绝对值大于除数的绝对值,则产生溢出。 (对于无符号数,允许最大商为FFFFH;对于带符号数,允许商的范围
为-32767~+32767,或-8001H~7FFFH)。
23:30 8
§3-3 算术运算指令
Байду номын сангаас
【8086的指令系统】
▲带符号数除法指令,字节操作时要求被除数为 16位,字操作时要求被 除数为32位,如果被除数不满足这个条件,不能简单地将高位置0,而应 该用符号扩展指令(Sign Extension)将被除数转换成除法指令所要求的格
23:30
商
01
03
余数
14
数据存放格式
§3-3 8086的指令系统
按功能可分为以下六类
一、数据传送指令
二、算术运算指令
三、逻辑运算和移位指令 四、串操作指令 五、转移指令 六、处理器控制指令
23:30
15
§3-3
8086的指令系统
逻辑运算 算术逻辑移位 SHL/SAL 逻辑/算术左移
三、逻辑运算和移位指令
指令功能:把AX中字的符号值扩充到DX寄存器的所有位。
扩展方法:若AX的D15=0,则DX ← 0000H;
若AX的D15=1,则DX ← FFFFH。 注意:CWD指令执行后,也不影响标志位。
⑸ AAD除法的ASCII调整指令(ASCII Adjust for Division)
指令格式:AAD 指令功能:在做除法前,把BCD码转换成二进制数。 调整过程:AL ← AH×10+AL;AH ← 00
23:30
;对存储单元字节内容取反后送回该单元
17
§3-3逻辑运算和移位指令
⑵ AND逻辑与指令(Logical AND)
指令格式:AND 目的,源 指令功能:目的目的∧源
【8086的指令系统】
主要用于使操作数的某些位保留(和‚1”相与),而使某些位清除(和 ‚0”相与)。
⑶ OR逻辑或指令(Logical OR)
若被除数、除数都是16位,则将16位被除数送到AX中,再将DX清0。
注意:▲源操作数可以是寄存器、存储单元; ▲DIV指令执行后,所有标志位均无定义。
23:30 7
§3-3 算术运算指令
⑵ IDIV整数除法指令(Integer Division)
指令格式: IDIV 源
【8086的指令系统】
指令功能:对两个带符号二进制数进行除法操作(也称为带符号数除法)
指令格式:NOT 目的 指令功能:目的 目的取反 操作数要求: ①可以是8位或16位寄存器、存储器。
【8086的指令系统】
②对于存储器操作,需指明是字还是字节。
注意:指令执行后,对标志位无影响。 例 NOT AX NOT BL ;AX AX取反 ;BL BL取反
NOT BYTE PTR[BX]
微机原理与接口技术
第五讲
自动化学院 王俊宏
课程网站: http://jpkc.hdu.edu.cn/auto/wjjk/ 公共Email: zdhwjyl@126.com 密码:wjyl1234
23:30
1
§3-3 算术运算指令
算术逻辑指令 加
ADD ADC INC AAA DAA 加法 带进位的加法 增量 加法的ASCII调整 加法的十进制调整 除 DIV IDIV AAD CBW CWD
【8086的指令系统】
FIRST
;除数6 ;被除数75H ;存商 ;存余数
SECOND THIRD THIRD+1 FOUR
06H 75H 00H
00H ? …
;第一个被除数高位AH清0 ;截取高4位得到AL=70H
MOV
AND MOV
AL,SECOND ;AL←被除数75
ROL
DIV MOV
23:30
AL,CL ;循环移位移至低4位得到AL=07H
FIRST ;AX/06,即0007/06; ;得结果:AL←商为1,AH余数←1 THIRD+1,AL ;结果单元←第一个商1
13
§3-3 算术运算指令
MOV
AND AAD AL,0FH
【8086的指令系统】
;AL←截低4位,故AX=0105H ;将AX中内容0105H调整为0FH
【8086的指令系统】
解:该除法运算过程表示如下:(注:75以BCD码的形式存放)
第一个商为1
6 高位除余数为1
1 — 6
1 —1
2
第二个商为2
7 5 5 2
最后结果余数为3
3
12
23:30
§3-3 算术运算指令
程序如下:
FIRST SECOND THIRD FOUR DB DB DB DB …… MOV AH,00H AL,0F0H CL,04H 06H 75H 2 DUP(0) ?
解: TEST AL, 80H
JNZ T_ALARM TEST AL, 40H
; 查AL的D7=1?
; 是1(非零),则转温度报警程序 ; D7=0,D6=1?
2
§3-3 算术运算指令
MOV AL,43H
MOV BL,68H
【8086的指令系统】
SUB AL,BL
MOV CL,AL DAS HLT ;十进制数调整
执行结果AL= 75H ,CL= ,CL= DBH 。
。
23:30
3
§3-3 算术运算指令
【8086的指令系统】
⑶ AAM乘法的ASCII调整指令(ASCII Adjust for Multiply)
注意:
▲操作与DIV相同; ▲商和余数都是带符号数,且规定余数的符号和被除数的相同; ▲指令执行后,所有标志位均无定义。 ▲无论对 (DIV)还是 (IDIV),都要注意溢出问题: 字节操作时:被除数的高 8位绝对值大于除数的绝对值,则产生溢出。 (对于无符号数,允许最大商为FFH;对于带符号数,允许商的范围为-
NOT
取反
AND
OR XOR
逻辑乘(与)
逻辑加(或) 异或
SHR
SAR
逻辑右移
算术右移
循环移位
TEST
测试
ROL
ROR
循环左移
循环右移
RCL
RCR
23:30
通过进位的循环左移
通过进位的循环右移
16
§3-3逻辑运算和移位指令
1.逻辑运算指令(Logical Operations)
⑴ NOT取反指令(Logical Not)
注意:▲ AX 中的两位非压缩格式的 BCD 数除以一个非压缩的 BCD 数前,
要先用AAD指令把AX中的被除数调整成二进制数,并存到AL中,才能用DIV 指令进行运算。▲根据 AL寄存器结果影响 SF、ZF、PF,但对OF、CF、AF
无定义。
23:30 11
§3-3 算术运算指令
例 编写程序,计算75÷6=l 2……3
AL,SECOND ;AL←被除数75
DIV
MOV MOV FIRST
FIRST ;0FH/6,结果:AL←商为2,AH←余数3
THIRD,AL FOUR, AH ;THIRD单元←第二个商2 ; FOUR单元←第二个余数3 除数 被除数
06 75 02
SECOND
THIRD
THIRD+1 FOUR
23:30 19
§3-3逻辑运算和移位指令
【8086的指令系统】
对AND 、 OR 、XOR和TEST指令的说明:
▲源操作数可以是8位或16位立即数、寄存器、存储器; ▲目的操作数只能是寄存器、存储器,两操作数不能同时为存储器; ▲指令执行后,均将CF和OF清零,ZF、SF和 PF反映操作结果,AF未定 义。 例 设AL寄存器中存有报警标志。若D7=1,表示温度报警,程序要转到温 度报警处理程序T_ ALARM;D6=1,则转压力报警程序P_ALARM。用 TEST指令来实现这种功能。
23:30
【8086的指令系统】
减
SUB SBB DEC NEG CMP AAS DAS 减法 带借位的减法 减量 取负 比较 减法的ASCII调整 减法的十进制调整 乘 MUL IMUL AAM 法
法
法
法
无符号数除法 整数除法 除法的ASCII调整 把字节转换成字 把字转换成双字
无符号数乘法 整数乘法 乘法的ASCII调整
指令格式:OR 目的,源 指令功能:目的目的∨源
主要用于使操作数的某些位保留(和‚0”相或),而使某些位置位(和 ‚1”相或)。
例 MOV AND OR
23:30
AX, 3538H AX, 0F0FH AX,3030H ; AX 0508H ;AX 3538H
18
§3-3逻辑运算和移位指令
§3-3 算术运算指令
4.除法指令(Division)
【8086的指令系统】
⑴ DIV无符号数除法指令(Division,unsigned)
指令格式:DIV 源 指令功能:对两个无符号二进制数进行除法操作。
▲源操作数为字节:16位被除数必须放在AX中,8位除数为源操作数。
AL ← AX/源(字节)的商 AH ←AX/源(字节)的余数 若被除数只有8位,必须把它放在AL中,并将AH清0。 ▲源操作数为字:32位被除数在(DX,AX)中,16位除数作源操作数。 AX ← (DX,AX)/源(字)的商 DX ← (DX,AX)/源(字)的余数
D0 AL D0
D7
0
D0 AL=正数 D0
▲若AL中的D7=1,则将这个1扩展到AH中,使AH=FFH,即: D7 D7
AH
1 ······ 1
AL 1
AL=负数
注意:CBW指令执行后,不影响标志位。
23:30 10
§3-3 算术运算指令
指令格式:CWD
【8086的指令系统】
⑷ CWD把字转换成双字指令(Convert Word to Double Word)
;屏蔽高半字节,AL=09H ;屏蔽高半字节,BL=06H
MUL BL
;相乘, AL=36H
;调整,AX=0504H AX,3030H
如要将结果转换成ASCII码,可用指令OR
实现,使 AX=3534H。
OR
23:30
0000 0101 0000 0100
0011 0000 0011 0101 0011 0000 0011 0100
MUL BL AAM ;AL 09与06之乘积36H ;调整得AH=05H(十位), AL=04H(个位) 结果:AX=0504H,即BCD数54。
23:30
5
§3-3 算术运算指令
例
之积。
解:用以下指令实现: AND AL,0FH AND AAM BL,0FH
【8086的指令系统】
如果 AL 和 BL 中分别存放 9 和 6 的ASCII 码,求两数
指令格式:AAM 指令功能: 对AL中的两个非压缩十进制数相乘的乘积进行十进制数的调整 ,在AX中得到正确的非压缩十进制数的乘积,高位在AH中,低位在AL中 调整过程: 把AL寄存器内容除以10,商放在AH中,余数在AL中。即: AH ← AL/10所得的商 AL ← AH/10所得的余数
注意:
▲两个 ASCII码数相乘之前,先屏蔽掉每个数字的高半字节,使每个字 节包含一个非压缩十进制数(BCD数),再用MUL指令相乘,乘积放到AL
式。
例 两个无符号数7A86H和04H相除,商应为多少? 解:MOV AX,7A86H MOV BL,04H DIV BL 结果:①正确的商应为1EA1H。 ②由于BL中的除数04H为字节,被除数为字,商1EA1H大于AL中能存
放的最大无符号数FFH,产生除法错误中断。
23:30
9
§3-3 算术运算指令
指令格式:CBW
【8086的指令系统】
⑶ CBW把字节转换为字指令(Convert Byte to Word)
指令功能:把寄存器AL中字节的符号位扩充到AH的所有位。(AH被称
为AL的符号扩充)
扩展方法: ▲若AL中的D7=0,则将这个0扩展到AH中,使AH=00H,即: D7 AH
0 ······ 0
⑷ XOR异或操作指令(Exclusive OR)
指令格式:XOR 目的,源
指令功能:目的目的∨源
【8086的指令系统】
主要用于使操作数的某些位保留(和‚0”相异或),而使某些位取反(和‚1” 相异或)
⑸ TEST测试指令(Test)
指令格式:TEST 目的,源 指令功能:目的∧源
逻辑与操作,并修改标志位,但不回送结果,两个操作数都不变。 常用于在要检测某些条件是否满足,但又不希望改变原有操作数的 情况下。紧跟在这条指令后面的往往是一条条件转移指令,根据测 试结果产生分支,转向不同的处理程序。
寄存器中,然后用AAM指令进行调整。
▲标志位的影响:影响ZF、SF和PF,但AF、CF和OF无定义。 ▲8086的指令系统中,十进制乘法运算不允许采用压缩十进制数,故调 整指令仅此一条。
23:30 4
§3-3 算术运算指令
解:MOV AL,09H ;置初值
【8086的指令系统】
例 求两个非压缩十进制数09和06之乘积。 MOV BL,06H
127~+127,或-81H~+7FH);
字操作时:被除数的高16位绝对值大于除数的绝对值,则产生溢出。 (对于无符号数,允许最大商为FFFFH;对于带符号数,允许商的范围
为-32767~+32767,或-8001H~7FFFH)。
23:30 8
§3-3 算术运算指令
Байду номын сангаас
【8086的指令系统】
▲带符号数除法指令,字节操作时要求被除数为 16位,字操作时要求被 除数为32位,如果被除数不满足这个条件,不能简单地将高位置0,而应 该用符号扩展指令(Sign Extension)将被除数转换成除法指令所要求的格
23:30
商
01
03
余数
14
数据存放格式
§3-3 8086的指令系统
按功能可分为以下六类
一、数据传送指令
二、算术运算指令
三、逻辑运算和移位指令 四、串操作指令 五、转移指令 六、处理器控制指令
23:30
15
§3-3
8086的指令系统
逻辑运算 算术逻辑移位 SHL/SAL 逻辑/算术左移
三、逻辑运算和移位指令
指令功能:把AX中字的符号值扩充到DX寄存器的所有位。
扩展方法:若AX的D15=0,则DX ← 0000H;
若AX的D15=1,则DX ← FFFFH。 注意:CWD指令执行后,也不影响标志位。
⑸ AAD除法的ASCII调整指令(ASCII Adjust for Division)
指令格式:AAD 指令功能:在做除法前,把BCD码转换成二进制数。 调整过程:AL ← AH×10+AL;AH ← 00
23:30
;对存储单元字节内容取反后送回该单元
17
§3-3逻辑运算和移位指令
⑵ AND逻辑与指令(Logical AND)
指令格式:AND 目的,源 指令功能:目的目的∧源
【8086的指令系统】
主要用于使操作数的某些位保留(和‚1”相与),而使某些位清除(和 ‚0”相与)。
⑶ OR逻辑或指令(Logical OR)
若被除数、除数都是16位,则将16位被除数送到AX中,再将DX清0。
注意:▲源操作数可以是寄存器、存储单元; ▲DIV指令执行后,所有标志位均无定义。
23:30 7
§3-3 算术运算指令
⑵ IDIV整数除法指令(Integer Division)
指令格式: IDIV 源
【8086的指令系统】
指令功能:对两个带符号二进制数进行除法操作(也称为带符号数除法)
指令格式:NOT 目的 指令功能:目的 目的取反 操作数要求: ①可以是8位或16位寄存器、存储器。
【8086的指令系统】
②对于存储器操作,需指明是字还是字节。
注意:指令执行后,对标志位无影响。 例 NOT AX NOT BL ;AX AX取反 ;BL BL取反
NOT BYTE PTR[BX]
微机原理与接口技术
第五讲
自动化学院 王俊宏
课程网站: http://jpkc.hdu.edu.cn/auto/wjjk/ 公共Email: zdhwjyl@126.com 密码:wjyl1234
23:30
1
§3-3 算术运算指令
算术逻辑指令 加
ADD ADC INC AAA DAA 加法 带进位的加法 增量 加法的ASCII调整 加法的十进制调整 除 DIV IDIV AAD CBW CWD
【8086的指令系统】
FIRST
;除数6 ;被除数75H ;存商 ;存余数
SECOND THIRD THIRD+1 FOUR
06H 75H 00H
00H ? …
;第一个被除数高位AH清0 ;截取高4位得到AL=70H
MOV
AND MOV
AL,SECOND ;AL←被除数75
ROL
DIV MOV
23:30
AL,CL ;循环移位移至低4位得到AL=07H
FIRST ;AX/06,即0007/06; ;得结果:AL←商为1,AH余数←1 THIRD+1,AL ;结果单元←第一个商1
13
§3-3 算术运算指令
MOV
AND AAD AL,0FH
【8086的指令系统】
;AL←截低4位,故AX=0105H ;将AX中内容0105H调整为0FH
【8086的指令系统】
解:该除法运算过程表示如下:(注:75以BCD码的形式存放)
第一个商为1
6 高位除余数为1
1 — 6
1 —1
2
第二个商为2
7 5 5 2
最后结果余数为3
3
12
23:30
§3-3 算术运算指令
程序如下:
FIRST SECOND THIRD FOUR DB DB DB DB …… MOV AH,00H AL,0F0H CL,04H 06H 75H 2 DUP(0) ?
解: TEST AL, 80H
JNZ T_ALARM TEST AL, 40H
; 查AL的D7=1?
; 是1(非零),则转温度报警程序 ; D7=0,D6=1?
2
§3-3 算术运算指令
MOV AL,43H
MOV BL,68H
【8086的指令系统】
SUB AL,BL
MOV CL,AL DAS HLT ;十进制数调整
执行结果AL= 75H ,CL= ,CL= DBH 。
。
23:30
3
§3-3 算术运算指令
【8086的指令系统】
⑶ AAM乘法的ASCII调整指令(ASCII Adjust for Multiply)
注意:
▲操作与DIV相同; ▲商和余数都是带符号数,且规定余数的符号和被除数的相同; ▲指令执行后,所有标志位均无定义。 ▲无论对 (DIV)还是 (IDIV),都要注意溢出问题: 字节操作时:被除数的高 8位绝对值大于除数的绝对值,则产生溢出。 (对于无符号数,允许最大商为FFH;对于带符号数,允许商的范围为-
NOT
取反
AND
OR XOR
逻辑乘(与)
逻辑加(或) 异或
SHR
SAR
逻辑右移
算术右移
循环移位
TEST
测试
ROL
ROR
循环左移
循环右移
RCL
RCR
23:30
通过进位的循环左移
通过进位的循环右移
16
§3-3逻辑运算和移位指令
1.逻辑运算指令(Logical Operations)
⑴ NOT取反指令(Logical Not)
注意:▲ AX 中的两位非压缩格式的 BCD 数除以一个非压缩的 BCD 数前,
要先用AAD指令把AX中的被除数调整成二进制数,并存到AL中,才能用DIV 指令进行运算。▲根据 AL寄存器结果影响 SF、ZF、PF,但对OF、CF、AF
无定义。
23:30 11
§3-3 算术运算指令
例 编写程序,计算75÷6=l 2……3
AL,SECOND ;AL←被除数75
DIV
MOV MOV FIRST
FIRST ;0FH/6,结果:AL←商为2,AH←余数3
THIRD,AL FOUR, AH ;THIRD单元←第二个商2 ; FOUR单元←第二个余数3 除数 被除数
06 75 02
SECOND
THIRD
THIRD+1 FOUR
23:30 19
§3-3逻辑运算和移位指令
【8086的指令系统】
对AND 、 OR 、XOR和TEST指令的说明:
▲源操作数可以是8位或16位立即数、寄存器、存储器; ▲目的操作数只能是寄存器、存储器,两操作数不能同时为存储器; ▲指令执行后,均将CF和OF清零,ZF、SF和 PF反映操作结果,AF未定 义。 例 设AL寄存器中存有报警标志。若D7=1,表示温度报警,程序要转到温 度报警处理程序T_ ALARM;D6=1,则转压力报警程序P_ALARM。用 TEST指令来实现这种功能。
23:30
【8086的指令系统】
减
SUB SBB DEC NEG CMP AAS DAS 减法 带借位的减法 减量 取负 比较 减法的ASCII调整 减法的十进制调整 乘 MUL IMUL AAM 法
法
法
法
无符号数除法 整数除法 除法的ASCII调整 把字节转换成字 把字转换成双字
无符号数乘法 整数乘法 乘法的ASCII调整
指令格式:OR 目的,源 指令功能:目的目的∨源
主要用于使操作数的某些位保留(和‚0”相或),而使某些位置位(和 ‚1”相或)。
例 MOV AND OR
23:30
AX, 3538H AX, 0F0FH AX,3030H ; AX 0508H ;AX 3538H
18
§3-3逻辑运算和移位指令