乘法指令

  • 无符号乘法
    • 格式:MUL Reg/Mem
    • 功能:显式操作数*隐含操作数(看成无符号数)。
    • 影响标志位:CF和OF

image.png
无符号乘法影响标志位
-如果乘积的高一半位(AH/DX)包含有乘积的有效位,则CF=1,OF=1、否则,CF=0,OF=0 。
-OF=CF=1则说明:
字节字节结果超过了8位
双字节
双字节超过了32位

  • 有符号乘法
    • 格式:IMUL Reg/Mem
    • IMUL Reg,Imm; 808286+
    • IMUL Reg,Ref,Imm ;808286+
    • IMUL Reg,Reg/Mem;808386+
    • 功能:有符号数相乘。
    • 影响标志位:CF和OF

例:
mov al,fe
mov bl,10
imul bl

除法指令

  • 无符号除法指令
    • 格式: DIV Reg/Mem
    • 功能:
    • image.png
  • 有符号除法指令
    • 格式: IDIV Reg/Mem
    • 功能:image.png
  • 除法溢出
    • 被除数远大于除数时,所得的商就有可能超出它所能表达的范围。
    • idiv除法溢出:
      • 字节除时商不在-128~127范围内,或者在字除时商不在-32768~32767范围内。
    • div除法溢出:
      • 8位除法结果大于8位,16位除法运算结果大于16位。
      • 举例:ax=FFFF,bl=FF,div bl
      • 结果相当于FFFF/FF=101,此时AH显然放不下,所以商溢出了。

符号扩展指令

    1. 将字节转换成字指令
      • 语句格式:CBW(convert byte to word)
      • 功能:将AL中的符号扩展至AH中,操作数是隐含且固定的。
  • 将字转换成双字节指令
    • 语句格式:CWD
    • 功能:将AX中的符号扩展至DX中,操作数是隐含且固定的。

逻辑运算

image.png

  • 逻辑与:AND
    • 指令的格式: AND Reg/Mem,Reg/Mem/Imm
    • 受影响的标志位:CF(0),OF(0),PF,SF和ZF(AF无定义)
  • 逻辑或:OR
    • 指令的格式:OR Reg/Mem,Reg/Mem/Imm
    • 受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF未定义)
  • 逻辑非: NOT
    • 指令的格式: NOT Reg/Mem
    • 受影响的标志位:无
  • 异或:XOR
    • 指令的格式:XOR Reg/Mem,Reg/Mem/Imm
    • 受影响的标志位:CF(0)、OF(0)。PF、SF和ZF(AF未定义)
  • image.png
  • TEST 指令
    • 格式:TEST Reg/Mem,Reg/Mem/Imm
    • 作用:执行AND,但是不影响目标操作数。
    • 受到影响的标志位:CF(0),OF(0)、PF,SF和ZF(AF未定义)
    • Eg: test ax,ax
      • //ax为0, 则ZF=0;
      • //ax不为0, 则ZF=1;

移位指令

image.png
image.png

image.png
0001 1110
rol 1 cf = 0
0011 1100
rol 3 cf = 1
1110 0001
image.png

image.png
image.png
image.png

作业

无分支实现求绝对值

  1. ;byte ptr:
  2. xor ax,ax
  3. mov al,imm
  4. cbw ;将al符号位扩展到ah
  5. xor al,ah
  6. sub al,ah
  7. ;word ptr;
  8. mov ax,imm
  9. cwd ;将ax符号位扩展到ah
  10. xor ax,dx
  11. sub ax,dx