算术运算指令

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例如: ADC AL,68H ;AL←(AL)+68H+(CF) ADC AX,CX ;AX←(AX)+(CX)+(CF) ADC BX,[DI] ;BX←(BX)+[DI+1][DI]+(CF)
2021/3/7
8
ADC指令主要用于多字节加法运算中
例:有两个4字节的无符号数相加: 2C 56 F8 AC + 30 9E 47 BE = ? 设被加数、加数分别存放在BUFFER1及
1
② 无符号数溢出
无符号数 有符号数
0000 1000 +1111 1101 10000 0101
结果5
8 +253
261 CBiblioteka Baidu=1
+8 +(-3)
+5 OF=0
③ 有符号数溢出
0000 1000
8
+8
+0111 1101 +125 +(+125)
1000 0101 133
+133
结果-123
0;
当有符号数运算产生溢出时,OF=1(即OF=CF⊕CF1) ,
否则为0;
当运算结果为0时,ZF=1 ,否则为0;
当运算结果为负数时,SF=1 ,否则为0;
当运算一半位置有进位或借位时,AF=1 ,否则为0;
2021/3/7
6
1.加法指令
共有5条: (1) 不带进位的加法指令ADD
格式: ADD acc,data ADD mem/reg,data ADD mem/reg1,mem/reg2
思考:若最高位有进位,如何改?
2021/3/7
11
ADD/ADC指令对条件标志位(CF/OF/ZF/SF)的影响:
SF=
1 结果为负 0 否则
ZF=
1 结果为0 0 否则
CF=
1 0
和的最高有效位有向高位的进位 否则
OF= 1 两个操作数符号相同,而结果符号与之相反
0 否则
CF位表示无符号数相加的溢出。
注:1.源和目的操作数不能同时为存储器操作数 2.不能把段寄存器作为操作数
例:ADD AL,30H ADD AX,[BX+20H] ADD CX,SI ADD [DI],200H
202A1/3D/7D指令对标志位(指6个状态标志)都有影响。7
(2) 带进位位的加法指令ADC
ADC指令在形式上和功能上都有与ADD类似, 只是相加时还要包括进位标志CF的内容。
OF位表示带符号数相加的溢出。
2021/3/7
12
3) 加1指令INC(单操作数指令)
格式:INC reg/mem 功能:类似于C语言中的++操作:对指定的操作
数加1 例: INC AL
INC SI INC BYTE PTR[BX+4]
注意:本指令不影响CF标志,但对 AF/OF/PF/SF/ZF会产生影响。
14
(2) 考虑借位的减法指令SBB
SBB指令主要用于多字节的减法。 格式: SBB dest, src 操作: dest←(dest)-(src)-(CF)
指令例子: SBB AX,CX SBB WORD PTR[SI],2080H SBB [SI],DX
2021/3/7
15
例 : x 、 y 、 z 均 为 32 位 数 , 分 别 存 放 在 地 址 为 X, X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列 实现wx+y+24-z,结果放在W, W+2单元中。
BUFFER2开始的两个存储区内,结果放回 BUFFER1存储区,如下页图所示。
因CPU只能进行8位或16位的加法运算, 为此可将加法分4次进行。
2021/3/7
9
BUFFER1
ACH F8H 56H 2CH
BUFFER2
BEH 47H 9EH 30H
被 加 数
数 据 段
加 数
...
多字节加法示意图
2021/3/7
10
程序段如下:
MOV CX,4 ;置循环次数
MOV SI,0 ;置SI初值为零
CLC
;清进位标志CF
LL: MOV AL,BUFFER2[SI]
ADC BUFFER1[SI],AL ;带进位加
INC SI
;(SI)+1
DEC CX
;(CX)-1
JNZ LL
;若(CX)0,则转LL
2021/3/7
13
2. 减法指令
(1) 不考虑借位的减法指令SUB
格式: SUB dest, src
操作: dest←(dest)-(src)
注:1.源和目的操作数不能同时为存储器操作数 2.不能把段寄存器作为操作数
指令例子:
SUB AL,60H
SUB [BX+20H],DX
SUB AX,CX
2021/3/7
CF=0
OF=1
(补码表示)
2021/3/7
4
④ 无符号数和有符号数均溢出
无符号数 有符号数
1000 1000
136
-120
+1111 0111 +247 +(-9)
10111 1111
383
-129
结果127
CF=1 OF=1
上面四种情况说明, CF标志可用来表示无符号数的溢出,
OF标志可用来表示有符号数的溢出。
(3) 减1指令DEC
作用类似于C语言中的”--”操作符。
格式:DEC opr 操作:opr←(opr)-1
指令例子: DEC CL DEC BYTE PTR[DI+2] DEC SI
注:该指令与INC一样,它不影响CF标志,但对
AF202/1O/3/7F/PF/SF/ZF会产生影响。
17
MOV AX, X
MOV DX, X+2
ADD AX, Y
ADC DX, Y+2 ; x+y
ADD AX, 24 ADC DX, 0
; x+y+24
SUB AX, Z SBB DX, Z+2
; x+y+24-z
MOV W, AX 2021/3/7 MOV W+2, DX ; 结果存入W, W+2单元 16
有符号数的溢出是一种出错状态,在运 算过程中应当避免。
2021/3/7
5
• 所有的算术运算指令,都会影响FLAGS标志寄存器的6 个状态标志CF/OF/ZF/SF/AF/PF(3个控制标志IF/DF/TF 不受影响)。
• 总的讲,有这样一些规则:
当无符号数运算产生溢出(即最高位向前有进位
或借位)时,CF=1,否则为
3.3.2 算术运算指令
涉及两种类型数据: 无符号数和有符号数
。对加减法指令,无符号和有符号数可采用同 一套指令,但应注意:
参加的操作数必须都是无符号数或都是有 符号数。
需使用不同的标志位(CF,OF)来检查无符 号数和有符号数的运算结果是否溢出。
这类指令一般都影响标志寄存器FLAGS 。
2021/3/7
相关文档
最新文档