微机原理--第三章(4)算数运算指令(2)

(3)乘法指令

  • 无符号数的乘法指令MUL
    MUL SRC
    ;无符号字节乘法AX←(AL)*(SRC)
    ;无符号字乘法DX.AX←(AX)*(SRC)
  • 有符号数的乘法指令IMUL
    IMUL SRC
    ;有符号字节乘法AX←(AL)*(SRC)
    ;有符号字乘法DX.AX←(AX)*(SRC)

  • 乘法指令对标志的影响
    乘法指令OF和CF标志:
    MUL指令——若乘积的高一半(AH/DX)为0,则OF=CF=0;否则OF=CF=1
    IMUL指令——若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1
    乘法指令对其他状态标志没有定义

    对标志没有定义:指令执行后标志是任意的、不可预测
    对标志没有影响:指令执行不改变标志状态

(4)除法指令

  • 无符号数的除法指令DIV
    DIV SRC
    ;无符号字节除法(AX)/(SRC) AL←商,AH←余数
    ;无符号字除法(DX.AX)/(SRC) AX←商,DX←余数
  • 有符号数的除法指令IDIV
    IDIV SRC
    ;有符号字节除法(AX)/(SRC)
    AL←商,AH←余数
    ;有符号字除法(DX.AX)/(SRC)
    AX←商,DX←余数

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

  • 扩展指令CBW、CWD
    CBW
    ;将字节扩展成字的指令
    ;将AL中的符号位扩展到AH中
    CWD
    ;将字扩展成双字的指令
    ;将AX中的符号位扩展到DX中

  • 利用符号扩展指令得到除法指令所需要的倍长于除数的被除数

  • 对无符号数除法应该采用直接使高8位或高16位清0的方法,获得倍长的被除数

(5)BCD码指令

  • 非组合BCD码加法调整指令AAA
  • 组合BCD码加法调整指令DAA
  • 非组合BCD码减法调整指令AAS
  • 组合BCD码减法调整指令DAS
  • 非组合BCD码乘法调整指令AAM
  • 非组合BCD码除法调整指令AAD

  • 非组合BCD码(非压缩BCD码): 用8个二进制位表示一个十进制位,只用低4个二进制位表示一个十进制位0~9,高4位任意,通常默认为0。

  • 组合BCD码(压缩BCD码): 就是通常的8421码;它用4个二进制位表示一个十进制位,一个字节可以表示两个十进制位,即00~99。

  • 组合BCD码加法调整指令DAA
    (ADD AL,SRC)或(ADC AL,SRC)

  • DAA ;AL←将AL的加和调整为组合BCD码
  • 使用DAA指令前,应先执行以AL为目的操作数的加法指令
  • DAA对OF标志无定义,按结果影响其他标志

  • 组合BCD码减法调整指令DAS

    • (SUB AL,SRC)或(SBB AL,SRC)
      DAS ;AL←将AL的减差调整为组合BCD码
    • 使用DAS指令前,应先执行以AL为目的操作数的减法指令
    • DAS指令对OF标志无定义,按结果影响其他标志

你可能感兴趣的:(算数运算指令)