第3章_3运算算术指令80X86的寻址方式和指令系统之算术运算指令
2017/8/13
1
算术运算类指令
算术运算类指令用来执行二进制的算术运算:加减乘除。
这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志
重点掌握
加法指令:ADD、ADC、INC
减法指令:SUB 、SBB、DEC、CMP、NEG
2017/8/13
2
算术运算类指令
8086/8088的算术运算指令可以处理四种类型的数:
1. 无符号的二进制数——8位,16位
2. 带符号的二进制数——8位,16位
3. 无符号的压缩十进制(BCD码)数——只有+/-
4. 无符号的非压缩十进制(BCD码)数
2017/8/13
3
算术运算类指令
无符号数有符号数
8位 0~255 -128~+127
16位 0~65535 -32768~+32767
无符号数和有符号数的溢出标准不一样,
判断二者的溢出标志也不一样。
CF标志位——可用来表示无符号数的进位。
OF标志位——可用来表示有符号数的溢出。
注意:除CBW,CWD外,其余指令都影响标志。
2017/8/13
4
类别
指令格式
状态标志位
OF
SF
ZF
AF
PF
CF
加法
ADD DST,SRC
ADC DST,SRC
INC DST
减法
SUB DST,SRC
SBB DST,SRC
DEC DST
NEG DST
CMP DST,SRC
1
注:
:运算结果影响标志位;
*:标志位为任意值;
:运算结果不影响标志位;
1:标志位置1。
2017/8/13
5
类别
指令格式
状态标志位
OF
SF
ZF
AF
PF
CF
乘法
MUL SRC
IMUL SRC
*
*
*
*
*
*
*
*
除法
DIV SRC
IDIV SRC
CBW
CWD
*
*
*
*
*
*
*
*
*
*
*
*
十进制调整
AAA
DAA
AAS
DAS
AAM
AAD
*
*
*
*
*
*
*
*
*
*
*
*
1
*
*
注:
:运算结果影响标志位;
*:标志位为任意值;
:运算结果不影响标志位;
1:标志位置1。
2017/8/13
6
一、加法和减法指令
加法指令:ADD, ADC和INC
减法指令:SUB, SBB, DEC, NEG和CMP
他们分别执行字或字节的加法和减法运算,除INC和DEC不影响CF标志外,其他按定义影响全部状态标志位
操作数组合:
运算指令助记符 reg, imm/reg/mem
运算指令助记符 mem, imm/reg
规定:
两个操作数不能都是mem;
操作数可以是8位或16位。
2017/8/13
7
1. 加和减指令
ADD dest,src
;加法:dest←dest+src
;ADD指令使目的操作数加上源操作数,和的结果送到目的操作数
SUB dest,src
;减法:dest←dest-src
;SUB指令使目的操作数减去源操作数,差的结果送到目的操作数
2017/8/13
8
1. 加和减指令
加法
mov ax,7348h ;AX=7348H
add al,27h
;AL=48H+27H=6FH,AX=736FH
;OF=0,SF=0,ZF=0,PF=1,CF=0
add ax,3fffh
;AX=736FH+3FFFH=B36EH
;OF=1,SF=1,ZF=0,PF=0,CF=0
2017/8/13
9
1. 加和减指令
加法
设:原AL=79H,BH=0B3H
ADD AL,BH 79H= 0111 1001 B
+) B3H= 1011 0011 B
1 0010 1100 B
即:AL=00101100B=2CH,BH=0B3H
SF=0,ZF=0,AF=0,PF=0,CF=1,OF=0
· 无符号数时, 结果AL=2CH, CF=1, 进位
· 有符号数时, 结果AL=2CH
SF=0(结果“+”)
OF=0(未溢出, 结果正确)
注意: 两个操作数应同时带符号
第3章 3运算算术指令 来自淘豆网m.daumloan.com转载请标明出处.