新闻中心

EEPW首页>嵌入式系统>设计应用> 8086指令系统---算术指令(一)

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

作者: 时间:2016-11-27 来源:网络 收藏


  ① 43H-16H=2DH
    0100 0011     0100 0011   条件码设置:CF=0
  - 0001 0110    + 1110 1010         OF=0
 --------------    --------------
    0010 1101    1← 0010 1101


  说明:机器作减法运算时,先将减数求补,然后转化为加法运算,所以实际上机器设置CF的方法是:最高有效位不产生进位时,CF=1;最高有效位产生进位时,CF=0。这和做减法时有借位CF=1,无借位CF=0是一致的。
  本例参加运算的数无论是看作带符号数还是无符号数,运算结果均有效。


  ② 0C8H-66H=62H
    1100 1000     1100 1000   条件码设置:CF=0
  - 0110 0110   + 1001 1010         OF=1
  --------------    ------------
    0110 0010    1← 0110 0010

  说明:如果是无符号数的运算,被减数够减无借位,所以CF置0,表明结果有效。如果操作数是带符号数,且被减数与减数符号相反,而结果符号与减数符号相同,所以OF置1,表明结果无效。

   ③ 54H-76H=0DEH
    0101 0100    0101 0100    条件码设置:CF=1
   - 0111 0110   + 1000 1010          OF=0
   -------------    -------------
    1101 1110      1101 1110


  说明:如果是无符号数的运算,本例中被减数<减数,减运算向高位有借位(或加运算无进位),则CF置0,表明结果无效。如果是带符号数的运算,同符号数相减,OF置0,结果有效。

   ④ 4BH-0B6H=0DEH
    0100 1011    0100 1011    条件码设置:CF=1
   - 1011 0110   + 0100 1010          F=1
   ---------------    -----------
    1001 0101      1001 0101

  说明:如果是无符号数的运算,本例中被减数<减数,减运算向高位有借位(或加运算无进位),则CF置0,表明结果无效。如果是带符号数的运算,不同符号数相减,且结果符号与减数符号相同,OF置1,结果也是无效的。

  例分析下列程序的执行情况:

        DATA_A   DD   62562FAH
        DATA_B   DD   412963BH
        RESULT   DD   ?
         …    …   …
        MOV     AX, WORD PTR DATA_A   ; (AX)=62FAH
        SUB    AX, WORD PTR DATA_B   ; sub 963BH from AX
        MOV    WORD PTR RESULT, AX   ; save the result
        MOV    AX, WORD PTR DATA_A+2  ; (AX)=0625H
        SBB    AX, WORD PTR DATA_B+2  ; sub 0412H with borrow
        MOV    WORD PTR RESULT, AX   ; save the result

  答:SUB指令执行后,(AX)= 62FAH-963BH=0CCBFH,CF=1(有借位)。执行SBB指令后,(AX)= 625H-412H-1=212H,CF=0,OF=0,因此,保存于RESULT的结果数据为0212CCBFH。

3 乘法指令

  MUL  src  无符号数乘法(unsigned multiple)
  IMUL src  带符号数乘法(signed multiple)
  字节操作: (AX) ← (AL)×(src)
  字操作:  (DX, AX) ← (AX)×(src)

  MUL和IMUL指令的区别仅在于操作数是无符号数还是带符号数,它们的共同点是,指令中只给出源操作数src,它可以使用除立即数方式以外的任一种寻址方式。目的操作数是隐含的,它只能是累加器(字运算为AX,字节运算为AL)。隐含的乘积寄存器是AX或DX(高位)和AX(低位)。

  乘法指令只影响CF和OF,其它条件码位无定义。无定义是指指令执行后,条件码位的状态不确定,因此它们是无用的。

  MUL指令的条件码设置为:
  CF OF= 0 0 乘积的高一半为0(字节操作的(AH)或字操作的(DX))
  CF OF= 1 1 乘积的高一半不为0

  这样的条件码设置可以指出字节相乘的结果是8位(CF=0)还是16位(CF=1),字相乘的结果是16位(CF=0)还是32位(CF=1)。

  IMUL指令的条件码设置为:
  CF OF= 0 0 乘积的高一半为低一半的符号扩展
  CF OF= 1 1 其他情况

  符号扩展是指做字节乘法时,乘积低8位的最高位为0,高8位也扩展为0,或者低8位的最高位为1,高8位也扩展为1的情况。对两个字相乘,符号扩展是指乘积的低16位的最高位为0,高16位也扩展为0,或者低16位的最高位为1,高16位也扩展为1的情况。

本文引用地址: //m.amcfsurvey.com/article/201611/322192.htm

 例无符号数乘法 

    ; from the data segment
    DATA1  DB  25H
    DATA2  DB  65H
    RESULT DW ?
    ; from the code segment
      MOV   AL,DATA1
      MOV   BL,DATA2
      MUL   BL        ; register addressing mode
      MOV   RESULT,AX
    or
      MOV   AL,DATA1
      MUL   DATA2       ; direct addressing mode
      MOV   RESULT,AX
    or
      MOV   AL,DATA1
      MOV   SI,OFFSET DATA2
      MUL   BYTE PTR [SI]   ;register indirect addressing mode
      MOV   RESULT,AX

  本例25H×65H=0E99H,高16位不为0,所以CF=1,OF=1。


  例  

    DATA3  DW  2378H
    DATA4  DW  2F79H
    RESULT1 DW  2 DUP(?)
    …    …
      MOV   AX, DATA3   ; load first operand into AX
      IMUL   DATA4     ; multiply it by the second operand
      MOV   RESULT1, AX  ; store the lower word result
      MOV   RESULT1+2, DX ; store the higher word result

  本例2378H×2F79H=0693 CBB8H,即(DX)=0693H,(AX)=0CBB8H。因为高16位不是低16位的符号扩展,所以条件码设置为CF=1,OF=1。


上一页 1 2 下一页

关键词:8086指令系统算术指

评论


相关推荐

技术专区

关闭