怎样判断OF的值是0还是1?
根据书本知识,如果有符号数在进行算数运算或者逻辑运算时,发生了溢出,则OF=1
反之如果有符号数在进行算数运算或者逻辑运算时,没有发生溢出,则OF=0
如何直观的来判断,是否溢出?
我们可以这样理解,如果运算得不到正确结果,则溢出,如果能得到正确结果,则没有溢出
举例:
Mov al,80h
Add al,80h
首先看结果,运行后,al=0H,如果把数据当作是有符号数时,80h是-128的补码,两个-128之和就是-256,与结果0不符,我们就说有符号数在运算时发生溢出,OF=1
再来研究下,有符号数与无符号数
同一个数据,80h,当作无符号数进行运算的时候,我们当做128
当作有符号数进行运算的时候,我们当做负128
再看一个数据
0ffh
这个数据,当作无符号数进行运算时,我们就当做255
当作有符号数进行运算时,我们就当做-1
问题产生了?
80H是-128的补码
0ffH是-1的补码
这到底是怎么换过来的呢?
以8位数据为例
1的二进制式是0000 0001
-1的补码就是把1的二进制按位取反后加1
0000 00001按位取反就是1111 1110
再加1就是:1111 1111
1111 1111转成十六进制就是0ffh
所以,-1的补码就是0FFh
如果我们看到一个数是0FEh,我们要知道它是什么数的补码怎么办?
把0FEh的二进制数减1,再按位取反就得到了
0FEh的二进制数是1111 1110
减1就得到1111 1101
再按位取反就是0000 0010
0000 0010就是十进制数2
那么0FEh就是-2的补码
同理FD就是-3的补码
还是以8位数据为例
-128至-1的补码就是:0ffh至80H
今后,在8位数据进行有符号运算的时候,只要看到是80h~0FFh之间的数据,我们就知道这是负数的补码
那79H呢?79H被当作有符号数进行运算的时候,代表+79
因为79的最高位是0,所以当作+79
——
<*<*><*><*><*><*>*<*>*<*>*<*>*<*>*<*>*<*>*<*><><->
接下来,我们总结一条规律
以8位数据为例
Mov al,80H
Add al,30H
这时,一眼就看出OF=0,为什么,因为我知道这个运算不会溢出
那我来解释一下
80H被当作有符号数进行运算时,是-128.也就是一个负数
30H被当作有符号数进行运算时,是+48,也就是一个正数
一个负数加一个正数,他们的值不会超过范围:-128至127(注意,我们以8位数据为例)
再看一个例子
Mov al,0f0h
Add al,88H
这时,就要用到计算器,先算出结果0f0H+88H等于178h,因为al是8位寄存器,所以al=78H
我们知道0F0H和88H在被当作有符号数进行运算时,他们的值都是负数,那么一个负数加上一个负数,正确结果应该是一个负数
但是结果78H,却是一个正数
所以,这个运算没有得到正确结果,也就是发生了溢出,OF=1
再看最后一个例子
Mov al,0f0h
Add al,78h
在进行有符号运算时,0F0是负数,78是正数
所以,OF=0,即运算不会溢出
======================================
======================================
说了这么多,我们要记住的只有两个知识点(只以8位数据为例)
第一点, 我们要记住:补码用十六进制表示的时候,范围是0ffh~80H
第二点, 在进行有符号运算时,一个正数与一个负数相加,其结果不会溢出,即OF=0
如果是同符号相加时,要看结果而定
- [qiangzi] 漂亮!! 02/05 17:54
- [scuzg] 补码溢出判断是汇编语言学习的一个难点,我也曾希望从原理到方法上讲清楚这样事情: http://ww 12/31 12:01
- [release_lag] 谢谢指点,明白了 12/10 11:24
- [tinyparticle] 给段代码参考下,可以看下这个程序的逻辑: assume cs:code,ds:data,es:ta 12/08 15:11
- [游客] 9494 一窍不通的一看也就记住咯 顶个顶个 12/08 11:16
- [mywiil] 博主总结的不错啊。呵呵 12/04 09:24
- [release_lag] 谢谢提醒,我那样讲不严谨,所以,我改了一些,谢谢指正 12/03 08:52
- [游客] N小于16;N刚好被16整除;还有N不能被16整除 ========= “N小于16”也属于“N 12/01 16:00
- [release_lag] 谢谢abob ,我把笔记做了修改 11/05 09:54
- [liandakun] 二进制数1111 1111转化成十进制是2的8 次方减一,而不是2的8次方吧. 10/31 11:13
- [waiwai] 你的win32教材是罗云彬的吗? 感觉学习win32有难度,而罗云彬的教材相对王爽老师的教材也 01/27 10:10