汇编语言中的加减法

汇编语言中的加减法,第1张

(加减指令,既作为无符号数影响标志位CF,AF,又作为有符号数影响标志OF,SF。想了半天终于搞清楚了,CF标志反映最高位的进借位情况,而OF反映结果是否溢出,这里的结果是目的 *** 作数中的结果,进借位它是不管的。你这样想的原因是,考虑到CF为1,则肯定溢出了,但是目的 *** 作数中只能保存溢出后的值,丢掉了最高位,所以就不一定溢出了。看例子:

MOV

AX,7896H;

ADD

AL,AH;

;执行完后CF=1,AL=0EH,但是OEH不溢出,所以OF=0;

后面一句也不对吧。)

以上是我个人的理解。

以下是复制别人的理解:

CF

比较简单吧,

没有什么特别的

OF

表示的带符号数进行运算是否溢出

96+78,

一个是正数,

一个为负数,

相加肯定是不会有溢出的

OF

溢出只可能发生在两个相同符号的数值相加,

或者是不同符号数相减

如果是从算法判断上来看,

如果是在运算时,

次高位向最高位和最高位向

CF

位产生进位情形一致的话,

OF=0;

否则

OF=1

96

10010110

+78

01111000

10E

100001110

这里,

次高位和最高位都产生了进位,

情形一致,

所以

OF=0

16

00010110

+78

01111000

08E

10001110

这里,

次高位向最高位产生了进位,

而最高位没有向

CF

产生进位,

所以

OF=1

而且,

结果也是,

两个正数相加,

结果为负数了,

显然溢出

还有两种情况,

也是类似的

一个是都没有产生进位,

那应该是两个小的正数相加,

结果还是正数,

没有溢出;

另外就是次高位没有产生进位,

但最高位产生进位了,

这应该是两个负数相加,

由于次高为位没有产生进位,

所以,

最高位,

也就是符号位结果为

0,

是正数,

显然也是溢出了

        CODE  SEGMENT

              ASSUME    CS:CODE

           X  DB        0ABH,0CDH,0EFH

           Y  DB        0ACH,0CDH,0EEH

           N  EQU       $-Y

           Z  DB        N DUP(0)

      START:  PUSH      CS

              POP       DS

              PUSH      CS

              POP       ES

              MOV       CX,N

              MOV       BX,0

              CLC

         @0:

              MOV       AL,X[BX]

              SBB       AL,Y[BX]

              MOV       Z[BX],AL

              INC       BX

              LOOP      @0

              LEA       SI,Z

              MOV       CX,N

              CLD

         @1:                        ; 从低字节到高字节依次显示

              LODSB

              CALL      DSPAL

              LOOP      @1

              MOV       AH,4CH

              INT       21H

;=============================

       DSPAL  PROC      NEAR

              PUSH      AX

              PUSH      BX

              PUSH      CX

              PUSH      DX

              PUSHF

              MOV       CX,2

              MOV       BX,AX

    @DSPAL1:

              ROR       BL,1

              ROR       BL,1

              ROR       BL,1

              ROR       BL,1

              MOV       DL,BL

              AND       DL,0FH

              CMP       DL,9

              JA        @DSPAL2

              ADD       DL,30H

              JMP       @DSPAL3

    @DSPAL2:

              ADD       DL,37H

    @DSPAL3:

              MOV       AH,2

              INT       21H

              LOOP      @DSPAL1

              MOV       AH,2

              MOV       DL,'H'

              INT       21H

              MOV       DL,32

              INT       21H

              POPF

              POP       DX

              POP       CX

              POP       BX

              POP       AX

              RET

       DSPAL  ENDP

        CODE  ENDS

              END       START

以上就是关于汇编语言中的加减法全部的内容,包括:汇编语言中的加减法、用汇编语言写一个多字节二进制数减法程序。要求以十六、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9728994.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存