问题标签 [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.

0 投票
2 回答
664 浏览

add - 在 HLSL 中进行 64 位加法,为什么我的一种实现会产生不正确的结果?

我在 HLSL 中有 2 个不同的 64 位添加实现。如果我想设置 A += B,其中 al、ah、bl 和 bh 分别是 A 和 B 的低 32 位和高 32 位,那么我要么

(1):

或 (2):

现在,有趣的是,(1)总是产生正确的输出,而(2)则不会。鉴于(1)是一种混乱的操作(3个班次,5个加法来做一个64位+=),我更喜欢沿着(2)到(1)的路线,除了(2)不能正常工作。

作为(2)的替代方案,我尝试过:

这也不太有效(可能出于相同的原因,不管那个原因是什么,如果我有我的猜测)。

为什么(2)不能正常工作?奖励:有没有更好的方法在 HLSL 中添加 64 位?

谢谢!

0 投票
1 回答
1665 浏览

assembly - use slt to check unsigned integer addition carry flag mips

I'm new to Assembly and I know this is a fair easy question. I supposed to do unsigned integer addition for $a0 and $a2 and store the result in $v0 by checking the carry flag.

The assignment says:

Use only addu, not add, for adding and use slt for determining if the addition of two unsigned integers produced a carry, without using conditional branch instructions.

Here is my code:

#xA;

For this code, if a carry is produced, $t0 equals 1. But the question said use only slt to check the carry flag and no conditional branch instruction can be used. I'm a little bit confused about how this is gonna to work. Any help would be appreciated.

0 投票
4 回答
2235 浏览

assembly - Intel x86 Assembly - 读取和复制进位标志

我目前正在创建一个将十进制转换为二进制的程序。我目前正在使用移位方法来获取 0 和 1。

我查看了导致使用 LAHF 和 PUSHF 访问标志并设置它的其他线程;但是,我要做的就是获取进位标志的当前值并将其存储到一个寄存器中(即:当前位置的 1 或 0),稍后将其复制到数组中。由于我对 LAFH 或 PUSHF 不太熟悉,我想知道您是否可以使用 LAFH 或 PUSHF 完成我在上面提出的相同任务。

例如,我想将当前 CF 移动到 eax:mov edx,cf(我知道这不起作用,但我正在寻找类似的东西)。在我复制了 1 或 0 之后,我会将它移动到从 C++ 程序传递的数组中。

0 投票
1 回答
907 浏览

assembly - 组装 ADC(带进位添加)

考虑在

EAX:4F2252FF(大端)

EBX:00DFFC00(大端)

这个加法的结果是错误的:50024fff(大端)。它应该是 50024eff。看起来进位标志受到了影响,但为什么呢?

0 投票
1 回答
117 浏览

assembly - 进位标志添加指令不同于 adc $0?

该指令是在 x86/64 上adc $0添加的唯一方法吗?Carry Flag%rdx

0 投票
2 回答
1253 浏览

msp430 - Carry bit in msp430

I am writing simulator to microcontroller msp430. I cant understand when i should set carry bit. For example in add instruction: 1+0x7FFF setting carry bit or 1+0xFFFF?

0 投票
2 回答
1005 浏览

c++ - 设置进位标志的最快方法

我正在循环对两个数组求和。我的目标是通过避免进位检查来做到这一点c = a + b; carry = (c<a)。当我使用指令CF进行循环测试时,我丢失了。cmp

目前,我正在使用 andJESTC测试和设置之前保存的CF. 但是跳跃需要更少的7个周期,这对于我想要的来说已经很多了。

我已经尝试过使用SAHF(2 + 2(mov) 循环),但这不起作用。

有谁知道设置CF更快的方法?像直接移动或类似的东西..

0 投票
3 回答
1332 浏览

assembly - Masm 汇编 8086 数据字添加之间的进位标志

所以我有这个我应该解决的问题,我花了几个小时试图找出最好的方法来做到这一点,谷歌并没有太多帮助。

问题是创建一个子例程,它给出一个单词列表,然后添加另一个列表作为输出。它基本上是一种处理大量数字的方法。

我的代码适用单词中的进位标志,但对于从一个完整单词到另一个单词的进位标志,它不起作用。第一个 16 位字(下例中的 0005)是一个标志,用于告诉我的子程序有多少字。

例如,给定以下输入,

当预期的输出是:

我的代码产生:

我相信我理解为什么大部分情况会发生这种情况,但不确定解决此问题的最佳方法。我需要一种在不同数据块之间传递 1 的低成本方法。

0 投票
2 回答
686 浏览

cuda - CUDA - PTX 进位传播

我想在 CUDA PTX 中添加两个 32 位无符号整数,并且我还想处理进位传播。我正在使用下面的代码来执行此操作,但结果与预期不符。
根据文档add.cc.u32 d, a, b执行整数加法并将进位值写入条件代码寄存器,即CC.CF.
另一方面,使用进位addc.cc.u32 d, a, b执行整数加法,并将进位值写入条件代码寄存器。该指令的语义是. 我也试过没有区别。
d = a + b + CC.CFaddc.u32 d, a, b

据我所知,如果结果不适合变量,则会出现进位,如果符号位损坏,则会发生溢出,但我正在使用无符号值。
上面的代码尝试添加0xFFFFFFFF0x2当然结果不适合 32 位,那么为什么我在__uaddc(0,0)调用后没有得到 1 呢?

编辑

Nvidia Geforce GT 520mx
Windows 7 Ultimate,64 位
Visual Studio 2012
CUDA 7.0

0 投票
3 回答
1917 浏览

assembly - 如何为 16 位二进制加法设置辅助标志

我知道在执行 8 位二进制加法时,如果从第 3 位到第 4 位有进位,则辅助标志设置为 1;但是添加 2 个 16 位数字呢?我在网上看不到任何明确的答案。

我正在研究intel 8086微处理器...

例如,当我添加这两个数字时,0x30a2 和 0xf1ac

0011 0000 1010 0010 + 1111 0001 1010 1100

我不知道在哪里检查它