问题标签 [signed-overflow]

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 回答
1899 浏览

assembly - 为什么 cmp 0x84,0x30 会触发溢出标志?

我已经玩了一段时间的汇编并查看了一些代码。其中 AL 首先设置为 0x84,然后使用 cmp AL, 0x30。该指令然后触发溢出标志。

从我读到的 CMP 应该从第一个数字中减去第二个数字,然后设置标志,在这种情况下它应该是 0x84-0x30 结果是 0x54 并且没有溢出。

0 投票
2 回答
14165 浏览

math - Z80 上的溢出和进位标志

我已经开始在我的 Z80 内核上实现 ADD A,r 组操作码。我对我认为我已经确定的进位和溢出标志有点困惑,但我想把它交给社区来检查我是否正确。

基本上,据我所知,Z80 中的 ALU 并不关心有符号/无符号操作,它只是添加位。这意味着如果将两个 8 位值相加并作为相加的结果产生一个 9 位值,则将设置进位标志。这包括添加两个负的二进制补码,例如 -20 (11101100) 和 -40 (11011000),虽然结果是 -60 (11000100),但结果实际上是一个 9 位值 1 1100 0100。这肯定意味着如果添加两个负的二进制补码值,则将始终设置进位标志,即使没有溢出条件 - 我是对的吗?

其次,我决定要检测这条指令中的溢出,我将对两个操作数的第 7 位进行异或运算,如果结果是 10000000,那么肯定没有溢出 - 如果结果是 00000000,那么可能会有溢出为符号相同,因此我会将加法结果的第 7 位与任一操作数的第 7 位进行异或运算,如果结果为 10000000,则发生溢出并设置 P/V 溢出标志。我也在这里吗?

抱歉,这个令人费解的问题,我很确定我是对的,但在我继续基于这个逻辑的无数指令之前,我需要知道。非常感谢。

0 投票
2 回答
25780 浏览

assembly - 汇编 - 进位标志 VS 溢出标志

我有下一个代码:

当我检查它时,溢出标志和进位标志将在第一次操作中设置,而在第二次操作中,只会设置溢出。

但我不明白为什么:

  1. 在无符号数中,结果为 143 (8FH),因此适合 8 位无符号数(小于 255)=> 不应设置进位标志。在有符号数中,结果为 127,适合 8 位有符号数,不应设置溢出。

怎么了?谢谢。

0 投票
2 回答
2455 浏览

assembly - 汇编语言中的 NEG 指令是否设置了溢出标志

我想知道 NEG 指令是否也会影响溢出标志。我知道它否定了变量的值,但无法确定它是否会影响溢出标志。

0 投票
2 回答
1387 浏览

assembly - 何时设置溢出标志?

谁能解释为什么这里设置了溢出标志?我了解到,如果您添加正数并获得负数,或者减去负数并获得正数,它就会被设置!

0 投票
1 回答
97 浏览

c++ - 为什么即使不涉及签名类型,std::push_heap 也会生成 -Wstrict-overflow=3 警告?

根据-Wstrict-overflow3 级的文档:

还警告[s] 关于简化比较的其他情况。例如:x + 1 > 1 被简化为 x > 0。

下面显示的 MWE 在级别 3 及以上(但不低于)以及如果优化设置为及以上但不低于以下时会引发以下警告-O2g++ 版本 9.3.0 和 10.2 展示了这一点。

$ g++ -O3 -Wall -Wextra -pedantic -std=c++17 -Wstrict-overflow=3 a.cpp
a.cpp: 在函数 'void std::push_heap(_RAIter, _RAIter) [with _RAIter = long unsigned int *]':a.cpp:8:1:警告:假设将 X +- C1 cmp C2 更改为 X cmp C2 -+ C1 [-Wstrict-overflow] 时不会发生有符号溢出

现场演示

MWE

问题

  • 这是库实现中的错误吗?我没有看到任何签名类型。
  • 如何在保持-Wstrict-overflow最高 5 级的同时解决此问题?
0 投票
1 回答
161 浏览

assembly - 为什么在这个例子中没有设置溢出标志?

我正在尝试为我的 x86 汇编课程回答教科书中的一个问题。其中一个示例要求解释为什么 over 标志会帮助您确定在这种情况下 al 的最终值是否在有效的有符号范围内。

我最初的想法是应该调用溢出标志,因为 -1 + 130 = 129,它超出了有符号 8 位整数的范围,而 al 是 EAX 寄存器的最低 8 位。但是当我在 Visual Studio 中运行此代码时,我没有看到设置了溢出标志。

0 投票
3 回答
207 浏览

assembly - 如何确定是否为混合符号二进制加法打开/关闭溢出标志?

我仍然不完全理解溢出标志,但是从我收集的信息来看,如果两个最高有效位都是正数并导致负数,反之亦然,溢出标志就会打开。但是在混合符号二进制的情况下呢?我目前的问题是 70 - -65,二进制是

我假设在这种情况下溢出标志将被打开,因为 135 超出了 -128 到 127 的范围。这是正确的,是否有更好的方法来查找溢出标志是否打开/关闭?

0 投票
1 回答
491 浏览

verilog - 了解溢出标志和进位标志之间的区别

我正在基于现有的 RISC ISA 在 verilog 中设计一个 16 位 ALU。ISA 说当操作无符号时设置进位标志,当操作有符号时设置溢出。有趣的是,ISA 实现ADDSUB指令同时对有符号和无符号数字进行操作。由于有符号与无符号只是一个解释问题,我最初的想法是做如下的事情。溢出与进位的想法只是解释问题,因此对两者使用相同的功能。

但是这个边缘情况(以 4 位显示)呢?

在这种情况下,2s 恭维的答案是正确的,不需要设置标志。但是在无符号解释中答案是不正确的,应该设置进位标志。我一直认为进位和溢出是一样的,只是解释不同,但现在我不确定了。现代 ALU 将如何处理这种极端情况?