+ -
当前位置:首页 → 问答吧 → 关于汇编溢出问题

关于汇编溢出问题

时间:2011-06-15

来源:互联网

(ah)=22H (bh)=0a0H 则(ah)-(bh)=34-(-96)=82H 82H 是 -126的补码  
请问 这个算不算溢出 因为 34-(-96)应该等于130 现在 根据上面算出来却是 -126
现在 我们来 将上面的 算数 用二进制演示下:
  34 00100010
- (-96) -10100000
________ === _______________
  10000010 (82H) 
可见 用34 减去 -96 的时候借位了,但是书上的溢出概念是 两数相加 产生溢出 ,现在的情况却是两数相减也 能产生溢出,溢出的概念是 第七位或者第六位 其中一个有进位(注意是进位),上面的演示却是 借位 ,也就是说不符合 溢出的概念 ,但是 不是溢出的话 ,结果就应该正确,请解释 。

作者: zhaomcu   发布时间: 2011-06-15

给你一个简单的例程:
CODE SEGMENT
  ASSUME CS: CODE
BEGIN:
  JMP INSTALL
INSTALL:
  MOV AX, CS
  MOV DS, AX
   
  MOV AH, 22H
  MOV BH, 0A0H
  SUB AH, BH

  MOV AH, 4CH
  INT 21H
CODE ENDS
  END
在执行“SUB AH, BH”之后,请对比标志位,你会发现有溢出标志和进位标志,说明结果是溢出的。
结果“82H”就是130,一点儿都没有错的,要是你硬要将其视为有符号数,那么它表示的就是“-126”。
这个时候应该把结果视为无符号数,因为符号已经被“顶”走了。

作者: XSFGaoVictor   发布时间: 2011-06-15

溢出与进位是不同概念。所谓溢出,是指有符号数的运算结果超出的可表示的范围,指令执行后得到的结果是错误的。如果结果在可表示范围内,即结果正确时,是没有溢出的。

作者: cnzdgs   发布时间: 2011-06-15