问题标签 [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.
assembly - Why was the carry flag set here?
I was wondering if anyone can give me some site with lots of practice with these flags, especially the carry and overflow flag.
Anyways my question is this.
I'm looking at lecture notes and I see for a 5-bit comparisons
Cmp $12, $6 becomes
00110 - 01100 which can be changed into
The Carry Flag CF = 1 and Overflow Flag OF = 0
Cmp $-6, $-12 is 10100 - 11010 which becomes
CF =1 , Overflow Flag OF = 0
I believe I understand Overflow flag was set to 0 because these small number subtraction (or addition, depending on how you look at it) results in small numbers that never surpassed 2^5 range of numbers.
What about the carry? I thought it meant the last bit had a 1 carried over from the last column/bit, then that's a carry flag right?
What I mean is if it was something like
That's how a carry flag would be set right? The 1 came from 1+1 at the 2nd from the left column.
In my two examples, these are no 1's on top of the leftmost column.
What's going on?
Thanks.
rotation - 通过进位使用旋转和旋转
我正在设计一个处理器,并创建了一个常用 ALU 操作的列表。旋转和通过进位旋转几乎在所有处理器中都有,我想知道为什么。除了对密码学的一些晦涩提及之外,我看不出这些必须提供什么是位移无法做到的。
此外,是否有任何理由实现这些操作的 8 位和 16 位版本,或者只是 32 位?谢谢你的帮助。
c - 在没有内联汇编的情况下访问标志?
我在 C 中有以下方法,它需要两个 16 位短整数和:
- 将两个整数相加
- 如果设置了进位标志,则将结果加 1
- 否定(NOT)最终结果中的所有位
返回结果:
/li>
我不得不在内联汇编中编写它,因为我不知道不使用汇编程序来测试进位标志的任何方法。有谁知道这样做的方法?
assembly - Intel 8080:乘法溢出
我有一个 8080 处理器的模拟器。我需要编写一个程序,它可以通过移位和加法操作将两个两位数相乘(结果我可以期待四位数)
据我所知,intel-8080 中的所有数学运算都是在寄存器“A”中进行的,但它只能包含两位数。如果我多个 'ff' 和 'ff',我会溢出。如何绕过这个问题?谷歌说,对于我的任务,有进位标志,如果发生溢出,它将是'1'。
但我不明白,我该如何使用它。
感谢关注。
assembly - 通过加法和减法设置和清除进位标志
我在清除进位标志时遇到困难,但我想出了一种使用减法清除它的方法,但我想知道是否有更好的方法可以与我分享如何使用加法和减法设置和清除进位标志。
这就是我必须设置和清除进位标志的内容。当我第一次从 AL 中减去 binNum2 时,我得到了 FFh 的原始值,但进位标志仍然设置,直到我再次从 AL 中减去 binNum2。然后它将 AL 设置为 FEh 并清除进位标志。
有没有人有更好的方法来清除进位标志?
assembly - ASM8086:mul、imul、进位标志和溢出标志
我理解了进位标志和溢出标志的逻辑。但是,当我读到这个程序(写在 MASM 8086 中)时,我有点困惑。
程序的目的是判断一个二次方程是否有两个不同的解、两个相等的解或根本没有解。
现在,我的疑问是:为什么前三个检查已经测试了进位标志,而最后一个检查了溢出标志?
由于在最后一个中,我们在两个有符号数字之间进行减法(正如我们所认为的那样),我们必须检查溢出标志以查看是否存在溢出(即数字是否超出区间[-2^15,2^15-1]
)。但是对于第一个,例如,我们(bb)^2
使用imul
.
所以我们认为它们是 16 位有符号数(so -2^15 <= bb <= 2^15-1
),并且如果至少一个和(在乘法算法中)打开 / 位,则乘法将/CF
位打开。OF
CF
OF
但是既然我们处理有符号数,我们不应该检查溢出标志吗?
我还注意到,因为,2^15-1=32767
如果我设置bb
为190
( 190^2=36100
) CF=0
如果bb
等于200
( 200^2=40000
) CF=1
。
这是为什么?有人可以详细解释一下吗?
PS:我用的是EMU8086。
math - 0xABCD - 0x1234 是否应该设置进位位?
当我在这里遇到这个问题时,我正在准备期末考试:
看完后,我得到了0x9999的答案,因为当你通过2的补码进行减法时,MSB上有一个进位,所以分支指令会将程序发送到loc1。我的教授说答案是 0x9997,这只有在未设置进位位时才有可能。我查了一下,似乎应该在这里设置进位位。我错过了什么还是我的教授犯了错误?
bit-manipulation - 用 2 个高 32 位整数和 2 个低 32 位整数进行 64 位加法。有没有更有效的方法来获取进位位?
假设 A 和 B 是我的低 32 位整数,而 T 是一个 32 位整数,我想表示将 A 和 B 相加的进位。我将一些快速逻辑放在一起得到 T:
它有效,但我不喜欢执行此操作所需的操作数量(3 次右移,2 次加法,2 次加法)。我真的很感谢一些有趣的专家就如何使这个更清洁/更高效的意见。谢谢!
对于我目前的问题,我仅限于在 HLSL 中可以做的事情。我不介意 SM4 和 SM5 特定的解决方案,但我也愿意接受一般可以工作的东西。
java - 计算进位标志
我正在用 Java 编写一个 x86 解释器,并有一个 Python 脚本来测试我的 x86 指令实现与使用 NASM 的真实对应物。根据这个测试,除了进位标志之外,所有标志都被正确设置。有趣的部分是:
其中U_MAX是 4294967295L(所有 32 位设置)。
我发现的所有答案都没有意识到进位和溢出是两个不同的东西。那么,如何在 Java 中正确实现进位标志呢?
assembly - 携带标志汇编语言
为什么此代码中的进位标志设置为 255
也许我把溢出和进位搞混了,但是由于 1111 1111 是二进制的 255,进位不应该只设置为 256 吗?