社区
汇编语言
帖子详情
汇编里怎样才算运算Overflow(溢出)?
SnHnBn
2003-10-16 10:15:55
不好意思,题目没有说完,是MIPS-II指令ADDI这一条,怎样才算Overflow?
是结果小于0,还是7FFFFFFF+n 变成80000000+n-1(如果是带符号的结果),还是FFFFFFFF+n变成0+n-1? (n是一个较小的自然数)
...全文
793
22
打赏
收藏
汇编里怎样才算运算Overflow(溢出)?
不好意思,题目没有说完,是MIPS-II指令ADDI这一条,怎样才算Overflow? 是结果小于0,还是7FFFFFFF+n 变成80000000+n-1(如果是带符号的结果),还是FFFFFFFF+n变成0+n-1? (n是一个较小的自然数)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
汇编
语言(ASM)从入门到精通
8088
汇编
跳转 一、状态寄存器 PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF AF PF CF 条件码: ①OF(
Overflow
Flag)
溢出
标志。
溢出
时为1,否则置0。 ②SF(Sign Flag)符号标志。结果为负时置1,否则置0. ③ZF(Zero Flag)零标志,
运
算
结果为0时ZF位置1,否则置0. ④CF(Carry Flag)进位标志,进位时置1,否则置0. ⑤AF(Auxiliary carry Flag)辅助进位标志,记录
运
算
时第3位(半个字节)产生的进位置。有进位时1,否则置0. ⑥PF(Parity Flag)奇偶标志。结果操作数中1的个数为偶数时置1,否则置0. 控制标志位: ⑦DF(Direction Flag)方向标志,在串处理指令中控制信息的方向。 ⑧IF(Interrupt Flag)中断标志。 ⑨TF(Trap Flag)陷井标志。 二、 直接标志转移(8位寻址) 指令格式 机器码 测试条件 如...则转移 指令格式 机器码 测试条件 如...则转移 JC 72 C=1 有进位 JNS 79 S=0 正号 JNC 73 C=0 无进位 JO 70 O=1 有
溢出
JZ/JE 74 Z=1 零/等于 JNO 71 O=0 无
溢出
JNZ/JNE 75 Z=0 不为零/不等于 JP/JPE 7A P=1 奇偶位为偶 JS 78 S=1 负号 JNP/IPO 7B P=0 奇偶位为奇 三、间接标志转移(8位寻址) 指令格式 机器码 测试格式 如...则转移 JA/JNBE(比较无符号数) 77 C或Z=0 > 高于/不低于或等于 JAE/JNB(比较无符号数) 73 C=0 >= 高于或等于/不低于 JB/JNAE(比较无符号数) 72 C=1 < 低于/不高于或等于 JBE/JNA(比较无符号数) 76 C或Z=1 大于/不小于或等于 JGE/JNL(比较带符号数) 7D S异或O=0 >= 大于或等于/不小于 JL/JNGE(比较带符号数) 7C S异或O=1 < 小于/不大于或等于 JLE/JNG(比较带符号数) 7E (S异或O)或Z=1 <= 小于或等于/不大于
如何更快地判断
算
术
运
算
有没有
溢出
?
在编写代码的过程中,
算
术
溢出
是一件让人十分头疼的事。因此在代码中检测是否
溢出
是一件很有必要的事,那么该如何检测
算
术
运
算
中的
溢出
呢? 以C语言中的
算
术乘法为例,可以使用以下的代码检测是否有
溢出
: //判断a与b的乘积是否
溢出
,是返回-1,否返回0 int
overflow
(int a,int b) { int temp=a*b; temp/=b; return temp==a...
贺利坚老师
汇编
课程54笔记:OF
溢出
标志
OVERFLOW
FLAG
指路老师的博客 在进行有符号数
运
算
的时候,如果结果超出了机器所能表示的范围称为
溢出
OF记录有符号数操作执行指令后 有
溢出
,OF = 1,OV/
Overflow
无
溢出
,OF = 0,NV/Not
Overflow
assume cs:codesg codesg segment start: mov AL,98 ADD AL,99 ADD...
溢出
(
Overflow
)和进位(Carry)的区别。
进位(Carry):进位通常发生在无符号数的
运
算
中。当无符号操作中产生了超过表示范围的结果时,会发生进位。例如,在无符号的加法中,如果操作结果超出了数据类型所能表示的最大值,就会发生进位。进位标志位在无符号数的
运
算
和一些位级操作(如位逻辑
运
算
)中也有其他用途。
溢出
(
Overflow
):
溢出
发生在有符号数的
运
算
中。当有符号操作结果超出了有符号数的表示范围时,即结果无法用有限位数表示时,会发生
溢出
。例如,在有符号的加法或减法中,如果操作结果超出了数据类型所能表示的范围,就会发生
溢出
。
计
算
机基础知识--
汇编
溢出
汇编
溢出
二个异符号数相加,OF=0 二个同符号数相加,结果与加数符号不同,OF=1 二个同符号数相减,OF=0 二个异符号数相减,结果与减数符号相同,OF=1 ============================================== 在 rflags 寄存器
里
的下面三个标志位记录
溢出
, 符号和进位状态: O
汇编语言
21,459
社区成员
41,601
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章