第3节 算术运算指令
推荐给好友
打印
加入收藏
更新于2009-06-01 10:42:39

 


1.加法指令

(1)加法 ADD d, s ;d<--d + s




注:

  • 该指令影响标志位
  • 该指令适合有符号数和无符号数的运算

例1:MOV DX, 4652H
          ADD DX, 0f0f0h
无符号数的溢出用进位标志 c 判断。


执行后: (DX) = 3742H 
     z=0           s = 0      c= 1         o = 0
对无符号数    溢出    结果错
对有符号数 不溢出 结果正确

问: 对带符号数和无符号数怎样判断是否溢出?

(2)带进位加 ADC d, s ;d<--d+s+C
功能: 主要用于多字节运算




注:

  • 该指令影响标志位
  • 该指令适合有符号数和无符号数的运算

例:在内存的First和Secontd开始的区域中分别存放着2F365H和 5E024 H两个数,要求求其和,并存入Third中。






(3)加1 INC d ;d<--d+1
Rc---M
用于在循环中修改地址指针及循环次数等。
注:该指令影响标志位


例: INC BX
INC [SI]
注意:
(1) 该指令将操作数视为无符号数;
(2) 该指令不影响 进位标志 C

2.减法指令

(1)减法 SUB d, s ;d<--d - s




注:

  • 该指令影响标志位
  • 该指令适合有符号数和无符号数的运算

(2)带借位减法 SBB d, s ;d<--d - s- C
功能: 主要用于多字节运算




注:

  • 该指令影响标志位
  • 该指令适合有符号数和无符号数的运算

注意: 同加法指令      有符号数的溢出用溢出标志 O判断;
                                        无符号数的溢出用进位标志 C 判断。

例: SUB DH, [BP+4]                    (DH)=41H
                                                           (SS)= 0000H (BP)=00E0H
                                                           (00E4H)= 4AH


结果: (DH)=0E7H
               S=1 Z=0 C=1 O=0
              如果为有符号数则结果正确(无溢出)
              如果为无符号数则结果错误(有溢出)

例3: 双精度数运算 W=X+Y+24-Z


(3)减1 DEC d ;d<--d-1
Rc---M
用于在循环中修改地址指针及循环次数等。
注:该指令影响标志位

例: DEC BX
          DEC [SI]

注意: (1) 该指令将操作数视为无符号数;
              (2) 该指令不影响 进位标志 C

(4)取反加1 NEG d ;d<--/d+1
d=Rc----M
注意: 该指令影响 标志位


(5)比较 CMP d, s ; d – s




该指令影响标志位
(1)该指令同SUB , 但其不保存运算结果;
(2) 该指令后面通常跟一条转移指令,根据标志位产生不同的程序分支

比较指令主要用于两个数之间的关系:大、小、相等。
如:A, B
1. 比较相等。 只要看Z 标志。Z=1——相等
                                                      Z=0——不相等。
2. 比小大小。
分两种情况。

  • 无符号数 看进(借)位C 标志。C=1,有借位,则 A<B
                                                              C=0,无借位,则 A>B
  • 带符号数

8088中有几条用于判断有符号数大小的转移指令,如:
JG / JNLE 大于则转移 条件为: O⊕ S =0 且 Z=0
JL / JNGE 小于则转移 条件为: O⊕ S =1

同样有几条用于判断无符号数大小的转移指令,如:
JA / JNBE 高于则转移 条件为:              C=0 且 Z=0
JBE / JNA 低于或等于则转移 条件为: C=1 或 Z=1


3.乘法指令

(1)无符号乘法 MUL s ;AX<-- AL * s
                                        ;DX AX<-- AX * s
s=Rc---M


注:

  • 该指令影响标志位
  • 若结果的高半部分(字节 相乘为AH, 字相乘为DX)
    为0 则 C=0,O=0
    为1 则 C=1,O=1

(2)带符号乘法 IMUL s ;AX <--AL * s
                                        ;DX AX<-- AX * s
s=Rc---M


注:

  • 该指令影响标志位
  • 若结果的高半部分不是低半部分的符号扩展的话,
    则 C=1,O=1
    否则 C=0,O=0

符号扩展:


例: MOV AL, 0B4H
          MOV BL, 11H
          MUL BL

4.除法指令

(1)无符号除法 DIV s
;AH(余),AL(商)<-- AX/s ,s为字节(8位)
;DX(余),AX(商)<-- DX AX / s ,s为字(16位)
s=Rc---M

注:

  • 该指令不影响标志位
  • s的类型决定是字或字节相除

(2)有符号除法 IDIV s
;AH(余),AL(商)<-- AX/s ,s为字节(8位)
;DX(余),AX(商)<-- DX AX / s ,s为字(16位)
s=Rc---M

注:

  • 该指令不影响标志位
  • s的类型决定是字或字节相除
  • 有符号除之前要进行符号位扩展,用CBW,CWD

(3)字节到字符号位扩展 CBW
;AH<-- AL符号位, 即AL7=0时,AH=0; AL7 =1, AH=0FFH

(4)字到双字符号位扩展 CWD
;DX<-- AX符号位, 即AX15=0时,DX=0; AX15 =1, DX=0FFFFH
该指令不影响标志位

5.十进制调整指令

(1). 十进制数的表示
BCD码 —— 用4位二进制编码的十进制数。


(2). 调整原理
以加法调整为例。


不同的运算指令的调整方法不同,但道理是一样的。

(3). 调整指令
加法: DAA     压缩的BCD码加法十进制调整指令。
              AAA     非压缩的BCD码加法十进制调整指令。
减法: DAS    压缩的BCD码减法十进制调整指令。
              AAS     非压缩的BCD码减法十进制调整指令。
乘法: AAM     非压缩的BCD码乘法十进制调整指令。
除法: AAD     非压缩的BCD码除法十进制调整指令。

(a)压缩BCD码加法调整指令 DAA




(b)压缩BCD码减法调整指令 DAS




(c)非压缩BCD码加法调整指令 AAA




结果在AH AL中,以非压缩BCD码形式存贮

(d)非压缩BCD码减法调整指令 AAS




结果在AH AL中,以非压缩BCD码形式存贮

(e)非压缩BCD码乘法调整指令 AAM
; AH<-- AL/10的商,AL<-- AL/10的余数


结果在AH AL中,以非压缩BCD码形式存贮

(f)非压缩BCD码除法调整指令 AAD
; AL<-- AH *10 + AL
AH中放非压缩BCD码,AL中放非压缩BCD码,先进行AAD,把它变为二进制数据在AL中,之后进行DIV运算。

 

上一节                    下一节

相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.