当前位置:
文档之家› 第二章4 8086指令系统(算数运算)
第二章4 8086指令系统(算数运算)
二、算术运算指令—符号扩展指令
15、CBW 指令
格式:CBW
•无操作数指令 •隐含对AL或AX进行符号扩展 •不影响条件标志位。
功能: 若(AL)的最高有效位为0,则(AH)= 00H 若(AL)的最高有效位为1,则(AH)= 0FFH 16、CWD 指令 格式:CWD 功能: 若(AX)的最高有效位为0,则(DX)= 0000H 若(AX)的最高有效位为1,则(DX)= 0FFFFH 例:(AX)=0BA45H=1011 1010 0100 0101B CBW ; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H
功能:(dest) -(src)
CX,DX
SI,DI
CH,LD
DH,DL BH,BL
例如:
CMP CMP AX,BX CL,[SI]
BP,SP
立即数
DS,ES,SS
CMP
8、NEG 指令 格式:NEG
CL,56H
dest
功能: (dest) (dest) + 1(求补 运算) 例如: NEG CL
IMUL指令: CF/OF =
例:
MUL CL ;(AL)*(CL)积在AX中 ;(AX)*(SI)积在DX:AX中 MUL SI
MUL AX
;(AX)*(AX)积在DX:AX中
二、算术运算指令—除法指令
13、DIV 指令
格式:DIV src 商: AL ←AX / SRC
若src是字节数据,则被除数是 AX 功能:
功能:对AL中的压缩BCD码 加法结果进行修正。 AL高4位
AF=1 >9 ,CF=0
AL←AL+60H CF=1
CF=1
0001 1001 +0000 1000 0010 0001 0001 1001 +0000 0110 0010 0111
例如19+8=27的BCD加法
+06H 修正
AF=1
27BCD
CF=1
AF=1
BCD数只能表示无符号数
二、算术运算指令—乘法指令
11、MUL 指令 格式:MUL src
若src是字节数据,则AL=dest
功能:
AX ← AL*SRC
DX:AX ← AX*SRC
若src是字数据,则AX=dest
12、IMUL 指令 格式:IMUL src 功能:IMUL同MUL只是针对有符号数。
(DX):(AX)=0002H:F365H 与 (BX):(CX) =0005H:E024H 相加 即是:(DX):(AX) + (BX):(CX)= (DX):(AX) F365H ADD E024H AX CX
2F365H+5E024H=8D389H
指令序列 (1) ADD AX, CX (2) ADC DX, BX (1)执行后 (AX)= 0D389H CF=1 OF=0
SI,DI
CH,CL
DH,DL BH,BL
例如:
ADD ADD AX,BX CL,[SI]
BP,SP
立即数
DS,ES,SS
ADD
ADD ADD
CL,AL
DX,ES AL,30H
ADD BYTE PTR [DI],12H
影响标志位OF SF ZF AF CF
ADD 指令对标志位
SF= CF= 1 0
n=8bit 带符号数(-128~127) 有符号数和无符号数都不溢出
无符号数(0~255) 无符号数溢出
0000 0100 + 0000 1011 0000 1111 有:(+4)+(+11)=+15 OF=0 无:4+11=15 CF=0
有符号数和无符号数都溢出
0000 0111 + 1111 1011 0000 0010 有:(+7)+(-5)=+2 OF=0 无:7+251=2 CF=1
>9 AL低4位 AL←AL﹣06H AF=1 >9 AL高4位 CF=1 AL←AL﹣60H
功能:对AL中的压缩BCD码 减法结果进行修正。
例如34 ﹣ 89=45的BCD 减法
0011 0100 ﹣ 1000 1001 1010 1011
﹣ 06H 修正
1010 1011 ﹣ 0110 0110 0100 0101 45BCD
•CMP 影响标志位不保存结果 •NEG 不影响标志位 NEG 3
NEG
NEG
DX
SI
二、算术运算指令—加法调整指
令(P78)
9、DAA 指令 格式:必须紧跟在ADD、ADC 之后。
•OF不确定,其余标志位随运算 结果而变。 •只能在ADD或ADC之后出现。
>9,AF=0 AL低4位 AL←AL+06H
有符号数溢出:OF=最高位进位 异或 次高位进位
二、算术运算指令—加法指令
2、ADC 指令 格式:ADC dest , src AX,BX 功能: (dest) (dest)+(src)+CF
内存 AH,AL
CX,DX
SI,DI
CH,CL
DH,DL BH,BL
例如:
ADC ADC AX,BX CL,[SI 0 结果为0 否则
结果为负 否则
1 0
1 0 1 0
和的最高位向高位有进位 否则
两个操作数符号相同,而结果符号与之相反 否则 D3产生进位 否则
OF=
AF=
CF——表示无符号数相加的溢出。 OF——表示带符号数相加的溢出。 AF——BCD数运算的调整指令中,该位和CF位会 影响是否对低、高4位进行调整
余数: AH AX % SRC
商: AX ←DX:AX / SRC 若src是字节数据,则被除数是 DX: AX 余数:DX DX:AX % SRC 14、IDIV 指令
格式:IDIV src
功能:IDIV同DIV只是针对有 符号数。
•AX(DX:AX)隐含的被除数寄存器。 •AL(AX)隐含的商寄存器。 •AH(DX)隐含的余数寄存器。 •src不能为立即数。 • 对所有条件标志位均无定义。 •商溢出错时,产生除法出错中断。
•AL(AX)为隐含的乘数寄存器 •AX(DX:AX)为隐含的乘积寄存器 •src不能为立即数。 •除CF和OF,对条件标志位无定义
二、算术运算指令—乘法指令
•乘法指令对标志位影响: MUL指令: CF/OF = 00 11 00 11 乘积的高一半为零,无有效数据 否则 乘积的高一半是符号扩展,无有效数据 否则
CL,56H
dest
功能: (dest) (dest) - 1 例如: DEC DEC CX CL
•SUB、SBB 影响标志位 OF SF ZF AF CF •DEC 不影响CF DEC 3
二、算术运算指令—减法指令
7、CMP 指令 格式:CMP dest , src AX,BX
内存 AH,AL
3.2 指令系统
按功能分为:
•数据传送指令 •算术运算指令 •位处理指令(逻辑运算指令)
•串操作指令
•控制转移指令 •处理机控制指令
二、算术运算指令—加法指令
1、ADD 指令 格式:ADD dest , src AX,BX 功能: (dest) (dest)+(src)
内存 AH,AL
CX,DX
有符号数溢出
1000 0111 + 1111 0101 0111 1100 有:(-121)+(-11)=+124 OF=1 无:135+245=124 CF=1
0000 1001 + 0111 1100 1000 0101 有:(+9)+(+124)=-123 OF=1 无:9+124=133 CF=0
5、SBB 指令 格式:SBB dest , src AX,BX 功能:(dest) (dest) -(src) - CF
内存 AH,AL
CX,DX
SI,DI
CH,CL
DH,DL BH,BL
例如:
SBB SBB AX,BX CL,[SI]
BP,SP
立即数
DS,ES,SS
SBB
6、DEC 指令 格式:DEC
BP,SP
立即数
DS,ES,SS
ADC
ADC 3、INC 指令
CL,AL
DX,ES
格式:INC
dest
功能: (dest) (dest) + 1 例如:INC CX
•ADD、ADC影响标志位 OF SF ZF AF CF •INC 不影响CF INC 3
例:双字数据的加法
(DX)= 0002H (AX)= 0F365H (BX)= 0005H (CX)= 0E024H
DAA
XCHG AH,AL
;(AL)=40H+06H=46H (AF=1 CF=0)
; AX= (1834+2789=4623)BCD DEBUG演示
二、算术运算指令—减法调整指
令
10、DAS 指令 格 式 : 必 须紧 跟 在 SUB、SBB 之后。
•OF不确定,其余标志位随运算 结果而变。 •只能在SUB或SBB之后出现。
二、算术运算指令—加法调整指令
(1834)BCD+ (2789)BCD=4623D
运算: 1834H+2789H=40BDH MOV ADD DAA MOV MOV ADC AH,AL AL,18H AL,27H AL,34H AL,89H DAA 4623H (4623)BCD
;(AL)=34H ;(AL)=34+89=BDH ;(AL)=BDH+60H+06H=23H(AF=CF=1 ) ;(AH)=23H ;(AL)=18H ;(AL)=18+27+1=40H