正溢出 与 负溢出对指令的测试条件的证明

首先要知道一个概念,就是带符号的数如8位二进制的表示范围为 -128~127

-128的补码与128的补码是一样的。(对于零界的-xxx对应的xxx的补码都是一样的)

 

 

16位二进制的补码表示数的范围

 

-32768D |   +32767

(8000H) |   (7FFFH)

|

(-------> |       <-------)

负数 ---负溢出---|->                  正数

 

|

   <--|正溢出----

 

------ | ------

 

   -1D | +1D

(FFFFH) |   (0001H)

 

如此:对于要求<的JL指令(检测带符号数的),他的测试条件为 : SF异或OF = 1;

则可用上面的图证明出:

 

如: MOV AX,A

CMP A,B

JL X

//(A)=a ; (B)=b;

 

 

①:当a>b时

a=0101h, b=1100h,

a-b=1001 (溢出) 

此时,SF =1, OF = 1;表明是正溢出,结果自然就是错误的。

这样的话,与JL的测试条件不符。

 

②:当a>=b时(未溢出的例子)

 

SF = 0, OF = 0,这样的话 与JL的测试条件不符

 

 

③:当a<b时 , 

a=1100h , b=0101h

a-b=0111h(溢出)

此时,SF=0 , OF = 1;

可见,与JL的测试条件相符

 

④:当a<b时,(这个是未溢出的例子)

未溢出,则SF =1, OF =0;

可见,与JL的测试条件相符。

 

通过分析可知,JL的测试条件SF异或OF = 1;可检测无论是否溢出时的a<b,即检测<

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值