算术运算指令

本文详细介绍了计算机指令集中的类型扩展操作(如CBW和CWD)、加法(ADD和ADC)、减法(SUB和SBB)、乘法(MUL和IMUL)、除法(DIV和IDIV)以及BCD码的十进制调整(DAA和DAS)指令,着重于它们的格式、操作和溢出处理。
摘要由CSDN通过智能技术生成

一、类型扩展指令

目的:解决操作数长度一致的问题

1、CBW 字节扩展成字

当执行CBW时,默认将AL寄存器的内容扩展到AX寄存器中,,扩展方法为符号扩展,即如果AL的最高位为1(负数),则CBW指令扩展时使AH=FFH,如果AL的最高位为0(正数),则CBW指令扩展时使AH=00H。

2、CWD 字扩展成双字

当执行CWD时,默认将AX寄存器的内容扩展到(DX,AX)中,其中DX存放双字中的高位,AX存放双字中的低位。如果AX的最高位为1(负数),则CWD指令扩展时使DX=FFFFH,如果AX的最高位为0(正数),则CWD指令扩展时使DX=0000H。

二、加法指令

1、ADD 加法指令

(1)格式:ADD DST,SRC

         操作:(DST)<-(DST)+(SRC)

注意:加法指令执行后会影响标志寄存器中的CF和OF标志位

(2)如果是无符号数,则加法运算的结果是否正确,参看标志寄存器中的CF位,如果CF=0,表明结果正确;如果CF=1,表明结果是错误的。如果参与运算的数据是有符号数,则不需要考虑CF的结果。

(3)8位二进制数可以表示的十进制数的范围是:无符号数0~255,有符号数-128~+127。                           当无符号数发生溢出时,CF=1;当有符号数发生溢出时,OF=1

2、ADC 带进位加法指令

(1)格式:ADD DST,SRC

         操作:(DST)<-(DST)+(SRC)+CF【CF为运算前CF标志位的值】

(2)为实现双精度加法,必须用两条指令分别完成低位字和高位字的加,并在高位字相加时使用  ADC指令,从而把低位字相加时产生的进位值加进来。这时,不论是无符号数还是有符号数,低位字相加时无需考虑溢出,只有在高位字相加时所产生的CF位和OF位才是判断是否溢出的依据。

3、INC 加1指令

格式:INC OPR

操作:(OPR)<-(OPR)+1【该指令不影响CF标志位】

三、减法指令

1、SUB 减法指令

(1)格式:SUB DST,SRC

         操作:(DST)<-(DST)-(SRC)

(2)与加法运算相反,当参与运算的两个有符号的符号相同时,其结果无论是正数或负数,都不会发生溢出。当两个有符号数的符号相反时则可能发生溢出,此时需要根据OF标志位判断有符号数的减法结果是否溢出。

2、SBB 带借位减法指令

(1)格式:SBB DST,SRC

         操作:(DST)<-(DST)-(SRC)-CF

(2)为实现双精度算法,必须使用两条指令分别完成低位字和高位字的减法,并在高位字做减法时使用SBB指令,从而把低位字减法时产生的借位加进来。这时,不论是无符号数还是有符号数,低位字做减法时无需考虑溢出,只有在高位字做减法时所产生的CF位和OF位才判断是否溢出的依据。

3、DEC 减1指令

格式:DEC OPR

操作:(OPR)<-(OPR)-1【该指令不影响CF标志位】

4、NEG 求补指令(求相反数)

格式:NEG OPR

操作:(OPR)<- -(OPR)【只有当OPR位0时,CF=0,其他情况CF=1】

5、CMP 比较指令

格式:CMP OPR1,OPR2

操作:(OPR1)-(OPR2)【只产生标志位,不回送结果】

四、乘法指令

1、MUL 无符号数乘法指令

格式:MUL SRC

操作:当操作数为字节时,(AX)<-(AL)*(SRC)                                                                                             当操作数为字时,(DX,AX)<-(AX)*(SRC)

2、IMUL 有符号数乘法指令

化二进制

:SRC可以是寄存器或变量,但不能是立即数,因为立即数的长度是不明确的

五、除法指令

1、DIV 无符号数除法指令

格式:DIV SRC

操作:SCR为字节时,(AL)<-(AX)/(SRC)的商,(AH)<-(AX)/(SCR)的余数。                                               SCR为字时,(AX)<-(DX,AX)/(SRC)的商,(DX)<-(DX,AX)/(SCR)的余数。

2、IDIV 有符号数除法指令

最终商的符号应是两个操作数符号的异或,而余数的符号和被除数符号一致。

被除数长度应为除数长度的两倍,余数放在目的操作数的高位,商放在目的操作数的低位。

SRC不能是立即数。

:(1)当除数是字节类型时,除法指令要求商为8位。此时如果被除数的高8位绝对值>=除数的  绝对值,则商会产生溢出。(2)当除数是字类型时,除法指令要求商为16位。此时如果被除数的高16位绝对值>=除数的绝对值,则商会产生溢出。

六、BCD码的十进制调整指令

二-十进制(BCD码)是4位二进制编码表示一位十进制数的编码。

1、DAA 加法的十进制调整指令

格式:DAA

操作:加法指令中,以AL为目的操作数,当加法运算结束后,使用本指令可以把AL中的和调整为正确的BCD码格式。

(1)如果AF=1,则AL=AL+6H;     

(2)如果CF=1,则AL=AL+60H,CF=1。

2、DAS 减法的十进制调整指令

格式:DAS

操作:减法指令中,以AL为目的操作数,当减法运算结束后,使用本指令可以把差调整为BCD码格式。                                                                                                                                   

(1)如果AF=1,则AL=AL-6H,AF=1;                                                                                           

(2)如果CF=1,则AL=AL-60H,CF=1。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值