CPU是如何检测溢出的

dbgchen 2009-11-21 05:26:25
注意,我说的不是程序中如何判断溢出,而是在CPU内部是如何实现检测溢出,它的原理是怎么的
...全文
754 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
溢出是指有符号数运算结果超出了可表达的范围,正数+正数、负数+负数、正数-负数、负数-正数才可能溢出,
最高有效位向高位进(借)位值(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里面
  • 打赏
  • 举报
回复
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)。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧