3.4 算术运算类指令

25
1 3.4 算算算算算算算 算算算算算算 算算算算算算 算算算算 算算算算 算算算算算算算算算算算算算算算算算算算算算算

Upload: nhung

Post on 13-Jan-2016

90 views

Category:

Documents


0 download

DESCRIPTION

3.4 算术运算类指令. 加法运算指令 减法运算指令 乘法指令 除法指令. 算术运算指令的执行大多对状态标志位会产生影响. 3.4.1 加法指令. 普通加法指令 ADD 带进位位的加法指令 ADC 加1指令 INC. 加法指令对操作数的要求与 MOV 指令相同 格式: ADD OPRD1,OPRD2 ;OPRD1+OPRD2 OPRD1 ADD 指令的执行对全部6个状态标志位都产生影响. ADD 指令例. MOV AL,78H - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 3.4  算术运算类指令

1

3.4 算术运算类指令

加法运算指令减法运算指令乘法指令除法指令

算术运算指令的执行大多对状态标志位会产生影响

Page 2: 3.4  算术运算类指令

2

3.4.1 加法指令 普通加法指令 ADD

带进位位的加法指令 ADC

加 1 指令 INC

加法指令对操作数的要求与 MOV 指令相同格式: ADD OPRD1 , OPRD2

;OPRD1+OPRD2 OPRD1

ADD 指令的执行对全部 6 个状态标志位都产生影响

Page 3: 3.4  算术运算类指令

3

ADD指令例

MOV AL , 78H

ADD AL , 99H

指令执行后 6 个状态标志位的状态

P110 例 1 例 2 例 3 例 4

Page 4: 3.4  算术运算类指令

4

ADC指令

指令格式、对操作数的要求、对标志位的影响与ADD 指令完全一样

ADC OPRDA , OPRD2

指令的操作:

OPRD1+OPRD2+CF OPRD1

ADC 指令多用于多字节数相加,使用前要先将CF 清零。 P112 例

Page 5: 3.4  算术运算类指令

5

INC指令

格式:

INC OPRD

操作: OPRD+1 OPRD

只影响 OF 、 SF 、 ZF 、 AF 、 PF ,不影响CF 。常用于在程序中修改地址指针

不能是段寄存器或立即数

Page 6: 3.4  算术运算类指令

6

3.4.2 减法指令

普通减法指令 SUB

带借位的减法指令 SBB

减 1 指令 DEC

比较指令 CMP

求补指令 NEG

减法指令对操作数的要求与对应的加法指令相同

Page 7: 3.4  算术运算类指令

7

1. SUB指令

格式: SUB OPRD1 , OPRD2

操作: OPRD1- OPRD2 OPRD1

对标志位的影响与 ADD 指令同

Page 8: 3.4  算术运算类指令

8

2. SBB指令

指令格式、对操作数的要求、对标志位的影响与 SUB 指令完全一样

SBB OPRD1 , OPRD2

指令的操作:

OPRD1- OPRD2- CF OPRD1

Page 9: 3.4  算术运算类指令

9

3. DEC指令

格式:

DEC OPRD

操作:

指令对操作数的要求与 INC 相同

指令常用于在程序中修改计数值

OPRD - 1 OPRD

Page 10: 3.4  算术运算类指令

10

4. NEG指令

格式:

NEG OPRD

操作: 0 - OPRD OPRD

8/16 位寄存器或存储器操作数

用 0 减去操作数,相当于对该操作数求补码

Page 11: 3.4  算术运算类指令

11

5. CMP指令 格式: CMP OPRD1 , OPRD2

操作:

OPRD1- OPRD2 指令执行的结果不影响目标操作数! 用途:用于比较两个数的大小,可作为条件转移指令

转移的条件

指令对操作数的要求及对标志位的影响与 SUB 指令相同

Page 12: 3.4  算术运算类指令

12

CMP指令 两个无符号数的比较: CMP AX , BX 若 AX > BX CF=0 若 AX < BX CF=1 两个带符号数的比较 CMP AX , BX 两个数的大小由 OF 和 SF 共同决定 OF 和 SF 状态相同 AX > BX

OF 和 SF 状态不同 AX < BX

Page 13: 3.4  算术运算类指令

13

3.4.3 乘法指令

无符号的乘法指令 MUL

带符号的乘法指令 IMUL

乘法指令采用隐含寻址,隐含的是存放被乘数的累加器 AL 或 AX 及存放结果的AX , DX ;

Page 14: 3.4  算术运算类指令

14

1. 无符号数乘法指令 格式: MUL OPRD

不能是立即数 操作: OPRD 为字节数 AL×OPRD AX

OPRD 为 16 位数 AX×OPRD DXAX

对标志位的影响 : 运算结果的高字节 ( 字 ) 有效 ,CF=1 , OF=1 ,否则, CF=0 , OF=0

Page 15: 3.4  算术运算类指令

15

无符号数乘法指令例 MUL BYTE PTR[BX]

BX XXHAL ×XXH

AX

Page 16: 3.4  算术运算类指令

16

2. 带符号数乘法指令 格式: IMUL OPRD

IMUL 指令将 OPRD 视为带符号数,运算时若操作数为负数,会先将操作数求补码,运算后再将结果求补。若乘积的高一半是符号的扩展,则 OF=CF=0 ;否

则为 1 。

Page 17: 3.4  算术运算类指令

17

IMUL指令例设: AL=FEH , CL=11H ,求 AL 与 CL

的乘积。 若为无符号数,则 MUL CL 结果: AX=10DEH

若将两操作数看作有符号数,则: IMUL CL 指令执行后: AX=FFDEH=-34 。

Page 18: 3.4  算术运算类指令

18

3.4.4 除法指令无符号除法指令 DIV OPRD

有符号除法指令 IDIV OPRD

若 OPRD 是字节数,则执行 AX/OPRD

若 OPRD 是双字节数,则执行 DXAX/OPRD

指令要求被除数是除数的双倍字长。若商超出累加器的容量,作为除数为零处理,产生类型 0 中断。

AL= 商AH= 余数

AX= 商DX= 余数

Page 19: 3.4  算术运算类指令

19

字节到字的扩展指令

格式: CBW

操作:将 AL 内容扩展到 AX

规则:若最高位 =1 ,则执行后 AH=FFH

若最高位 =0 ,则执行后 AH=00H

Page 20: 3.4  算术运算类指令

20

字到双字的扩展指令 格式: CWD

操作:将 AX 内容扩展到 DX AX

规则:若最高位 =1 ,则执行后 DX=FFFFH

若最高位 =0 ,则执行后 DX=0000H

Page 21: 3.4  算术运算类指令

21

字位扩展指令例 MOV AL , 44H

Page 22: 3.4  算术运算类指令

22

CBW ;执行结果

MOV AX , 0AFDEH

CWD

MOV AL , 86H

CBW

Page 23: 3.4  算术运算类指令

23

3.4.5 二 ---十进制调整指令

组合型 BCD 码:一个字节表示两位十进制数。 如 25 :( 0010 0101 ) BCD

47 : ( 0100 0111 ) BCD

非组合型 BCD 码:一个字节表示一位十进制数,且用该字节的低 4 位表示,高 4 位任意。

如 25 :( 0000 0010 ) BCD ( 0000 0101 ) BCD

组合型 BCD 码加法调整指令: DAA 非组合型 BCD 码加法调整指令: AAA

Page 24: 3.4  算术运算类指令

24

二—十进制减法调整指令

AAS; 非组合型 BCD 减法调整,紧跟在减法指令后。

DAS ; 组合型 BCD 减法调整指令。

Page 25: 3.4  算术运算类指令

25

BCD码乘法调整指令 格式: AAM ;跟在乘法指令后,把 AX 中的

两个未组合的十进制数相乘的结果,进行校正。 校正操作: AL/0AH AH

AL%0AH AL

BCD 码除法调整指令:AAD ;在除法指令之前进行调整。将 AX 中的 2

位非压缩的 BCD 码调整为二进制数,保留在 AL中。 P121 例。