自动控制--第3章3.3.2算术运算类指令
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SF= 0 ZF= 0 OF= 0
13
ADD指令例2
• 执行指令 ADD WORD PTR [BX],9F76H; 设DS=2000H,BX=1000H, 则目的物理地址PA=21000H; 若执行前(21000H)=88H, (21001H)=A9H;
14
ADD指令例2
15
2)ADC指令
• 指令格式、对操作数的要求、对标志位的影响与ADD指令完全一 样;
AF
PF
CF
FLAGS寄存器
8
加法指令例1
• CF(Carry Flag)
• 进位标志位。加(减)法运算时,若最高位有进(借)位则CF=1
• PF(Parity Flag)
• 奇偶标志位。运算结果的低字节中“1”的个数为偶数时PF=l
• AF(Auxiliary Carry Flag)
• 辅助进位标志位。加(减)操作中,若低半字节向高半字节有进位(借位), AF=1
21
3)INC指令
• 格式: INC OPRD
• 操作: OPRD+1
OPRD
不能是段寄存器 或立即数
22
常用于在程序中修改地址指针及循环次数; 指令中的操作数OPRD可以是寄存器或存储器, 但不能是段寄存器和立即数。
INC指令不影响CF标志位,但对其他5个状态标志 会产生影响。
23
INC指令例
指令执行后 (AX)=09FDH, OF=0,SF=0,ZF=0, AF=0,PF=0,CF=1
11
ADD指令例2
MOV AL,78H ADD AL,99H 指令执行后6个状态标志位的状态
12
ADD指令例2
01111000 + 10011001
00010001
1
标志位状态: CF= 1 AF= 1 PF= 0
9
加法指令例1
• ZF(Zero Flag)
• 零标志位。当运算结果为零时ZF=1
• SF(Sign Flag)
• 符号标志位。当运算结果的最高位为1时,SF=l
• OF(Overflow Flag)
• 溢出标志位。当算术运算的结果超出了有符号数的可表达范围时,OF=l
10
加法指令例1
执行 ADD AX,BX 设(AX)=1234H,(BX)=0F7C9H
• 操作:
• dest- src dest
• 对标志位的影响与ADD指令同
27
减法指令SUB例1
• 例:
28
减法指令SUB例2
执行指令:SUB AX,[BX] 设(AX)=578FH,(DS)=1000H, (BX)=2000H,(12000H)=7890H
指令执行后 (AX)=0DEFFH OF=0,SF=1,ZF=0, AF=0,PF=1,CF=1
算术运算类指令
1
• 算术运算指令(Arithmetic)包括加、减、乘、除和十进制调整指令 等五类,可实现有符号数和无符号数的字或字节运算。
• 算数运算结果是否溢出
• 有符号数运算,标志位OF=1表示结果溢出; • 无符号数运算,标志位CF=1表示结果溢出;
2
算术运算类指令分类
• 加法运算指令 • 减法运算指令 • 乘法指令 • 除法指令 • 十进制调整指令
• 格式:
• ADD dest,src
• 操作:
• src+dest
dest
ADD指令的执行对全部6个状态标志位都产生影响
5
说明:
• 目的操作数可以是通用寄存器或存储器,源操作数可以是通用寄存器、 存储器或立即数,但不能同时为存储器。 例: ADD [BX],[SI]
• ADD指令不区分两个加数是无符号数还是带符号数,运算结果的二进制 形式相同,影响状态标志位,但是相加的数必须是等字长的。 例:ADD AX,1200H ADD AL,BL
算术运算指令的执行大多会对状态标志位产生影响
3
1. 加法指令
加法指令ADD 带进位的加法指令ADC 加1指令INC
加法指令对操作数的要求与MOV指令相同,但段 寄存器不能作为加法指令的操作数;
INC指令的操作数只能是存储器或寄存器,单作为 存储器操作数时,需使用PTR说明操作数的字长。
4
1)普通加法指令ADD
例: INC AX; INC BYTE PTR [SI];
INC BYTE PTR [来自百度文库X+DI+2];
将 SI 内 容 为 偏 移地址的存储 单元的内容加1, 结果送回该单 元中
将
(DS*16+BX+DI+2)+1
送入(DS*16+BX+DI+2)
中
24
INC指令例
• 例:设BX=1234H,执行指令 INC BX;
• ADC指令多用于多字节数相加,使用前要先将CF清零。 • ADC dest, src
• 指令的操作:
• dest+src+CF
dest
16
ADC指令例1
• 假定CF=1,写出下列指令执行后的结果。 MOV AL, 7FH ADC AL, 0A4H
执行指令后: (AL)=24H,且CF=1
17
ADC指令例2
6
加法指令例1
执行 ADD AX,BX 设(AX)=1234H,(BX)=0F7C9H
7
加法指令例1
• FLAGS
• 标志寄存器,存放运算结果的特征
• 6个条件状态标志位(CF,SF,AF,PF,OF,ZF) • 3个控制状态标志位(IF,TF,DF)
15
11 10 9 8 7 6
4
2
0
OF DF IF TF SF ZF
结果:BX=1235H
25
2. 减法指令
减法指令SUB 带借位的减法指令SBB 减1指令DEC 比较指令CMP 求补指令NEG
SUB,SBB,CMP指令对操作数的要求及对标志位的影响 和ADD指令完全相同;
DEC,NEG指令则与INC指令有相同的要求;
26
1)减法指令SUB
• 格式:
• SUB dest,src
29
减法指令SUB例3
• 例:执行指令 SUB DH,[BP+4]
设SS=4000H,BP=00E8H, 则物理地址PA=400ECH; 若执行前:DH=87H,(400ECH)=45H;
编写程序,求两个多字节无符号数 0107A379H+10067E4FH的和。
18
ADC指令例2
19
ADC指令例2
20
ADC指令例2
• ADC指令主要用于多字节加法运算。由于8086一次最多只能实现 两个16位数相加,所以对多于两个字节的数的加法,只能先加低 16位(或8位),再加高16位(或高8位),但在高位相加时,必 须要考虑低位向上的进位,这时就需要ACD指令。