一、类型扩展指令
目的:解决操作数长度一致的问题
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。