汇编中溢出所谓的按次高和最高的进位来判断是怎么回事?可不可以用最详细的方法解释一下?

作者&投稿:那海 (若有异议请与网页底部的电邮联系)
汇编中溢出所谓的按次高和最高的进位来判断是怎么回事?可不可以用最详细的方法解释一下?~

首先,我们要明确一个概念:什么叫溢出。
溢出是指在有符号的算术运算中,两个同符号数相加时出现的超出所能表示范围的现象。
其次,我们要明确另外一个概念:有符号数在计算机中的表示方法---补码。
有符号数的补码表示可以用下列方法求得:
1)任何正数的补码等于它本身。
2)任何负数的补码等于对它的绝对值的二进制形式按位取反,并加1。
3)零的补码是零。
比如:13-1可以写成13+(-1)
13的补码是它本身:用二进制表示为(0000 1101)B
(-1)的补码是它本身按位取反再加1:
(1111 1110)B+(0000 0001)B=(1111 1111)B
结果得(0000 1101)B+(1111 1111)B=(1)(0000 1100)B
前面的(1)表示是进位,去掉不要,剩下的等于12,就是我们想要的结果。可以看出,用这个编码,计算机只要做加法就可以了。其实计算机最善长做加法的。嘿嘿!

上面的两个概念我们明确以后,我们可以举一反三,再举个例子,用255+32。显然,已经超出了8位二进制所能表示的范围。
255的补码为:(1111 1111)B
32的补码为: (0010 0000)B
(1111 1111)B+(0010 0000)B=(1)(0001 1111)B
结果的最高位进位是(1),次高位是(0),我们用这两位做异或运算,如果为真,则结果溢出;为假,则没有溢出。
至于为什么做异或,本人正在考虑中,可以加本人MSN:yaodekey@hotmail.com一同讨论,或QQ:286744884

容器太小,盛不下了,就会溢出。
两种常用的数字,在计算机中,都是用机器码代表的。其范围如下:


机器码,无论代表什么数字,只要运算结果超出范围,就是【溢出】。
但是,在计算机专业人的嘴里,就不一样了。
【无符号数的溢出】,不叫溢出,要叫做【进位】。
【带符号数的溢出】,才叫做【溢出】。
搞计算机的这些人,基本概念不清,却自命不凡!
冒充脑回路清奇。。。正常人对此,就只能无语了。
---------------------------
那么,就按照计算机专业的说法吧:
  溢出,是指“补码运算结果超出范围”。
  溢出的特征,是“符号错误”。
知道了这些,判断是否溢出,就很容易了。
一、无符号数的运算,肯定不会溢出。只有进位。
二、只有:正+正、负+负,才有可能超出范围。不是这些,就绝不会溢出。
三、人工用数值计算。和,如果没有超出范围,就没有溢出。
四、人工用补码计算。和的符号,如果正确,就没有溢出。
五、编个程序,让计算机计算。然后观察溢出标志位,为零,就没有溢出。
六、人工用补码计算,如“最高位的进位”和“次高位的进位”相同,就没有溢出。
第六种,本是 CPU 的硬件所用的方法。
硬件,其理论基础,是很晦涩难懂的。
异或运算,一般也不需要初学者掌握。
但是,一些爱得瑟的老师,偏爱介绍这种方法。
其实,这是很无聊的表现,总想难为难为学生。

溢出,是通用的词汇,其含义,还是很容易理解的。

在计算机中,溢出,专用来说明:“补码运算结果超出预定的范围”。

八位的二进制,作为补码,其表示范围是:-128 ~ +127。

示意图如下:

当你的运算结果,小于-128 时,就会落入 +127 下面的范围,成为正数。

当你的运算结果,大于+127 时,就会进入-128 上面的范围,成为负数。

根据这些表现,你就可以找到两种“判别溢出”的方法。

一、两个数值相加,和,超出了-128~+127,必然就溢出。

二、两个补码相加,和的符号,不符合正常的逻辑关系,这就是溢出了。

另外,你还可以根据 OF 的值,来判断是否溢出。

此外,还有“在二进制运算过程中“进行判断的方法。

即:按次高和最高的进位来判断。

这过程,是 CPU 在内部实现的,判断的结果,即在 OF 上给出。

作为人类,掌握这种方法,并无实际意义。



不一定。进位是指最高位进1,溢出是指最高位和次高位进位不一样。进位表示无符号数运算超范围,溢出表示有符号数超范围。溢出可分3中情况分析,以加法为例:1.都是正数,最高位都是0,如果次高位进位,结果最高位为1,因为是补码运算,即结果是负数,出错。2.一正一负,永远不会出错,最高位一个1一个0,结果次高位进位最高位就会进位,永远不溢出。3.2个负数,最高位都是1,最到位肯定进位,如果不进位最高位结果为0正数,不对。所以溢出是补码运算结果超出表示范围的意思。
1111
1111
-1
+1111
1111
-1
--------------
1
1111
1110
-2
进位不溢出。


汇编中溢出所谓的按次高和最高的进位来判断是怎么回事?可不可以用最...
一、两个数值相加,和,超出了-128~+127,必然就溢出。二、两个补码相加,和的符号,不符合正常的逻辑关系,这就是溢出了。另外,你还可以根据 OF 的值,来判断是否溢出。此外,还有“在二进制运算过程中“进行判断的方法。即:按次高和最高的进位来判断。这过程,是 CPU 在内部实现的,判断的结...

汇编中溢出所谓的按次高和最高的进位来判断是怎么回事?可不可以用最...
溢出是指在有符号的算术运算中,两个同符号数相加时出现的超出所能表示范围的现象。其次,我们要明确另外一个概念:有符号数在计算机中的表示方法---补码。有符号数的补码表示可以用下列方法求得:1)任何正数的补码等于它本身。2)任何负数的补码等于对它的绝对值的二进制形式按位取反,并加1。3...

关于c语言溢出的问题,有代码
和溢出没有关系 i<8&&output[i]是表达式(逻辑运算),按运算符优先级,用括号括起来看就是:(i<8)&& output[i]它是循环语句循环条件。当它为假时,循环终止。这里的意思是,如果i小于8并且output[i]不为null ("\\0"-- 字符串结束符)时做循环。一旦 碰到 字符串结束符,或 i>=8 ,则 结束...

补码计算为什么会溢出??
溢出,是指数据的大小,超出了编码所能表示的范围。不仅是补码计算,任何形式的计算,都可能产生溢出。比如:1999 年、2000 年 ...,这是用 4 位十进制表示。当到了 9999 年,再过一年,你如果还用 4 位表示,就会溢出了。如果不限制位数,就不存在溢出的问题。--- 无符号数的溢出 计算机所...

8086汇编(30)解决除法溢出的问题
较好的方法是:编写一个“不会溢出”的除法程序。方法思路如下:在右图中,被除数:1A 2B 3C 4DH,有 32 位数。除数是:BL,仅有 8 位数。商,是:32 位数。按照图中的步骤,需要执行四次 DIV BL。只要 BL 不为零,就绝对不会发生溢出。按此思路,被除数的大小,仅仅受制于内存的大小。这...

java 读取大容量文件,内存溢出?怎么按几行读取,读取多次。
import java.io.IOException;import java.io.RandomAccessFile;import java.util.Scanner;public class TestPrint { public static void main(String[] args) throws IOException { String path = "你要读的文件的路径";RandomAccessFile br=new RandomAccessFile(path,"rw");\/\/这里rw看你了。要是之...

汇编语言除法之前为什么要加mov dx, 0
较好的方法是:编写一个“不会溢出”的除法程序。方法思路如下:在右图中,被除数:1A 2B 3C 4DH,有 32 位数。除数是:BL,仅有 8 位数。商,是:32 位数。按照图中的步骤,需要执行四次 DIV BL。只要 BL 不为零,就绝对不会发生溢出。按此思路,被除数的字节数,可以继续增加,仅受制于...

linux内存溢出怎么解决方案
ls:列目录。 用法:ls或ls dirName,参数:-a显示所有文件,-l详悉列出文件。 mkdir:建目录。 用法:mkdir dirName,参数:-p建多级目录,如:mkdir a\/b\/c\/d\/e\/f -p mount:挂载分区或镜像文件(.iso,.img)文件。 用法: a.磁盘分区:mount deviceName mountPoint -o options,其中deviceName...

计算机组成原理复习题
19.溢出:在计算机中,超出机器字长,发生错误的结果。20.非编码键盘:采用软件判断键是否按下及设键、译键、计算键值的方法的键盘。21.A\/D转换器:它能将模拟量转换成数字量,是计算机的输入设备。22.I\/O接口:指主机与I\/O设备之间设置的一个硬件电路及器相应的软件控制。23.端口:指接口电路中...

这是为什么
这个问题,经常出现在windows2000和XP系统上,Windows 2000\/XP对硬件的要求是很苛刻的,一旦遇到资源死锁、溢出或者类似Windows 98里的非法操作,系统为保持稳定,就会出现上述情况。另外也可能是硬件设备之间的兼容性不好造成的。 下面我从几个例子给大家分析: 例一:打开IE浏览器或者没过几分钟就会出现"0x70dcf39f"指令...

铁力市13695044389: 什么是进位位?什么是进位位啊,微机原理中,判断溢出的方法中写道:双进位法:2个进位位分别为次高位向最高位的进位和最高位向进位位的进位.如果两... -
威韩益欣:[答案] 哈!这是指计算机机器在工作中进行数学运算时对有符号的运算一种比较准确的能指示出溢出错误的方法.就是把你的数的头二位都作为符号位,既这个数为正时那这二位同为0,这个数为负时这二个位同为1,在这种定义情况下你再把按这规定的数...

铁力市13695044389: 汇编中的状态标志寄存器问题 -
威韩益欣: 溢出标志OF=1的条件是最高位和次高位的进位位异或结果为1则发生溢出、两个正数或是两个负数间操作不会发生溢出,在这里最高位有进位所以为1次高位也有进位所以也为1它们异或为0所以不发生溢出……你要明白这里的溢出不是说数据超出范围就发生溢出

铁力市13695044389: 计算二进制溢出判断时候,什么是符号位进位和最高位进位? -
威韩益欣: 首先符号相反是不会产生溢出的~~所以就是X0Y0或~X0~Y0X0Y0~S0:负+负仍为负,故S0若0(即为正)则溢出;~X0~Y0S0:正+正仍为正,故S0为1(即为负)则溢出;至于减法似乎不对比如1-(-1)就为00000001-11111111=00000010,结果是对的,没有溢出,所以减法应该是不对的;正确的方法还是应该判断最符号位进位和最高位进位,异或为1则溢出,为0不溢出,加减法都适用.

铁力市13695044389: 溢出标志位 怎么判断 -
威韩益欣: 不太好打,把你邮箱给我吧,我发给你,最好给我追加分啊,呵呵溢出标志位(OF), 是CPU按照二进制运算规律操作时, 根据自己的方法产生的状态信息.给出溢出标志位的方法通常是进位位异或法, 即两个二进制数进行运算时, 最高有...

铁力市13695044389: 汇编语言中的加减法 -
威韩益欣: (加减指令,既作为无符号数影响标志位CF,AF,又作为有符号数影响标志OF,SF.想了半天终于搞清楚了,CF标志反映最高位的进借位情况,而OF反映结果是否溢出,这里的结果是目的操作数中的结果,进借位它是不管的.你这样想的原因...

铁力市13695044389: 汇编语言中溢出和进位的区别 -
威韩益欣: of的设置,以加法为例,如果两数符号相同,结果却相反,则of=1;否则of=0;(如果两数符号相反,是不会溢出的). cf的设置,最高有效位(bit7,比如)向高位进位则为1,否则为0.所以实际上of是表示有符号数的溢出,cf是表示无符号数的溢出. 理解进位,从af位的设置更为容易.

铁力市13695044389: 如何判断二进制溢出 -
威韩益欣: 溢出,在用二进制进行加减计算的时候,要看“最高位的进位”就“次高位的进位”. 这两个进位,如果相同,则无溢出.设两个8位补码表示的数b7b6b5b4b3b2b1b0和a7a6a5a4a3a2a1a0相加, 把b7 + a7的进位称为C7,把b6 + a6的进位称为C6, 那么,C7、C6,如果不同,就是溢出了.楼主给出的题目如下,依据这些,是不能判断溢出的,因为其中并没有“次高位的进位”.溢出(b7,a7为符号标记),则____ A.b7与a7的逻辑或结果一定是1 B.b7与a7的逻辑与结果一定是为0 C.b7与a7的逻辑异或结果一定为1 D.b7与a7的逻辑异或结果一定0;答案为D,你们看下,

铁力市13695044389: 汇编 OF溢出
威韩益欣: 个人是这么判断的: 第一个是 -4 + 5 = 1,结果正确 第二个 结果为0,明显错误 第二个溢出; 书上的: 两数符号相同,而结果符号相反,则说明溢出;

铁力市13695044389: 汇编标志寄存器分类? -
威韩益欣: 标志寄存器是分为状态标志和控制标志两类.状态标志有6个,SF,ZF,PF,CF,AF,OF.指令系统中控制标志好像是由专门用于控制标志的设置和清除指令,DF,IF,TF.

铁力市13695044389: 符号位的进位与最高数位的进位 -
威韩益欣: 5.2.2 溢出及补码溢出的判断 无论采用何种机器数,只要运算的结果大于数值设备所能表示数的范围,就会产生溢出. 溢出现象应当作一种故障来处理,因为它使结果数发生错误.异号两数相加时,实际是两数的绝对值相减,不可能产生溢出,但...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网