我正在用 Java 编写一个 x86 解释器,并有一个 Python 脚本来测试我的 x86 指令实现与使用 NASM 的真实对应物。根据这个测试,除了进位标志之外,所有标志都被正确设置。有趣的部分是:
long result;
switch (op) {
case ADD:
result = Math.abs(x) + Math.abs(y);
if (result > U_MAX)
registers.carry_flag = true;
else
registers.carry_flag = false;
break;
其中U_MAX是 4294967295L(所有 32 位设置)。
我发现的所有答案都没有意识到进位和溢出是两个不同的东西。那么,如何在 Java 中正确实现进位标志呢?