我正在做一个gameboy模拟器。我需要实现的其中一个CPU操作是添加一个字节。n
到堆栈指针 sp
(操作码 E8
). 如果有来自位7的携带,则需要设置携带标志。我看了一下这个操作的两个实现,它们都遵循同样的携带检测逻辑。其代码大致如下。
int result = (sp + n) & 0xFFFF
boolean carry = ((sp ^ n ^ result) & 0x100) != 0
我用几个例子研究了一下这个逻辑,确实可行,但我就是没有得到: 如何 它的工作原理。我明白 xor
工作,但它在这里的应用逻辑是什么?谢谢,我正在做一个游戏机模拟器。
加法可以写成
a + b = a ^ b ^ (c << 1)
其中 c
是每一个比特的开展(c << 1
是随身携带的)。) 这也可以作为一种方式来使用。加法.
因此,如果 a ^ b
部分又被XOR掉了,我们剩下的是 c << 1
. 其中第8位是第7位的执行。