您的位置 首页 应用

8086指令系统—算术指令(一)

算术指令包括加、减、乘、除指令,它包括对二进制数进行的算术运算的指令,以及对十进制数(用BCD码表示)运算进行调整的指令。执行算

  算术指令包含加、减、乘、除指令,它包含对二进制数进行的算术运算的指令,以及对十进制数(用BCD码标明)运算进行调整的指令。履行算术指令都会影响条件标志位,条件标志位包含CF、PF、AF、ZF、SF和OF,它们标志算术运算成果的特征。

 ⑴ 加法指令           ⑵ 减法指令
    ADD  加法              SUB  减法
    ADC  带进位加            DEC  减1
    INC  加1               NEG  求补
                       CMP  比较
     

  ⑶ 乘法指令           ⑷ 除法指令
    MUL  无符号数乘法          DIV  无符号数除法
    IMUL 带符号数乘法          IDIV 带符号数除法

  
  ⑸ 符号扩展指令         ⑹ 十进制调整指令
    CBW  字节转换为字          DAA  加法的十进制调整
    CWD  字转换为双字          DAS  减法的十进制调整
                       AAA  加法的ASCII调整
                        AAS  减法的ASCII调整      
                       AAM  乘法的ASCII调整
                       AAD  除法的ASCII调整

  1 加法指令

  ADD dst,src加法指令(addition)
  履行操作: (dst) ← (src)+(dst)

  ADC dst,src带进位加指令(add with carry)
  履行操作: (dst) ← (src)+(dst)+CF

  INC opr加1指令(increment)
  履行操作: (opr) ← (opr)+1

  ADD和ADC指令是双操作数指令,它们的两个操作数不能一起为存储器寻址办法,也就是说,除源操作数为当即数的状况外,源和意图操作数必须有一个是寄存器寻址办法。INC指令是单操作数指令,它可以运用除当即数办法外的任何寻址办法。

  ADD和ADC指令影响条件标志位(也称条件码),INC指令影响除CF外的其它条件码。条件码中最首要的是SF、ZF、CF和OF,加法运算对这四个条件码的设置办法如下:
  SF=1 加法成果为负数(符号位为1)
  SF=0 加法成果为正数(符号位为0)
  ZF=1 加法成果为零
  ZF=0 加法成果不为零
  CF=1 最高有用位向高位有进位
  CF=0 最高有用位向高位无进位
  OF=1 两个同符号数相加(正数+正数,或负数加负数),成果符号与其相反
  OF=0 不同符号数相加时,或同符号数相加,成果符号与其相同

  计算机在履行运算时,并不差异操作数是带符号数仍是无符号数,一概按上述规矩设置条件码,因而,程序员要清楚其时处理的是什么类型的数据。例如,当加法运算成果的最高有用位为1时,机器将SF置1。假如参与运算的是两个带符号数,那么和的最高有用位是符号位,SF置1阐明成果是一个负数。假如参与运算的是两个无符号数,那么和的最高有用位也是数值位,此刻SF置0或置1都失去了标明正负数的含义。

  对带符号数和无符号数,它们标明成果溢出的条件标志位也是不同的。上述OF位的设置条件明显只契合带符号数的溢出状况,OF=1标明运算成果是过错的。而无符号数溢出(运算成果超出了有限位的标明规模)时,表现为最高有用位发生进位,因而,CF=1是无符号数溢出的标志。别的,在双字长数运算时,低位字相加设置的CF,阐明低位字向高位字有无进位的状况。

 例MOV  BX,9B8CH  ; (BX)=9B8CH
         ADD  BX,6478H  ; now (BX)=0000H
         9B8A     1001 1011 1000 1010
        + 6476     + 0110 0100 0111 0110
       ———–  ————————–
       1← 0000    1← 0000 0000 0000 0000

  条件码设置: SF=0  最高有用位(D15)为0
         ZF=1  成果为0
         CF=1  最高有用位向高位有进位
         OF=0  不同符号数相加,不发生溢出

  例编写履行双精度数(DX,CX)和(BX,AX)相加的指令序列,DX是意图操作数的高位字,BX是源操作数的高位字。指令履行前:
      (DX,CX)= A248 2AC0H,(BX,AX)= 088A E25BH。

   指令序列:  ADD  CX, AX  ;(CX)= 0D1BH
         ADC  DX, BX  ; now,(DX)=0AAD3H

   履行ADD指令:
         2AC0     0010 1010 1100 0000
        + E25B    + 1110 0010 0101 1011
       ———   ————————
       1← 0D1B   1← 0000 1101 0001 1011

  条件码设置: SF=0  最高有用位(D15)为0,无符号位含义
         F=0  成果不为0
         CF=1  最高有用位向高位有进位
         OF=0  加数最高位别离为0、1,溢出方位0,OF对低位字无溢出含义

  履行ADC指令:
         A248     1010 0010 0100 1000
         088A     0000 1000 1000 1011
        +   1     +          1←CF
       ———-  —————————-
         AAD3     1010 1010 1101 0011

  条件码设置: SF=1  最高有用位(D31)为1,对带符号数运算标明成果为负
         ZF=0  成果不为0
         CF=0  最高有用位向高位无进位
         OF=0  成果符号与操作数相同,未发生溢出

  2 减法指令

  SUB dst,src减法指令(subtract)
  履行操作: (dst) ← (dst)-(src)

  SBB dst,src带借位减法指令(subtract with borrow)
  履行操作: (dst) ← (dst)-(src)-CF

  DEC opr减1指令(decrement)
  履行操作: (opr) ← (opr)-1

  CMP opr1,opr2比较指令(compare)
  履行操作: (opr1)-(opr2),依据相减成果设置条件码,但不回送成果

  以上指令除DEC指令不影响CF外,其他都影响条件码。与加法相似,SF和ZF别离标明减法成果的符号以及为零的状况;CF标明无符号数相减成果溢出与否;OF标明带符号数相减成果溢出与否。但在对CF和OF位的设置办法上减法和加法有所不同,下面对此做进一步阐明:
  CF=1   二进制减法运算中最高有用位向高位有借位(被减数<减数,不行减的状况)
  CF=0   二进制减法运算中最高有用位向高位无借位(被减数≥减数,够减的状况)
  OF=1   两数符号相反(正数-负数,或负数-正数),而成果符号与减数相同
  OF=0   同符号数相减时,或不同符号数相减,其成果符号与减数不同

  NEG opr求补指令(negate)
  履行操作: (opr) ← -(opr),
                        
  求补操作即把操作数变为与其符号相反的数:。
  机器在履行求补指令时,把操作数各位求反后末位加1,因而履行的操作也可标明为:
  (opr) ← 0FFFFH-(opr)+1

  NEG指令的条件码设置办法为:
   CF=1  不为0的操作数求补时
   CF=0  为0的操作数求补时
   OF=1  当求补运算的操作数为-128(字节)或-32768(字)时
   OF=0  当求补运算的操作数不为-128(字节)或-32768(字)时

 例字长为8位的两数相减,其可标明数的规模为:带符号数 -128~127(80H~7FH),无符号数0~255(0~FFH)。运算成果超出可标明数规模即为溢出,阐明成果过错。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/256966.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部