问题标签 [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.
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 位?
谢谢!
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
, notadd
, for adding and useslt
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.
assembly - Intel x86 Assembly - 读取和复制进位标志
我目前正在创建一个将十进制转换为二进制的程序。我目前正在使用移位方法来获取 0 和 1。
我查看了导致使用 LAHF 和 PUSHF 访问标志并设置它的其他线程;但是,我要做的就是获取进位标志的当前值并将其存储到一个寄存器中(即:当前位置的 1 或 0),稍后将其复制到数组中。由于我对 LAFH 或 PUSHF 不太熟悉,我想知道您是否可以使用 LAFH 或 PUSHF 完成我在上面提出的相同任务。
例如,我想将当前 CF 移动到 eax:mov edx,cf(我知道这不起作用,但我正在寻找类似的东西)。在我复制了 1 或 0 之后,我会将它移动到从 C++ 程序传递的数组中。
assembly - 组装 ADC(带进位添加)
考虑在
EAX:4F2252FF(大端)
EBX:00DFFC00(大端)
这个加法的结果是错误的:50024fff(大端)。它应该是 50024eff。看起来进位标志受到了影响,但为什么呢?
assembly - 进位标志添加指令不同于 adc $0?
该指令是在 x86/64 上adc $0
添加的唯一方法吗?Carry Flag
%rdx
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
?
c++ - 设置进位标志的最快方法
我正在循环对两个数组求和。我的目标是通过避免进位检查来做到这一点c = a + b; carry = (c<a)
。当我使用指令CF
进行循环测试时,我丢失了。cmp
目前,我正在使用 andJE
来STC
测试和设置之前保存的CF
. 但是跳跃需要更少的7个周期,这对于我想要的来说已经很多了。
我已经尝试过使用SAHF
(2 + 2(mov) 循环),但这不起作用。
有谁知道设置CF
更快的方法?像直接移动或类似的东西..
assembly - Masm 汇编 8086 数据字添加之间的进位标志
所以我有这个我应该解决的问题,我花了几个小时试图找出最好的方法来做到这一点,谷歌并没有太多帮助。
问题是创建一个子例程,它给出一个单词列表,然后添加另一个列表作为输出。它基本上是一种处理大量数字的方法。
我的代码适用于单词中的进位标志,但对于从一个完整单词到另一个单词的进位标志,它不起作用。第一个 16 位字(下例中的 0005)是一个标志,用于告诉我的子程序有多少字。
例如,给定以下输入,
当预期的输出是:
我的代码产生:
我相信我理解为什么大部分情况会发生这种情况,但不确定解决此问题的最佳方法。我需要一种在不同数据块之间传递 1 的低成本方法。
cuda - CUDA - PTX 进位传播
我想在 CUDA PTX 中添加两个 32 位无符号整数,并且我还想处理进位传播。我正在使用下面的代码来执行此操作,但结果与预期不符。
根据文档,add.cc.u32 d, a, b
执行整数加法并将进位值写入条件代码寄存器,即CC.CF
.
另一方面,使用进位addc.cc.u32 d, a, b
执行整数加法,并将进位值写入条件代码寄存器。该指令的语义是. 我也试过没有区别。
d = a + b + CC.CF
addc.u32 d, a, b
据我所知,如果结果不适合变量,则会出现进位,如果符号位损坏,则会发生溢出,但我正在使用无符号值。
上面的代码尝试添加0xFFFFFFFF
,0x2
当然结果不适合 32 位,那么为什么我在__uaddc(0,0)
调用后没有得到 1 呢?
编辑
Nvidia Geforce GT 520mx
Windows 7 Ultimate,64 位
Visual Studio 2012
CUDA 7.0
assembly - 如何为 16 位二进制加法设置辅助标志
我知道在执行 8 位二进制加法时,如果从第 3 位到第 4 位有进位,则辅助标志设置为 1;但是添加 2 个 16 位数字呢?我在网上看不到任何明确的答案。
我正在研究intel 8086微处理器...
例如,当我添加这两个数字时,0x30a2 和 0xf1ac
0011 0000 1010 0010 + 1111 0001 1010 1100
我不知道在哪里检查它