一、加法指令
1.ADD 加法指令
格式:ADD 目的操作数,源操作数
功能:目的操作数 + 源操作数 —>目的操作数
例如:ADD AL,BL; AL + BL —> AL 寄存器中
2.ADC 带进位的加法指令
格式:ADC 目的操作数,源操作数
功能:目的操作数 + 源操作数 + CF(进位标志位) —>目的操作数
例如:MOV AL,0; 0 —> AH
MOV AL,92H; 92H—>AL
ADD AL,86H; 92H + 86H = 18H—>AL,CF = 1
ADC AH, 0; AH + 0 + CF = 0 + 0 + 1 —> AH,即01H—>AH
3.INC加 1 指令
格式:INC 操作数
功能:操作数加1,结果送操作数。操作数可以是任意一个8位或16位的通用寄存器或存储单元,不能是立即数。
例如:
INC DI; DI + 1 —> DI
INC CX; CX + 1 —> CX
说明:除指令INC对标志位CF不影响外,其他加法指令对标志位的影响定义如下:
CF |
两个数相加,最高有效位有进位时,即字节操作超过无符号数的范围0~255,字运算超出无符号的范围0~65535时,CF = 1,否则CF = 0.故两个无符号数相加时,可用CF的值来判断是否超出了无符号数的表示范围,如果CF =1表示此无符号数加法运算结果发生了溢出 |
PF |
运算结果以二进制数表示时,若“1”的个数为偶数时PF=1,否则为0 |
AF |
运算中D3向D4有进位时AF = 1,否则为0 |
ZF |
运算结果为0时,ZF=1,否则为0 |
SF |
运算结果最高位为1时,SF=1,否则为0 |
OF |
当两个操作数的符号相同,而相加结果的符号与操作数的符号相反时,OF=1,否则OF=0。该标志位来判断符号数相加时的结果的溢出 |
二、减法指令
1.SUB减法指令
格式:SUB 目的操作数,源操作数
功能:目的操作数 - 源操作数 —> 目的操作数
例如:SUB AL,BL; AL - BL —> AL
2.SBB带借位的减法指令
格式:SBB目的操作数,源操作数
功能:目的操作数 - 源操作数 - CF —> 目的操作数
3.DEC减1指令
功能:该指令将操作数的内容减1后作为现在的操作数,不影响CF标志位
例如:DEC DI; DI - 1—>DI
DEC CX; CX - 1—>CX
注意:减法指令对标志位的影响与加法指令相似,若被减数小于减数,则不够减,要产生借位,即CF = 1,否则CF = 0。 若两个符号相反的数进行减法运算,即同号数相加,如果OF = 1,表示有溢出,否则OF = 0。其他标志位定义不变
4.求补指令(影响标志位)
格式:NEG 操作数
功能:0 - 操作数的内容后结果回送操作数
例如:MOV DI,05H
DEG DI ; 0 - DI = 0 - 05H = OFBH —> DI
对80H或8000H取补时,操作数没有变化,但OF=1(0 - 80H = 80H,负号变正号就是溢出)
对CF影响比较特殊,只要操作数不是0,总是使CF=1
5.CMP比较指令
格式:CMP 目的操作数,源操作数
功能:该指令与减法指令相似,执行时目的操作数与源操作数相减,但不把减得的结果存入目的操作数,只根据结果设置标志位(AF、CF、OF、PF、SF、ZF)。即源操作数与目的操作数均保持原值不变。
目录
一、加法指令
1.ADD 加法指令
2.ADC 带进位的加法指令
3.INC加 1 指令
二、减法指令
1.SUB减法指令
2.SBB带借位的减法指令
3.DEC减1指令
4.求补指令(影响标志位)
5.CMP比较指令
三、符号扩展指令(不影响标志位)
四、乘法指令(运算结果只影响CF、OF)
1.MUL 无符号数乘法
2.IMUL 带符号数乘法指令
五、除法指令(运算结果只影响CF、OF)
1.DIV 无符号数除法指令
2.IDIV 带符号数除法指令
三、符号扩展指令(不影响标志位)
,0操作数
CBW ; 字节扩展成字,将AL中的符号位扩展到AH
CWD ; 字扩展成双字,将AX中的符号位扩展到DX
如果AL的最高位1(负数),则CBW指令扩展时使AH = 0FFH,如果AL的最高位为0(正数),则CBW指令扩展时使AH = 00H。
如果AX的最高位为1(负数),则CWD指令扩展时DX = 0FFFFH,如果AX的最高为0(正数),则CWD指令扩展时使DX=0000H。
四、乘法指令(运算结果只影响CF、OF)
1.MUL 无符号数乘法
格式:MUL SRC
操作:操作数为字节时,AX <— AL * SRC
当操作数为字时,DX,AX <— AX * SRC
2.IMUL 带符号数乘法指令
格式:IMUL SRC
在乘法指令中,目的操作数必须是累加器(AX),不必在指令中写出。两个相乘的数必须长度相同,目的操作数长度是乘数的两倍,显然不会出现溢出。SRC不能是立即数,和加减法指令不同的是,作乘法时需要考虑是无符号数还是带符号数,而选择不同的指令。
运算结果只影响CF、OF
对于MUL,若字节型数据相乘AH=0,或字数据相乘之积DX=0,则CF=OF=0,否则CF=OF=1
对于IMUL,若字节相乘,AH是1还是0取决于AL的最高位。如果为1,则CF=OF=1,否则为0.若字相乘,DX是1还是0取决于AX的最高位。如果为1,则CF=OF=1,否则为0
五、除法指令(运算结果只影响CF、OF)
要求被除数是除数的双倍字长。
操作数为8位:AX / 操作数 = AL存商,AH存余数
操作数为16位:(DX、AX) / 操作数 = AX存商,DX存余数
余数放在目的操作数的高端,商放在目的操作数的低端。
余数的符号与被除数相同
SRC不能是立即数
除数为0或商超过规定的范围时,将产生0号中断(OF=1)
带符号除法运算中,被除数位数不够是,则需将被除数扩展到所需的位数
1.DIV 无符号数除法指令
格式:DIV SRC文章来源:https://www.toymoban.com/news/detail-434969.html
2.IDIV 带符号数除法指令
格式:IDIV SRC 文章来源地址https://www.toymoban.com/news/detail-434969.html
到了这里,关于【微机原理】汇编指令之算数运算类指令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!