汇编里怎样才算运算Overflow(溢出)?

SnHnBn 2003-10-16 10:15:55
不好意思,题目没有说完,是MIPS-II指令ADDI这一条,怎样才算Overflow?
是结果小于0,还是7FFFFFFF+n 变成80000000+n-1(如果是带符号的结果),还是FFFFFFFF+n变成0+n-1? (n是一个较小的自然数)
...全文
791 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
SnHnBn 2003-10-30
  • 打赏
  • 举报
回复
楼上,可能你是弱智
pangbo1979 2003-10-30
  • 打赏
  • 举报
回复
CSDN的汇编水平真的很低,哈哈哈哈。。。。。。。。。。。。。。。。。。。。。
垃圾,
这么幼稚的问题懒的解释
SnHnBn 2003-10-26
  • 打赏
  • 举报
回复
应该是哦?不知道是有符号加无符号还是有符号加有符号。
binariman 2003-10-24
  • 打赏
  • 举报
回复
这个和指令有关的,就你说的addi是带符号加,无符号加是addiu
SnHnBn 2003-10-24
  • 打赏
  • 举报
回复
我不明白你指的通用判断是什么意思。我的意思是,x86指令通过一组标志位来让程序自己判断溢出情形,而MIPS指令则固定由指令负责有无符号数判断溢出(溢出的时候,会跳到异常处理程序)。这两者有很大的不同。
liufang36 2003-10-24
  • 打赏
  • 举报
回复
这么说,楼上的同志,你的意思是x86的判断方法并不是通用的?
SnHnBn 2003-10-23
  • 打赏
  • 举报
回复
楼上,MIPS一样用补码方式存储。只不过,x86指令的ADD指令并不区分有无符号,具体的判断依靠多个标志位来判断,也就是说程序可以判断自己的溢出情形。而对于MIPS指令ADDI,它将由指令Cause一个Overflow Exception(类似x86的软中断,要转入处理程序),因此就不象x86由后续指令来根据自己的数据是有无符号数来判断溢出。
也许是我说得不够明白,也许是大家形成了x86指令集的惯性思维。现在,各位大虾应该明白了吧?
SnHnBn 2003-10-22
  • 打赏
  • 举报
回复
没人熟悉MIPS系列指令?要说x86指令还不如MIPS系列指令用途广泛。
Lymtics 2003-10-22
  • 打赏
  • 举报
回复
同意 liufang36(Mason) :

关于溢出.取决于CPU中数的存储方法.
x86的O标志位是根据其数存储方法而定的...

TO:SnHnBn(大可达) :

我理解的是如果是有符号数运算,结果也是符号数,那么两个负数相加,得到一个正数,或者两个正数相加,得到一个负数,这就算溢出。
如果是无符号结果,其中一个操作数是无符号数,另一个是有符号数,那么无符号数加上一个负数如果结果比这个无符号数还大,或者无符号数加上一个正数结果比这个无符号数还小,也是溢出。

如果允许有符号数加无符号数的指令存在,要分辨指令的执行结果.就必须加入更多的标志位..否则指令系统将遭到极大的破坏,得不偿失啊.我对x86的指令系统比较熟悉.在不增加现有算术运算标志位的情况下,有符号数加无符号数是不可实现的...不知道MIPS中是怎么回事...
还有如果你给出MIPS中数的存储方法,大家也许就可以判断出(不)溢出的条件...

liufang36 2003-10-22
  • 打赏
  • 举报
回复
按照教科书中的解释,是否溢出应该取决于cpu中的标志位OF,OF=0则不溢出,OF=1则溢出。

而OF等于Cs同或Cp.而Cs与Cp分别为计算的最高位与此高位是否有进位。(在8086种共16位)
SnHnBn 2003-10-21
  • 打赏
  • 举报
回复
还是不明白你说什么。
我理解的是如果是有符号数运算,结果也是符号数,那么两个负数相加,得到一个正数,或者两个正数相加,得到一个负数,这就算溢出。
如果是无符号结果,其中一个操作数是无符号数,另一个是有符号数,那么无符号数加上一个负数如果结果比这个无符号数还大,或者无符号数加上一个正数结果比这个无符号数还小,也是溢出。
我不管编成的人如何处理,反正如果结果溢出的话,这条指令就会产生一个Overflow异常。对于x86类似的指令则产生一个溢出标志位。
hswxf 2003-10-20
  • 打赏
  • 举报
回复
也许是我说的远了一点
规格化是对数码而言的,对这条指令主要有的也只有一条:
你用的是符号数还是#%%%¥¥……
只有符号数才有上述的
没有的话只有数值范围的溢出,这不是一条指令产生的,而是编程的人是如何处理的,就是DOS下的溢出也可以用程序控制

标志?多呢¥655676#¥¥……
SnHnBn 2003-10-20
  • 打赏
  • 举报
回复
楼上,我知道浮点数的规格化,对于这条整数指令,我的确不知道规格化指的是什么,请指教。
hswxf 2003-10-19
  • 打赏
  • 举报
回复
一般的出错主要是由于符号位产生的
当然也有数据表达范围产生
溢出时并不是简单的移位
你知道什么是规格化吗?
SnHnBn 2003-10-18
  • 打赏
  • 举报
回复
自己 up, 没人知道就把分散给帮忙up的人。
baobeixiong 2003-10-17
  • 打赏
  • 举报
回复
up
W32API 2003-10-17
  • 打赏
  • 举报
回复
运算的数据类型是由你所选取的指令决定的。
W32API 2003-10-17
  • 打赏
  • 举报
回复
不是,只要目标寄存器容纳不下结果就算溢出。
SnHnBn 2003-10-17
  • 打赏
  • 举报
回复
“目标寄存器容纳不下结果就算溢出”--------- 说了等于没说。

说简单点就是,我想知道MIPS-II指令ADDI把它的第一个加数当作是带符号数,还是无符号数。只有先搞懂这一点,才能判断是否“容纳不下结果”。
hswxf 2003-10-17
  • 打赏
  • 举报
回复
溢出有二种情况:
1、溢出不出错:
这在数码的规格化或校正后可以恢复(不好表达)的,溢出但结果还是正确的。一般出在符号位与校验位上
2、溢出就产生产生错误
数码不可以恢复
具体在编程中出现的溢出,情况是比较复杂的楼上说的对,但贴主说的是只在IBM汇编中的情况吗?
加载更多回复(2)

21,458

社区成员

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

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