在确定携带时如何应用XOR?

问题描述 投票:1回答:1

我正在做一个gameboy模拟器。我需要实现的其中一个CPU操作是添加一个字节。n 到堆栈指针 sp (操作码 E8). 如果有来自位7的携带,则需要设置携带标志。我看了一下这个操作的两个实现,它们都遵循同样的携带检测逻辑。其代码大致如下。

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

我用几个例子研究了一下这个逻辑,确实可行,但我就是没有得到: 如何 它的工作原理。我明白 xor 工作,但它在这里的应用逻辑是什么?谢谢,我正在做一个游戏机模拟器。

bit-manipulation xor gameboy
1个回答
2
投票

加法可以写成

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

其中 c 是每一个比特的开展(c << 1 是随身携带的)。) 这也可以作为一种方式来使用。加法.

因此,如果 a ^ b 部分又被XOR掉了,我们剩下的是 c << 1. 其中第8位是第7位的执行。

© www.soinside.com 2019 - 2024. All rights reserved.