1
0
进位标志反映从操作的最重要位产生进位。对于无符号操作数,这样的进位将反映溢出。 对于其他标志,符号标志仅适用于有符号操作数。溢出标志也是如此,因为它是在由于有符号操作溢出而导致符号更改不正确时设置的。 当结果为零且与溢出检测无关时,将设置最后一个标志零。 在您给出的示例中,操作数是无符号的,进位标志是清除的。所以没有发生溢出。 |
2
1
cf=0表示加法没有换行。见 this article on Understanding Carry vs. Overflow conditions/flags 是的。
你可以说加法总是给出正确的
术语在这里是混乱的,因为“算术溢出”作为一个一般概念(当数学上精确的结果不适合目的地时)包括有符号和无符号整数情况。在x86上(就像所有正常的CPU一样),行为是有圈套的。但是无符号的包装称为进位,而有符号的包装称为溢出。 对于浮点,正常的溢出行为是饱和到正负无穷大。这说明了溢出作为一个一般概念和作为整数溢出的特定行为的总括之间的区别。
有些体系结构具有饱和加法指令,饱和是整数溢出行为。x86具有
在C语言中,无符号溢出被定义为环绕,但有符号溢出是未定义的行为(编译器可以在不发生这种情况的假设下进行优化)。
MIPS有一个
其余的标志将为您提供有关结果的更多信息其中一些很少有用,但我的回答是“你能得出什么结论?”是的。
zf=0告诉您结果是非零的
是的。如果你在实施
sf=1告诉您结果是>=最大值的一半 是的。即无符号结果有其高位集。对于8位加法,sf=1表示结果为>=128。 这有时可以为您保存一条测试或比较指令。如果将寄存器作为左移位添加到自身,则cf将位移出,sf将当前高位移出。我想告诉你一些关于 =1(SF=1,CF=0)告诉你,两个输入都小于最大无符号值的一半。 是的。(即,如果解释为有符号数字,则为正。结果的有符号解释为负,因此结果的有符号解释为pos+pos=neg,这只能通过溢出发生)。
在我写的任何一篇asm中,我从来没有利用过最后一篇,而且它似乎不太可能有用。我所知道的任何架构都没有同时考虑cf和of的分支条件。因此,只有当您已经在cf=0分支中时,它才有用。x86签署了较大/较小的分支
that check SF != OF
,但仍然不能用一条指令检查sf==1和of==1。所以如果你想检查一下,你会
|
Jason O. · 在Elm中优雅地处理标志中丢失的键 7 年前 |
icarbajo · Crontab:运行带有标志的应用程序 7 年前 |
LBJ33 · Android应用程序崩溃..意图标志? 8 年前 |
JasonBorne · 当没有给定ARGV时,设置标志并运行默认值 8 年前 |
Charu · 2^32以上的枚举标志 11 年前 |
Tommaso Belluzzo · C#枚举-针对掩码检查标志 11 年前 |
dubchoi · 在Android中管理构建标志 12 年前 |