问题标签 [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 投票
1 回答
6017 浏览

assembly - asm中的ADC指令

在下面的代码中,

第 3 行和第 4 行是干什么用的?他们在做什么?

另外,为什么代码会清除AH?(我假设是因为 AL 的“ADD”操作可能会产生进位。)

0 投票
1 回答
1022 浏览

assembly - 程序集 8086 进位标志 - 有符号数如何减等于加

我不明白什么。这个问题:

为什么携带标志不打开?它必须是 88,88 不要在 0-255 的范围内!

为什么最后是小d而不是小h?它的十进制数?

为什么-128 + 40等于168

这怎么可能?

0 投票
1 回答
100 浏览

assembly - ASSEMBLY X86 - 如何防止清除标志错误?(jc 命令)

将 DOSBOX 与 TASM 一起使用

首先,我想为这个难以理解的标题感到抱歉,我真的不知道如何称呼它,因为我自己无法定义问题,这就是我需要帮助的原因。

我试图在屏幕上显示一张闪烁的图片,只是两张几乎相同的图片,但一个对象在第二张图片中消失了,导致它通过“等待”程序闪烁。

发生的问题是在 16 个“等待”程序之后,某些东西导致了与进位标志相关的问题(我无法定义),我在互联网上搜索了一下,发现当一个位达到其限制时会发生一些事情(0Fh + 1 = 10h = 16) 发生的情况是在“openfile”过程中遇到了 jc 并显示了错误消息。我发布这个是因为我真的不明白这里的解决方案是什么,甚至什么必须修复

0 投票
1 回答
2663 浏览

arm - How to set carry flag on ARM to 0 or 1?

I couldn't find any tutorial on how to set the flags for the Carry on ARM to 1 or to 0. Can anybody help me out with that?

0 投票
1 回答
3060 浏览

assembly - 汇编 x86-64 为子指令设置进位标志

我正在阅读Richard Detmer 的《汇编语言》一书

第一章说:

A borrow occurs in the subtraction a - b when b is larger than a as unsigned numbers. Computer hardware can detect a borrow in subtraction by looking at whether a carry occurred in the corresponding addition. If there is no carry in the addition, then there is a borrow in the subtraction. If there is a carry in the addition, then there is no borrow in the subtraction.

进位标志是EFL寄存器的第 0 位。

假设我们要执行 195D - 618D = -423D 作为减法运算。有借位,因此不应设置进位标志。

以下 asm 代码编译并运行,但在 之后sub rax, 618,确实设置了进位标志。

相应的加法将是 00C3h + FD96h,这不涉及进位,因为最终的成对加法是 0 + F,没有进位,因此最终成对加法没有进位。

我不清楚这怎么可能。

任何帮助将不胜感激。

0 投票
1 回答
736 浏览

assembly - 8085中的辅助进位和进位标志

据说在8085中减法是用2的补码进行的,所以标志必须根据运算来设置。但是,在显示的图中,我无法弄清楚辅助进位标志设置为“0”的原因,进位标志也是如此。当我执行 2 的补码运算时,我发现进位 = 1(在 2 的补码中没有考虑到)并且我还发现 1 的进位从低半字节移动到高字节,所以我认为辅助进位是 1。但我发现只是对他们来说都是相反的。 在此处输入图像描述

同样在下面显示的第二种情况下,我手动将进位设置为零,而进位标志设置为 1。 在此处输入图像描述

0 投票
1 回答
305 浏览

flags - 8085微处理器将减数转换为2的补码时进位标志是否补码?

我正在学习网络课程,并找到了一个解释减法运算的示例。在那个例子中,

A= A5H , B= 9BH

并且执行了操作SUB B。

由于8085微处理器中的减法运算是通过将减数转换为2的补码然后将其与被减数相加,因此得到的答案是A =(0000 1010)2 (见图)

由于操作后产生了进位是很明显的,所以必须设置CY标志,即进位标志。但他们解释如下:

“CY 位似乎是‘1’。但它是补码后存储的。因此,CY 位存储为‘0’。”

我不明白为什么要称赞carry flag?是因为减数被转换为2的补码还是其他什么?

0 投票
1 回答
238 浏览

assembly - 汇编——在实际汇编编程中使用进位和溢出标志

http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt上阅读后之后,我了解到进位标志用于指示一些“数据丢失”/“越界”,溢出标志用于表示“最高有效位是开/关的,而它们之前是关/开的”。我还看到了另一个在检查有符号/无符号数字标志时给出提示的答案:

“在处理带符号的数字和携带无符号的标志时检查负和溢出标志。” (很抱歉,我无法再次找到该答案以供参考)

我了解标志的关联,但据我所知,标志检查示例的情况仅表明标志何时设置,我并不真正了解进位标志和溢出标志在错误检查之外的用途。

例如jaand的标志jg,我读了一个答案,上面写着:

如果 CF = 0 且 ZF = 0 则 ja 跳转 jg 如果 ZF = 0 且 SF = OF 则跳转

( JA和JG在汇编中的区别

我了解零标志的用途(检查它们是否不相等),但在 CF 和 SF/OF 上并不多。

以下是我的解释,无视 ZF 作为先决条件

ja (unsigned):如果 CF = 0,则没有从第一个操作数中“借出”减法。因此,如果 ZF = 0,则比较为真。

jg (signed): 如果 SF(我相信我们称之为负标志)和 OF(我们称之为 oVerflow 标志)都是 0,这意味着两个操作数都是正的,结果也是正的,表示 lhs >= rhs ;无法理解它们同时为 1 或 SF != OF 的情况,因为我看不出这如何表明 lhs >= rhs 和 lhs < rhs。

编辑:我一直在测试 SF = 1 和 OF = 1 的情况,但我只遇到过它们都等于 0 的情况。因此我不明白为什么 SF = OF 可以作为比较。例如,1000 - 1000、1000 - 0100。或者我误解了这个比较的意图,它永远不会达到 SF = 1 和 OF = 1,只有当它们不相等时,结果才会为假?

感谢您抽出宝贵时间阅读本文以及有关在此示例中如何使用标志以及如何在通用汇编代码中使用标志的任何指针,我们将不胜感激。如果我缺少任何需要的信息,请告诉我。

0 投票
2 回答
5081 浏览

assembly - 关于进位标志的 ARM 文档的困惑

在此处的 ARM 文档中,它说:

进位发生:

...如果减法的结果是正数或零...

我从这个关于 SO 的答案中知道,当存在无符号下溢(即被减去的数字(减数)大于从(被减数)中减去的数字)时,进位标志设置为减法。

所以考虑这个例子:

比较 (CMP) 执行此处提到的减法,然后设置适当的标志。在这种情况下,r1-r2 = 5-10 = -5。由于这里有无符号下溢(5 < 10),我们希望设置进位标志。但根据 ARM 文档,结果 (-5) 不是正数或零,因此不应设置进位标志。(假设我们查看签名的结果;否则根据文档将永远不会发生进位)。

ARM文档有错吗?我的误解是什么?

0 投票
2 回答
170 浏览

assembly - 此 ARM 文档中关于进位标志的矛盾?

在此处的 ARM 文档中,它说:

C

当操作导致进位时设置为 1,否则清零。

进位发生:

...如果减法的结果是正数或零...

(显然,结果必须被视为有符号数;否则减法总是会出现进位)。

我知道进位标志在 ARM 中是“反转的”。因此,如果减法需要借位,则即使逻辑上确实发生了“进位”(即无符号下溢),也不会设置进位标志。

这对于这种情况是有意义的:

CMP 3,5

这会做3-5。由于3 < 5,发生无符号下溢并且进位标志不会在 ARM 中设置。使用 ARM 文档中的逻辑,3-5结果为-2,这是负数,因此不会发生进位,因此未设置进位标志。

现在,根据上面链接的 ARM 文档,ARM 中的LO(aka CC)条件代码表示“无符号,较低”比较,是true在 ARM 中未设置进位标志时(即C == 0)。因此,对于上面的示例,LO条件代码将为真。这也是有道理的,因为当将它们都视为无符号数时,3 小于 5。

========

现在考虑这种情况:

CMP -1,0

这会做-1-0,即0xffffffff - 0x00000000。从逻辑上讲,因为0xffffffff > 0x00000000不会发生无符号下溢,并且会设置进位标志。

但是看看 ARM 文档是怎么说的:

进位发生:

...如果减法的结果是正数或零...

根据上面的文档,由于-1-0结果-1为负数,因此不会发生进位,因此未设置进位标志。但这意味着LO条件代码为真,这意味着-1低于将0它们都视为无符号数字时的情况(就像我们在前一个场景中将它们都视为无符号数字时的情况一样低)。显然这不是真的,因为.350xffffffff > 0x00000000

当我尝试根据文档所说的内容计算进位标志逻辑时,如何解释这种矛盾?