4

我正在开发一个gameboy模拟器。我需要实现的 CPU 操作之一是n向堆栈指针sp(操作码E8)添加一个字节。如果第 7 位有进位,则需要设置进位标志。我查看了此操作的两种实现,它们都遵循相同的进位检测逻辑。其代码大致如下:

int result = (sp + n) & 0xFFFF
boolean carry = ((sp ^ n ^ result) & 0x100) != 0

我已经用几个例子来研究这个逻辑,它确实有效,但我根本不明白它是如何工作的。我了解它xor的工作原理,但其应用背后的逻辑是什么?谢谢。

4

1 回答 1

4

加法可以写成:

a + b = a ^ b ^ (c << 1)

c每个位的进位在哪里(c << 1是进位)。这也可以用作实现加法的一种方式。

因此,如果该a ^ b部分再次与总和进行异或,我们就剩下c << 1. 其中的第 8 位是第 7 位的进位输出。

于 2020-05-25T17:16:59.390 回答