第三章 IMB PC机的指令系统和寻址方式 下载本文

·加1 INC OPR

操作:(OPR)←(OPR)+ 1 说明:

·三条指令都可以作字或字节运算,386及其后继机还可进行双字操作。

·除INC指令不影响CF外,运算后都要建立条件标志。

条件标志中,最主的是CF、ZF、SF、OF四个标志位。下面进一步分析CF和OF位设置。 一个8位或16位二进制数,在程序中既可认为是无符号数,也可以认为是带符号数,分析运算溢出有二个条件: (1)加数和被加数都必须同时为无符号数或带符

号数。

(2)程序中用检测不同标志位的方法区别这二类

数运算结果是否溢出。

这二个条件同样适用于减法运算。

8位二进制数加法运算溢出情况分析:P.60(4) 87H + 0F5H = 7CH 执行后 CF = 1 OF = 1 SF= 0 ZF = 0

AF = 0 PF = 0

37

二种情况和都超范围,溢出。 分析:

·看作无符号数相加 87H = 135 F5H = 245

135 + 245 = 380 = 256 + 124 相加后的和为 7CH = 124

将进位CF=1以28 = 256 为权值考虑在内,得到的和是正确的,和为9 位二进制数.

·看作带符号数相加 87H = -121 F5H = -11

87H + F5H = (-121) + (-11) = -132

因为 –132 小于-128 超出范围,产生负溢出, 使和成为正数 7CH,结果错误。 结论:

·CF = 1,表示无符号数运算产生溢出,此时不属于出错,CF所保存的进位值是有用的。在多字节运算中,利用CF位传递低位字节向高位字节的进位。

·OF = 1,表示带符号数运算溢出,结果错误。

例3.45 ADD DX,0F0F0H

38

操作:(DX)←(DX)+(F0F0H) 说明:立即数用十六进制书写,若第一个数是字母,

前面必须加“0”,保证语法正确。 若指令执行前(DX)= 4652H 加法运算:

4652H + F0F0H = 3742H

指令执行后

(DX)= 3742H, ZF = 0 SF = 0 CF = 1 OF = 0

看作带符号数相加,DX值是正数,F0F0H 是负数,正数加负数,和不会溢出。

例3.46 二个双精度数(双字长数)的加法运算 设目的操作数在DX、AX中,DX存放高位字 源操作数在BX、CX中,BX存放高位字。 操作如下图: 15 0 15 0

加数 DX AX

加数 BX CX +

和 DX AX

39

分析:一个双字长数,高位字的最高位是符号位,低位字是无符号数,加法运算先加二个低位字,然后用CF传送进位。

双字加法指令序列为: ADD AX,CX ;(AX)←(AX)+(CX) 低位字相加 ADC DX,BX ;(DX)←(DX)+(BX)+ CF

高位字带进位加

最终的标志位状态由ADC指令执行结果决定。

二、减法指令

·减法 SUB DST,SRC

操作:(DST)←(DST)―(SRC)

·带借位减法 SBB DST,SRC

操作:(DST)←(DST)―(SRC)― CF

·减1 DEC OPR

操作:(OPR)←(OPR)―1 ·求补 NEG OPR

40