目录
带进位加ADC和减SBB指令
(1)带进位的加指令
指令格式:ADC DEST,SRC
功能:与ADD相同,相加时要加上CF进位的当前值。
注意事项:DEST、SRC不能同时为存储器mem,SRC可以是立即数imm,运算结果对状态标志位有影响。
(2)带进位的减指令
指令格式:SBB DEST,SRC
功能:与SUB功能相同,相减时还应减去CF进位的当前值。
注意事项:DEST、SRC可以是存储器mem或寄存器reg,但不能同时为存储器,运算结果对状态标志位有影响。
(3)带进位加减例题
比较指令CMP
指令格式:CMP OPR1,OPR2; OPR1-OPR2结果影响标志位。
功能:做两个数的比较,与减法指令一样执行opr1-opr2操作,但是差值不回送目的操作数,只是根据相减的结果做出判断。
注意事项:OPR1、OPR2可以是存储器mem或寄存器reg,但是不能同时为存储器mem,OPR2可以是立即数imm,运算结果对状态标志位有影响。
比较结果有三种可能:AX>BX AX<BX AX=BX。
例题
增量INC和减量DEC指令
(1)语法格式:INC reg/mem。 DEC reg/mem。
(2)INC reg/mem 对指定的操作数进行加1操作,其操作数可以是任意一个通用寄存器,也可以在内存单元中,该指令影响状态标志位,但是不影响CF。
(3)DEC reg/mem 对指定的操作数进行减1操作,操作数可以是任意一个通用寄存器,也可以在内存单元中,减1时,把操作数看作为无符号的二进制数,该指令影响状态标志位,但是不影响CF。
(4)例题求5个序数之和
求补指令NEG
语法格式:NEG reg/mem
注意事项:如果是存储器mem需要指明它是字操作还是字节操作。
例题求补运算
符号扩展指令CBW和CWD
格式:CBW是将AL中的符号位扩展到AH中,形成一个字AX。 CWD是将AX中的符号位扩展到DX中,形成双字(DX.AX)
注意事项:CBW表示将AL中的符号位的数扩展到或者叫覆盖到AH,即根据AL中的D7位来扩展,
CWD表示将AX中符号位数扩展到DX中,即根据AX的D15位来扩展。
乘法指令MUL和IMUL
(1)无符号数乘法指令MUL
格式:MUL SRC ;(AX)(AL)×(opr)字节乘法
(DX,AX)(AX)×(opr)字乘法
要求:字节运算时,目的操作数也就是被乘数必须是累加器AL,做乘法运算时要先把乘数设置好,被乘数和乘数之间是隐含的关系、都是无符号数,乘积会存放在寄存器AX中。
字运算时,目的操作数必须是累加器AX,乘积在寄存器DX,AX中,源操作数src不允许使用立即数。
(2)有符号数乘法指令IMUL
格式:IMUL SRC ;(AX) (AL)×(opr)字节
;(DX,AX) (AX)×(opr)字
要求:同无符号数。
(3)乘法指令运算结果影响状态标志,但对OF、CF有特殊的定义,以下是助记规则。
除法指令DIV和IDIV
(1)无符号除法指令DIV(被除数和结果隐含)
格式:DIV SRC;
字节操作:
(AX)(AH)/(SRC)除法余数
(AX)(AL)/(SRC)除法的商
字操作:
(DX,AX) (AX)/(SRC)是除法的商
(DX,AX)(DX)/(SRC)是除法的余数
(2)有符号数除法指令IDIV(被除数和结果隐含)
格式:IDIV SRC;
字节操作:与无符号一致。
字操作:与无符号一致。
需要注意的点:
(1)除数为0,会产生0型中断
(2)除法指令运算结果对标志状态位无定义
(3)除法指令要求是字操作时,被除数是必须是32位、除数是16位,商和余数是16位;字节操作时,被除数必须是16位,除数是8位,商和余数是8位,所以就是被除数必须大于除数。
(4)有符号与无符号除法完成的操作都是相同的,只是做有符号数时,操作数是有符号的,得到的商和余数也是有符号的,余数的符号同被除数符号相同。