了解CHIP8模拟器中的一段代码

Understanding a piece of code in CHIP8 emulator

本文关键字:一段 代码 CHIP8 模拟器 了解      更新时间:2023-10-16

我正在编写一个CHIP8模拟器。到目前为止,我写了所有的东西,除了操作码DXYN,我为它寻找了一些解释,我在so中发现了一个问题,并用一个代码作为答案。在阅读代码时,我被这段代码卡住了,C中说if((data & (0x80 >> x)) != 0) (data & (0x80 >> x))到底做什么?

if语句检查字节中是否设置了位#x,将0计数为最高位。

Bit#  01234567
      01001010   (0x4A has bit 1, 4 and 6 set)
(data & (0x80 >> x)) returns 0x40 for x=1
                             0x08 for x=4
                             0x02 for x=6
                             0x00 for all other values.

换句话说,对于x=1、x=4和x=6 ,if((data & (0x80 >> x)) != 0)为真

如果我们把它分开,我们就有

0x80 >> x

其将值CCD_ 6(0x80)右移CCD_。

下一部分使用上一个结果作为data的掩码,以查看它是否在data中设置了特定位。

然后将整体与零进行比较,以查看该位是否已设置。