目录 上一页 下一页 下一章

第10章 细节补充 -283-

助记符:IMUL(Signed Multiple)
用 途:计算两个带符号数相乘的结果
格 式:IMUL 寄存器
    IMUL 存储单元
执 行:累加器与操作数相乘,16位的结果保存于AX寄存器中,32位结果保
    存于DX-AX中。
  带符号数的除法指令是"IDIV",这两个指令除了能处理符号之外其它方面与MUL/DIV相同,在此不再过多讨论。
  (3)逻辑操作指令
  基本的逻辑操作有四种,与(AND)、或(OR)、异或(XOR)和非(NOT)。前三种逻辑操作在前面的章节里已经学习过了,本章讨论的"非"操作可以说是四种逻辑操作中最简单的一种:
助记符:NOT(Not)
用 途:将操作数的各个位取反
格 式:NOT 寄存器
    NOT 存储单元
执 行:指定的寄存器或存储单元中为1的位均变为0,为0的位均变为1
  (4)移位指令
  移位指令我们已经学习了4个,逻辑左右移位(SHL/SHR)与循环左右移位(ROL/ROR)。8086/88还有两组移位指令--算术左右移位和带进位标志的循环左右移位:
助记符:SAL/SAR(Shift Arithmetic Left/Shift Arithmetic Right)
用 途:完成向左/向右的算术移位
格 式:SAL/SAR 寄存器,1
    SAL/SAR 寄存器,CL
    SAL/SAR 存储单元,1
    SAL/SAR 存储单元,CL
执 行:SAL执行结果与SHL相同,操作数向左移动指定位数,移出的数位进
    入CF标志,同时0由操作数右侧移入;SAR执行时操作数向右移动指
    定位数,移出的数位也进入CF标志,同时最高位(符号位)逐渐向
    右扩展。
  SAR指令主要用于除法运算,每向右移一位就相当于除以2。当然,逻辑右移指令SHL也能当作除法,不过SHL只适用于无符号数除以2,因为从左侧移入的0会使结果总为正数。而SAR指令就能同时适用于带符号数与无符号数的除2运算,因为此指令执行时从操作数左侧移入的不一定是0,而是与操作数的符号一致。
  如果将80H向右移一位,采用逻辑移位指令SHR可以得到结果40H,这相当于将128除以2。而采用算术移位指令SAR就能得到结果0C0H,这才是-128除以2的结果。若把0C0H再除以2,则应用SAR指令可以得到结果0E0H,可以看出符号位是逐渐向右扩展的。
  SAL指令与SHL指令的操作完全一致,这是因为左移操作是不可能保持符号位不变的。这也提醒我们负数是不能用左移位的方式完成乘2运算的。
  指令RCL/RCR与指令ROL/ROR一样用于完成循环移位,不过有一点不同,RCL/RCR可以完成

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章