首页 理论教育 微机原理:算术运算指令

微机原理:算术运算指令

时间:2023-11-16 理论教育 版权反馈
【摘要】:8806/8088 CPU提供加、减、乘、除四种基本算术运算的指令。对标志位的影响:指令执行结果影响标志位CF、OF、PF、SF、ZF和AF。对其他的运算结果标志未定义。例3-20编程实现有符号数除法运算÷512。

微机原理:算术运算指令

8806/8088 CPU提供加、减、乘、除四种基本算术运算的指令。这些操作都可用于字节或字的运算,也可以用于带符号数或无符号数的运算。带符号数的运算都采用补码形式表示。另外还提供了各种十进制调整操作,便于十进制运算。

1.加法指令

(1)加指令

指令格式:ADD OPD,OPS

功能:(OPS)+(OPD)→OPD,即完成两个操作数相加,结果送至目的地址,而源地址中的内容并不改变。

对标志位的影响:加法指令运算结果将影响标志位CF、OF、PF、SF、ZF和AF。

例3-14设(AX)=OFFFDH(即-3的补码),说明指令ADD AX,-7FFFH的执行结果。

执行:(AX)+[-7FFFH]=OFFFDH+800lH=7FFEH

执行后:(AX)=7FFEH

两负数相加,结果为正,运算产生了溢出,结果是错误的,因而OF=l。又由于从最高位向前产生了进位,所以CF=l。

(2)带进位加指令

指令格式:ADC OPD,OPS

功能:(OPD)+(OPS)+CF→OPD,即完成两个操作数以及指令执行前进位标志位CF三者相加,结果送至目的地址,而源地址中的内容并不改变。

对标志位的影响:带进位加法指令运算结果将影响标志位CF、OF、PF、SF、ZF和AF。

由于计算机单个字长所能表示的数的范围小、精度低,不能满足多方面的要求,为了解决这个问题,一种有效的方法就是采用两个字(32位)来存放一个数,称为双精度数。当然,也可以根据需要用更多的字或字节来存放一个数,这就是多倍精度数。带进位加指令ADC为多倍精度数的加运算提供了方便。

例3-15 两个双精度数相加。

(3)加1指令

指令格式:INC OPD

功能:(OPD)+l→OPD

对标志位的影响:指令执行结果不影响进位标志CF,影响OF、PF、SF、ZF和AF。

例如:

注意:单操作数或形式上的单操作数指令,其操作数不能是立即数,且操作数的类型必须明确。例如INC、DEC、PUSH、POP以及乘、除法指令。

2.减法指令

(1)减指令

指令格式:SUB OPD,OPS

功能:(OPD)-(OPS)→OPD,即完成两个操作数相减,结果送至目的地址,而源地址中的内容并不改变。

对标志位的影响:减法指令运算结果将影响标志位CF、OF、PF、SF、ZF和AF。

例如:

(2)带进位减指令

指令格式:SBB OPD,OPS

功能:(OPD)-(OPS)-CF→OPD,即完成两个操作数相减,同时还要减去指令执行前的进位标志位CF,结果送至目的地址,而源地址中的内容并不改变。

对标志位的影响:带进位减法指令运算结果将影响标志位CF、OF、PF、SF、ZF和AF。

该指令可用于多倍精度数的减运算。

(3)减1指令

指令格式:DEC OPD

功能:(OPD)-l→OPD

对标志位的影响:指令执行结果不影响进位标志CF,影响OF、PF、SF、ZF和AF。

(4)求补指令

指令格式:NEG OPD

功能:将目的操作数的每一位取反(包括符号位)后加1→OPD

对标志位的影响:指令执行结果影响标志位CF、OF、PF、SF、ZF和AF。

说明:这里的求补实际的结果是对原来数值求相反数

(5)比较指令

指令格式:CMP OPD,OPS

功能:(OPD)-(OPS),即进行目的操作数与源操作数减操作,然后根据相减的结果设置标志位,但该结果并不存入目的地址。

对标志位的影响:指令执行结果影响标志位CF、OF、PF、SF、ZF和AF。

该指令执行后,源地址和目的地址中的内容均不改变。在一般情况下,此指令的后面常常是条件转移指令。例如:

上述指令的功能是比较AX与0的关系,如果相等则转移至标号NEXT处。

利用比较指令可判断两个数的大小。应用ZF来判断两个数是否相等,若ZF=1,则两数相等;若ZF=0,则两数不相等。当两个无符号数比较时,应用CF来判断大小,若CF=1,则OPD<OPS;若CF=0,则OPD≥OPS。当两个有符号数比较时,要同时使用OF和SF来判断大小,若OF与SF同号,则OPD≥OPS;若OF与SF异号,则OPD<OPS。

3.乘法指令 (www.xing528.com)

在8086/8088中,乘、除法运算分为无符号数运算和有符号数运算。

(1)无符号数乘指令

指令格式:MUL OPS

功能:字节乘法:(AL)*(OPS)→AX

字乘法:(AX)*(OPS)→DX,AX

对标志位的影响:如果乘积的高位即在AH或DX中包含有乘积的有效位,则CF=OF=1;否则,CF=OF=0。对其他的运算结果标志未定义。

说明:乘运算指令属双操作数指令,但在语句中却只指定源操作数(乘数),而另一个操作数是隐含的,在累加器AL或AX中。另外,参与运算的数和结果均为无符号数。

例3-16编程实现无符号数乘法25×8,结果存放在AX中。

(2)有符号数乘指令

指令格式:IMUL OPS

功能:字节乘法:(AL)*(OPS)→AX

字乘法:(AX)*(OPS)→DX,AX

对标志位的影响:如果乘积的高位(字节相乘指AH,字相乘指DX)不是低位的符号扩展,即AH或DX中包含有乘积的有效位,则CF=OF=1;否则,CF=OF=0。对其他的运算结果标志未定义。

说明:该指令的使用格式与MUL相同,只是参与运算的数和结果均为有符号数。

例3-17 编程实现有符号数乘法(-259)×(+86),结果存放在DX:AX中。

4.除法指令

(1)无符号数除法指令

指令格式:DIV OPS

功能:字节除法:(AX)/(OPS)→AL(商)、AH(余数) 字除法:(DX,AX)/(OPS)→AX(商)、DX(余数)

对标志位的影响:未定义。

例3-18编程实现无符号数除法运算500÷23。

例3-19 编程实现无符号数除法运算1000÷512。

(2)有符号数除法指令

语句格式:IDIV OPS

功能:字节除法:(AX)/(OPS)→AL(商)、AH(余数)

字除法:(DX,AX)/(OPS)→AX(商)、DX(余数)

对标志位的影响:未定义。

说明:商的符号按有符号数除法规则确定(即同号相除为正,异号相除为负),余数的符号与被除数的符号相同。

例3-20编程实现有符号数除法运算(-1000)÷512。

5.符号扩展指令

(1)字节转换为字指令

指令格式:CBW

功能:将AL中的符号扩展到AH中,即若AL的最高位为0,则AH=00H;若AL的最高位为1,则AH=0FFH。

(2)字转换为双字指令

指令格式:CWD

功能:将AX中的符号扩展到DX中,即若AX的最高位为0,则DX=0000H;若AX的最高位为1,则DX=0FFFFH。

6.十进制调整指令

8086/8088提供了一组十进制数调整指令,这组指令在二进制数计算的基础上,给予十进制调整,可以得到十进制的结果。通常表示十进制数使用的BCD码有两种格式,即压缩的BCD码和非压缩的BCD码。

(1)压缩的BCD码调整指令

DAA 加法的十进制调整指令

DAS 减法的十进制调整指令

说明:在对BCD码数使用加、减法指令运算后分别使用以上两条指令进行调整,才能得到正确的结果。

(2)非压缩的BCD码调整指令

AAA 加法的十进制调整指令

AAS 减法的十进制调整指令

AAM 乘法的十进制调整指令

AAD 除法的十进制调整指令

例3-21 编程实现十进制加法运算7+9,用非压缩BCD码表示。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈