问题标签 [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 - 是否有同时执行“xadd”和“adc reg,0”的 x86 汇编指令?
我最近了解到XADD
,我没有运气在谷歌上查找。这样的指令是否XADD
还添加了进位标志?(例如。XADC
)或者我是否被迫用两个不同的指令来做?
我在 Ubuntu 上,我在 64 位模式下使用 NASM。
assembly - 英特尔 8085 如何实际执行与先前借位的减法?
我的理解是,为了评估X - Y - borrow
,我们可以执行X - (Y + borrow)
或(X - Y) - borrow
。教科书中的例子描述了前一种方法。Y
在这种情况下,如果减数 ( ) 是并且借位设置为 1 ,会发生什么情况FFH
?
我在 GNUSim8085(http://gnusim8085.srid.ca/)中尝试了以下代码,它显示了错误的答案(CY
未设置标志)。它是 GNUSim8085 的实现问题还是由于溢出而实际上发生在物理 Intel 8085 芯片中?
然而,下一个代码A = FFH, CY=1
按预期给出了正确的答案 ( )。
assembly - 翻转时两个无符号变量之间的差异
我被困在一些数学上。我正在用 32 位 x86 程序集编程,我试图找出两个数字之间的差异,而实际上更大的数字实际上更小。
这是一个例子。
假设 EAX 为 3,EBX 为 FFFFFFFE hex。
如果我想从 EBX 中减去 EAX,我可以轻松做到:
我会得到正确的 FFFFFFFB 十六进制值。
但是,如果偶然 EAX 是 FFFFFFFE 十六进制,而 EBX 是 3 并且我想做减法,我可以尝试:
但是我会得到一个不正确的值与进位集。我想得到的是值 5。我不能使用 64 位寄存器,因为我只有 32 位系统可以使用。
我该如何解决这个问题?
我问这个是因为我创建了一个 tcp/ip 堆栈,我需要跟踪数据,它涉及到永远不会停止累积的序列号。当我的堆栈看到一个文件正在下载时,它会对当时的序列号进行快照,然后当新的数据包进来时,从旧的序列号中减去新的序列号。
当下载足够大并且序列号接近 32 位边界(FFFFFFFF hex)时,这会变得混乱
这是一个例子:
在下载开始时,假设序列号是 FFFFFF00 hex。堆栈捕获此数字。
下载 256 字节后,序列号为 00000001 hex。这对堆栈来说很混乱,因为从 1 中减去 FFFFFF00 十六进制会导致带有进位的错误数字。
assembly - 我如何使用指令来确定是否执行 MSB
如何使用指令来确定执行 MIPS 指令时是否发生了 MSB 进位: addu $t2,$t1,$t0
仅通过检查指令执行之前和/或之后寄存器的内容?有什么我可以使用的指令吗?
assembly - BT指令与进位标志CF的连接
我知道例如BT BX, 0
将寄存器的第一位传输BX
到进位标志 CF。
进位标志不是仅限于值 0 和 1,因为它是一个标志吗?
是否BT
会从寄存器的第一位更改 CF 值,即使它不包含 0 或 1?
如果有人能够在这里写下它是如何工作的,那就太好了!
verilog - 了解溢出标志和进位标志之间的区别
我正在基于现有的 RISC ISA 在 verilog 中设计一个 16 位 ALU。ISA 说当操作无符号时设置进位标志,当操作有符号时设置溢出。有趣的是,ISA 实现ADD
和SUB
指令同时对有符号和无符号数字进行操作。由于有符号与无符号只是一个解释问题,我最初的想法是做如下的事情。溢出与进位的想法只是解释问题,因此对两者使用相同的功能。
但是这个边缘情况(以 4 位显示)呢?
在这种情况下,2s 恭维的答案是正确的,不需要设置标志。但是在无符号解释中答案是不正确的,应该设置进位标志。我一直认为进位和溢出是一样的,只是解释不同,但现在我不确定了。现代 ALU 将如何处理这种极端情况?
assembly - MSP430 中的进位标志混淆
我在硬件中运行,当 'sub' exec 时,设置了进位标志。为什么?
assembly - 进位标志如何受减法影响
我正在学习计算机体系结构课程。
我的老师告诉我,有符号整数存储在二进制补码中,并且在进行减法时,例如 x - y,y 的补码会与 x 相加。
本课程还教授一些汇编语言。我了解到,如果操作从结果的最高有效位产生进位或借位,则在操作后设置进位标志。
鉴于上述知识,我对以下示例的结果感到困惑:
第一个例子是计算
, 我认为应该设置 cf
第二个例子是计算
, 我认为不应该设置 cf
为什么实际结果却恰恰相反?我是不是误会了什么?
assembly - 指令集架构会同时受益于 ADC 和 SBC,还是所有进位指令都可以重复前一种类型?
我正在创建一个只有 16 条指令(4 位操作码,4 位立即数)的指令集,因此我想知道是否可以同时使用 ADC(带进位加法)和 SBC(带进位减法)替换RWC(重复携带)。
如果最后一个加/减/rwc 指令是加法,RWC 将用作 ADC,使用它的进位。
如果最后一个加/减/rwc 指令是减法,RWC 将用作 SBC,使用其进位(也称为借位)。
简而言之,是否需要使用进位作为借位或借位作为进位(例如:“add a,b,c; sbc d,e,f;”或“sub a,b,c; adc d,e,f;")? 这种设计是否还有其他潜在的限制?