算术运算指令
|
ADD(ADD)加法指令 ADD DST , SRC //Byte/Word 执行操作: dst=dst+src 1.两个存储器操作数不能通过ADD指令直接相加, 即DST 和SRC必须有一个是通用寄存器操作数. 2.段寄存器不能作为SRC 和DST. 3.影响标志位Auxiliary Crray Flag ,Carry Flag, Overflow Flag, Parity Flag, Sign Flag 和Zero Flag ,如下所示:
ADC( ADd with Carry)带进位加法指令 ADC DST , SRC //Byte/Word 执行操作: dst=dst+src+CF //与ADD不同之处是还要加上进位标志位的值.
INC ( INCreament) 加1指令 INC OPR //Byte/Word 执行操作: OPR=OPR+1 1.OPR可以是寄存器和存储器操作数, 但不能是立即数和段寄存器 2.影响标志位OF,SF,ZF,PF 和AF,不影响CF.
SUB ( SUBtract ) 不带借位的减法指令 SUB DST , SRC //Byte/Word 执行操作:dst=dst - src 1.DST和SRC寻址方式及规定与ADD相同. 2.影响全部标志位.(判断标志位参见ADD)
SBB ( SuBtract with Borrow) 带借位减法指令 SBB DST , SRC //Byte/Word 执行操作:dst= dst - src - CF
DEC ( DECrement ) 减1指令 DEC OPR //Byte/Word 执行操作:OPR = OPR - 1 //除CF标志位, 其余标志位都受影响.
NEG OPR 执行操作:opr = 0- opr //将操作数按位求反后末位加1.
CMP OPR1 , OPR2 执行操作:OPR1 - OPR2 //与SUB指令一样执行运算, 但不保存结果.
MUL ( unsigned MULtiple ) 无符号数乘法指令 MUL SRC //Byte/Word . 执行操作:Byte => AX= AL *src //字节运算时目的操作数用AL, 乘积放在AX中 Word => DX=AX *src //字运算时目的操作数用AX, DX存放乘积的高位字, AX放乘积的低位字 1.目的数必须是累加器 AX 或AL,指令中不需写出 2. 源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数, 而绝对不允许是立即数或段寄存器.
IMUL (sIgned MULtiple) 有符号数乘法指令 IMUL SRC //与MUL指令相同,但必须是带符号数
DIV ( unsigned DIVide) 无符号数除法指令 DIV SRC //Byte/Word 其中: SRC的规定同乘法指令MUL 执行操作:Byte => AX / src //字节运算时目的操作数在AX中,结果的商在AL中 ,余数中AH中 Word=> DX,AX /src //字运算时目的操作数在DX高位字和AX低位字中,结果的商在AX中 ,余数在DX中 存储器操作数必须指明数据类型:BYTE PTR src 或 WORD PTR src
IDIV (sIgned DIVied) 有符号数除法指令 IDIV SRC //Byte/Word 与DIV指令相同,但必须是带符号数
CBW (Convert Byte to Word) 字节转换为字指令 CBW 执行操作: AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0,则AH=00H,若AL中的D7=1,则AH=FFH.
CWD (Convert Word to Double word) 字转换为双字指令 CWD 执行操作: AX中的符号位(D15)扩展到16位DX中,若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFFH.
当计算机进行计算时,必须先把十进制数转换为二进制数,再进行二进制数运算,最后将结果又转换为十进制数输出. 在计算机中,可用4位二进制数表示一位十进制数,这种代码称为BCD ( Binary Coded Decimal ). BCD码又称8421码,在PC机中,BCD码可用压缩的BCD码和非压缩的BCD码两种格式表示. 压缩的BCD码用4位二进制数表示一个十制数,整个十进数形式为一个顺序的以4位为一组的数串. 非压缩的BCD码以8位为一组表示一个十进制数,8位中的低4位表示8421的BCD码,而高4位则没有意义.
压缩的BCD码调整指令 DAA (Decimal Adjust for Addition) 加法的十进制调整指令 DAA 执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存话在AL寄存器中.
DAS (Decimal Adjust for Subtraction) 减法的十进制调整指令 DAS 执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个压缩的BCD码相减,并氢结果存放在AL寄存器中.
非压缩的BCD码调整指令 AAA (ASCII Adjust for Addition) 加法的ASCII调整指令 AAA 执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并把结果存话在AL寄存器中.
AAS (ASCII Adjust for Subtraction) 减法的ASCII调整指令 AAS 执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并氢结果存放在AL寄存器中. |