返回首页
当前位置: 主页 > 编程语言 > C/C++教程 >

汇编的进位与溢出区别总结

时间:2016-09-20 12:42来源:电脑教程学习网 www.etwiki.cn 编辑:admin

整理了一下汇编的汇编和进位的区别,感兴趣的朋友看看。

对于无符号数来说,不存在溢出的问题,它的进位就相当于有符号数中的溢出

而对有符号数来说,不存在进位的问题

一个字节(8位) 的数有256个 (2的8次方)
一个字(16位) 的数有65536个 (2的16次方)

8个二进制位能够表达的无符号数范围是:0 ~ 255
16位表达的无符号数范围是:0 ~ 65535
对于无符号数来说,不存在溢出的问题,它的进位就相当于有符号数中的溢出.
进位表示最高位有没有向上形成进位,或向个形成借位,如果有则进位标志CF为进/借位数,但结果没错。
进/借位数要看 十六进制、二进制,进/借的是十六进制、二进制的最高位

处理器内部以补码表示有符号数,
8个二进制位能够表达的有符号数范围是:+127 ~ -128
16位表达的有符号数范围是:+32767 ~ -32768
如果运算结果超出了这个范围,就是产生了溢出,有溢出,说明有符号数的运算结果不正确
溢出是指结束超出数据所表示的范围,通俗地说是装不下了,比如,两个带符号的字节数127和2相加,结果为-1,因为带符号的字节数最大正数为127,所以超过范围,溢出标志位OF为1,说明出错了。
对于有符号数来说,不存在进位的问题

例如:
3AH + 7CH=B6H,就是58 + 124=182,已经超出-128 ~ 127范围,产生溢出,所以OF=1;另一方面,补码B6H表达真值是-74,显然运算结果也不正确。

溢出标志OF和进位标志CF是两个意义不同的标志.进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。

请看例子
例1:3AH + 7CH=B6H
无符号数运算:58+124=182,范围内,无进位
有符号数运算: 58+124=182 ,范围外,有溢出
例2:AAH + 7CH=(1)26H
无符号数运算:170+124=294,范围外,有进位
有符号数运算:-86+124=28 ,范围内,无溢出

处理器对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志CF;同时,根据是否超出有符号数的范围设置溢出标志OF。

应该利用哪个标志,则由程序员来决定。也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。

判断运算结果是否溢出有一个简单的规则:只有当两个相同符号数相加,而运算结果的符号与原数据符号相反时,产生溢出,此时的运算结果显然不正确。其他情况下,则不会产生溢出。

两个正数相加(或一个正数减一个负数)得到负数,或是两个负数相加得到正数,就是溢出了.
一个正数和一个负数相加不可能溢出

顶一下
(0)
0%
踩一下
(0)
0%
标签(Tag):C语言
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
推荐内容