问题标签 [carryflag]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 检查是否设置了进位标志
使用内联汇编程序 [gcc, intel, c],如何检查操作后是否设置了进位标志?
c++ - 将 ADC(带进位相加)到 C++
有一个 x86 汇编指令ADC
。我发现这意味着“带进位添加”。这是什么意思/做什么?如何在 C++ 中实现这条指令的行为?
信息:
在 Windows 上编译。我正在使用 32 位 Windows 安装。我的处理器是 Intel 的 Core 2 Duo。
c# - What actually happens when a Byte overflows?
What actually happens when a Byte overflows?
Say we have
If we now do this addition
I think we'll end up with byte3 = 94 but what actually happens? Did I overwrite some other memory somehow or is this totally harmless?
assembly - 如何使用 ADC 在汇编中添加两个 32 位?
如何使用 ADC 在汇编中添加两个 32 位?
gdb - 带有汇编程序的 gdb:打印进位标志的状态
我有一个 x86 汇编程序,我正在使用 gdb 进行调试。有没有办法在 gdb 中打印进位标志的状态,比如“print $cf”?
c++ - 使用进位标志的高效 128 位加法
我在我的 C++ 代码的内部循环中使用了一个 128 位整数计数器。(不相关的背景:实际应用是在规则网格上评估有限差分方程,这涉及重复递增大整数,即使是 64 位也不够精确,因为小舍入累积到足以影响答案。)
我将整数表示为两个 64 位无符号长整数。我现在需要将这些值增加一个 128 位常量。这并不难,但您必须手动捕捉从低位字到高位字的进位。
我有这样的工作代码:
这是紧凑而简单的代码。有用。
不幸的是,这大约是我运行时间的 20%。杀手锏是 loWord 测试。如果我删除它,我显然会得到错误的答案,但运行时开销会从 20% 下降到 4%!所以那个携带测试特别贵!
我的问题:C++ 是否公开了硬件携带标志,甚至作为 GCC 的扩展?如果实际编译的指令使用 add using last carry 指令进行 hiWord 添加,则似乎可以在没有上面的 test-and-add-carry 行的情况下完成添加。有没有办法重写 test-and-add-carry 行以使编译器使用内部操作码?
binary - 二进制加法/减法
我在理解进位标志 (CF) 和溢出标志 (OF) 时遇到了一些麻烦。
以下是我正在处理的一些示例问题:
- 符号位的进位为 1,符号位的进位为 0,所以 OF = 1?
- 符号位的进位为 1,符号位的进位为 1,所以 OF = 0?
- 符号位的进位为0,符号位的进位为1,所以OF = 1?
我想我无法理解无符号溢出和适当的 CF 值。
math - Z80 上的溢出和进位标志
我已经开始在我的 Z80 内核上实现 ADD A,r 组操作码。我对我认为我已经确定的进位和溢出标志有点困惑,但我想把它交给社区来检查我是否正确。
基本上,据我所知,Z80 中的 ALU 并不关心有符号/无符号操作,它只是添加位。这意味着如果将两个 8 位值相加并作为相加的结果产生一个 9 位值,则将设置进位标志。这包括添加两个负的二进制补码,例如 -20 (11101100) 和 -40 (11011000),虽然结果是 -60 (11000100),但结果实际上是一个 9 位值 1 1100 0100。这肯定意味着如果添加两个负的二进制补码值,则将始终设置进位标志,即使没有溢出条件 - 我是对的吗?
其次,我决定要检测这条指令中的溢出,我将对两个操作数的第 7 位进行异或运算,如果结果是 10000000,那么肯定没有溢出 - 如果结果是 00000000,那么可能会有溢出为符号相同,因此我会将加法结果的第 7 位与任一操作数的第 7 位进行异或运算,如果结果为 10000000,则发生溢出并设置 P/V 溢出标志。我也在这里吗?
抱歉,这个令人费解的问题,我很确定我是对的,但在我继续基于这个逻辑的无数指令之前,我需要知道。非常感谢。
assembly - 汇编 - 进位标志 VS 溢出标志
我有下一个代码:
当我检查它时,溢出标志和进位标志将在第一次操作中设置,而在第二次操作中,只会设置溢出。
但我不明白为什么:
- 在无符号数中,结果为 143 (8FH),因此适合 8 位无符号数(小于 255)=> 不应设置进位标志。在有符号数中,结果为 127,适合 8 位有符号数,不应设置溢出。
怎么了?谢谢。
math - x86中的进位/溢出和减法
我试图绕过 x86 中的溢出和携带标志。
据我了解,为了添加有符号 2 的补码,只能以四种方式之一生成标志(我的示例是 4 位数字):
- pos+pos = 否定(溢出)
- 0111 + 0001 = 1000 (7 + 1 = -8)
- pos+neg = pos(进位)
- 0011 + 1110 = 0001 (3 + -2 = 1)
- 否定+否定=否定(进位)
- 1111 + 1111 = 1110 (-1 + -1 = -2)
- neg+neg = pos(溢出和进位)
- 1000 + 1001 = 0001 (-8 + -7 = 1)
那么,在 x86 汇编中,从 A 中减去 B 会生成与添加 A 和 -B 相同的标志吗?