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