汇编--算术运算类指令 加减乘除 十进制调整指令 XLAT

加法指令:ADD、ADC、INC(increasing)

减法指令:SUB、SBB、DEC(auto-decrement、NEG、CMP

乘法指令:MUL(multiplication)、IMUL

除法指令:DIV、IDIV

十进制调整指令:DAA、DAS、AAA、AAS、AAM、AAD

NEG 求补,按位求反+1   -15的而进制

负数在计算机里面用补码表示

NEG AX   可以把负数变成正数

加法指令: ADD  ADC   INC

注意: 除 INC 指令不影响 CF 标志外,均对条件标志位有影响。

JE的功能不是比较2个数,而是看ZF标志以决定转移与否。比较是CMP指令

结果为0   ZF=1       结果为负   SF=1

CF 位表示 无符号数 相加的溢出。 

OF 位表示 带符号数 相加的溢出。  

  • 两个操作数符号相同,而结果符号与之相反     
  • 两个操作数符号相反,而结果的符号与减数相同

减法指令: SUB(subtract)   SBB     SBB指令主要与SUB配合,实现多精度减法运算    DEC(decrement)

INC指令和DEC指令都是单操作数指令, 主要用于对计数器和地址指针的调整

 CMP指令执行的功能与SUB指令相同,但结果不回送目的操作数

无符号数乘法指令:   MUL     IMUL

  • 字节操作数 ( AX ) = ( AL ) * ( SRC )
  • 字操作数 ( DX , AX ) = ( AX ) * ( SRC )

乘法指令利用OF和CF判断乘积的高一半是否具有有效数值

MUL指令—— 若乘积的高一半(AH或DX)为0,   则OF=CF=0;否则OF=CF=1

IMUL指令——若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1

乘法指令对其他状态标识没有定义

对标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也不知道是0还是1)

对标志没有影响:指令执行不改变标志状态

DIV  是无符号数除法指令;完成两个无符号数相除

IDIV 是有符号数除法指令,完成两个有符号数相除

无符号数除法指令: DIV SRC 执行操作:

  字节操作:( AL ) = ( AX ) / ( SRC ) 的商

        ( AH ) = ( AX ) / ( SRC ) 的余数

  字操作 : ( AX ) = ( DX , AX ) / ( SRC ) 的商

        ( DX ) = ( DX , AX ) / ( SRC ) 的余数

注意:

  • AX ( DX , AX ) 为隐含的被除数寄存器。
  • AL ( AX ) 为隐含的商寄存器。
  • AH ( DX ) 为隐含的余数寄存器。
  • SRC 不能为立即数。
  • 对所有条件标志位均 无定义。

除法指令对标志没有定义 除法指令会产生结果溢出

除法错中断   被除数远大于除数时候,就会产生编号为0的溢出。

求补指令: NEG    OPR     求补运算也可以表达成:将操作数按位取反后加1,忘记加1了。

NEG 指令对CF/OF的影响    求补后 

  • 操作数为   0   CF=0  否则为 1
  • 操作数为  -128 (字节运算)或 操作数为 -32768 (字运算)   OF=1  否则为1

 

mov bx,0040h

mov al,03h

xlat

指令执行后AL=33H

汇编--算术运算类指令 加减乘除 十进制调整指令 XLAT_第1张图片

换码指令没有显式的操作数,但使用了BX和AL;

 

你可能感兴趣的:(汇编--算术运算类指令 加减乘除 十进制调整指令 XLAT)