社区
汇编语言
帖子详情
CPU是如何检测溢出的
dbgchen
2009-11-21 05:26:25
注意,我说的不是程序中如何判断溢出,而是在CPU内部是如何实现检测溢出,它的原理是怎么的
...全文
978
5
打赏
收藏
CPU是如何检测溢出的
注意,我说的不是程序中如何判断溢出,而是在CPU内部是如何实现检测溢出,它的原理是怎么的
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
日立奔腾浪潮微软松下联想
2009-11-23
打赏
举报
回复
溢出是指有符号数运算结果超出了可表达的范围,正数+正数、负数+负数、正数-负数、负数-正数才可能溢出,
最高有效位向高位进(借)位值(cf),是超出宽度1位的运算结果的符号位(正确结果的符号位),次高位运算的进(借)位,是运算后的新符号位。这二位值相反,就表明运算结果超出了可表达的范围。
dbgchen
2009-11-23
打赏
举报
回复
[Quote=引用楼主 lonelyboysvc 的回复:]
注意,我说的不是程序中如何判断溢出,而是在CPU内部是如何实现检测溢出,它的原理是怎么的
[/Quote]
-----------------------------------------------------------------------------------
回复1楼:
of = 最高有效位向高位进(借)位值(cf) xor 到最高有效位的时位值(第5位向第六位的进/借位值)
这句话我在《Intel 汇编语言程序设计》 第五版中看到过,到通过举几个例子计算过,但还是没有想明白CPU设计工程师以这种方式设计OF的原因。
小赌移情
2009-11-22
打赏
举报
回复
兩個正數加出了負數就看作是溢出 這個是硬件邏輯芯片中設計的 不管你程序是否判斷 那個溢出位是被置高的
hehe3434
2009-11-22
打赏
举报
回复
CPU由EU 和BIU 组成 其中PSW也就是标志位寄存器就在EU里面
日立奔腾浪潮微软松下联想
2009-11-21
打赏
举报
回复
OF=最高位运算的进(借)位 xor 次高位运算的进(借)位
以8位数运算举例:
A7 A6 A5 A4 A3 A2 A1 A0 8位二进制数A
B7 B6 B5 B4 B3 B2 B1 B0 8位二进制数B
A +/- B 的结果 C8 C7 C6 C5 C4 C3 C2 C1 C0 9位二进制数C
则:
OF = A7 xor B7 xor C7 xor C8
这里的C8就是CF位(carry)。
CPU
是如何
检测
溢出
的
CPU
是如何
检测
溢出
的 在加法和减法运算完成后,运算结果的最高有效位向高位的进位值(也就是CF)与到最 高位有效位的进位制异或,其结果放到
溢出
标志中。例如8位二进制数1000 0000 和1111 1110 相加,第六位向最高有效位(第七位无进位),但第七位向高位有进位(CF=1) 这里都是补码: 1000 0000 1111 1111 -------------
【笔记】
CPU
是如何
检测
溢出
的?
问题:
CPU
是如何
检测
溢出
的? 在加法和减法运算完成后,
CPU
使用一种非常有趣的方法确定
溢出
标志的值:运算结果最高有效位的进位值(即CF的值)与到最高有效位的进位值异或,其结果放到
溢出
标志中。例如8位二进制数 1000 0000 和 1111 1110 相加,第6位向最高有效位(第7位)无进位,但是第7位向高位有进位值(CF=1): 第6位到第7位没有进位 ...
CPU
如何区分
溢出
和自然进位?
CPU
如何区分
溢出
和自然进位? 之前学习补码的时候倒是学会了基本概念,但是最近又接触时发现还有不清楚的地方,所以又研究了下 今天的核心问题的“
CPU
是如何区分高位自然舍弃和
溢出
的?” 先给出结论:如果运算中,数值位最高位(也就是有符号数的正数第二位)和符号位(也就是正数第一位)同时进位,则是自然舍弃。两者间如果只有一个进位,则是
溢出
。 下面来讲解一下。运算的所有情况可以划分为四种: 符...
CPU
过载内存
溢出
分析
CPU
过载、内存
溢出
问题一般出现在线上项目中,因为开发环境用户量和数据量都很小,即使你的代码有问题也不会爆发出来。线上出现这样的问题是比较严重的,需要认真对待,妥善解决。问题原因造成这样问题有两个大类型的原因: 一,性能问题,高并发高访问情况下线程太多,内存不够用; 二,代码问题,如代码中有死循环、一次查询数据量太大、存在太多对象引用内存无法回收,数据库死锁等。如果项目一直稳定运行,升级版本后出现...
CPU
过载、内存
溢出
分析
CPU
过载、内存
溢出
问题一般出现在线上项目中,因为开发环境用户量和数据量都很小,即使你的代码有问题也不会爆发出来。线上出现这样的问题是比较严重的,需要认真对待,妥善解决。 问题原因 造成这样问题有两个大类型的原因: 一,性能问题,高并发高访问情况下线程太多,内存不够用;这个时候体现了多线程的一个危害,
cpu
过载而且可能内存
溢出
二,代码问题,如代码中有死循环、一次查询数据量太大、存在太多对象引用内存无法回收(如集合里有大对象没有回收),数据库死锁等。 使用top, free, uptime等命令查看
CPU
、
汇编语言
21,498
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章