|
主题 : : 监测点11.2 80H+80H为什么溢出了??? [待解决] |
回复[ 7次 ]
点击[ 546次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2011-07-06 19:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-06-13 15:40 |
mov al,80H
add al,80H
为什么溢出了?
以我的理解,80H+80H
1000 0000
+1000 0000
------------
10000 0000
则al的结果为0,在-128~127范围里,
应该不算溢出啊?
我看网上有的解释,说是因为进了一位,就溢出了
按照这个逻辑,CF=1的,OF必等于1,
但是显然这个结论是不正确的!
百思不得其解,求教了 | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-07-06 19:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-06-13 15:40 |
我好想找到了一个方法,
不考虑这两个数的16进制和2进制,只考虑他们代表的十进制数值
只要不在 -128~127范围,就是溢出!
但是总想从 16进制或2进制的 式子里,找出点原因来……
不知道我的想法正确不正确,
想听听各位是怎么判断OF是否溢出的 | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-07-07 00:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-07-04 18:37 |
128 128=256,而Al只能表示到255,所以就溢出了,当你用al时,cpu认为AX和AL是两个独立且不相干寄存器,所以溢出的那个1不在ah里,好像跑到了CF里,至于OF为什么置1了,应该是因为加法溢出吧,毕竟已经溢出了,Al为0是溢出后的结果 | | |
|
|
|
|
[第3楼]
[ 回复时间:2011-08-31 01:27 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-08-30 22:20 |
80h为-128的补码 80h+80h按照有符号运算就是 -128 + -128 = -128-128 = -256 所以溢出了 | | |
|
|
|
|
[第4楼]
[ 回复时间:2011-08-31 01:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-08-30 22:20 |
二进制算得话,1000 0000 + 1000 0000 = 1 0000 0000 进位 cf=1
1 0000 0000 也就是-256 的补码 溢出,超出 -128 -- 127 of =1
八位寄存器al保留值为:0000 0000 zf = 1 pf = 1 | | |
|
|
|
|
[第5楼]
[ 回复时间:2011-09-15 19:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-09-08 16:38 |
你错啦 我给你个答案 那个cf和of 是针对无符号和有符号而言的 那么80h+80h肯定8位存储不下了因为最多为
ffh故它进位了 所以cf为1 若是进行有符号运算的话先把80h转换为2进制得到10000000这是补码 所以转换为十进制的话就是-128故乘以2就溢出了 所以of也为1 cpu进行运算的时候分别进行有符号和无符号各一次的运算将运行的结果分别存储在cf 和of 中 希望对你有帮助 | | |
|
|
|
|
[第6楼]
[ 回复时间:2011-09-15 19:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
|
|
|
|
|
[第7楼]
[ 回复时间:2011-09-16 18:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-09-08 16:38 |
再补充点那个cf 和 of 分别对有符号数和无符号数运算溢出的记录 你可以看看清华大学出版社的 汇编 | | |