使用0xFFFF屏蔽16位值

Nub*_*ake 5 javascript bits 16-bit masking

我正在关注Gameboy模拟的指南,在一段代码中我看到了以下内容:

while(true) 
{ 
  var op = MMU.rb(Z80._r.pc++); // Fetch instruction 
  Z80._map[op]();               // Dispatch 
  Z80._r.pc &= 65535;           // Mask PC to 16 bits 
  Z80._clock.m += Z80._r.m;     // Add time to CPU clock 
  Z80._clock.t += Z80._r.t; 
}
Run Code Online (Sandbox Code Playgroud)

如果pc是一个16位程序计数器寄存器并且65535是十六进制的0xFFFF,那么屏蔽16位值的目的是什么0xFFFF?据我所知,这什么都没做?或者它与符号位有关吗?

Mat*_*zok 3

我认为重要的是你使用 JavaScript - 它只有一种数字类型 - 浮点。但显然底层引擎可以识别何时应该使用整数 - 使用位掩码强烈建议我们将其用作整数,因为位操作通常对浮点数没有意义。它还将这个特定变量中所有使用过的坑修剪为最后 16 个 - 你怎么保证之前它没有使用早于最后 16 个的位?如果所有后续操作都假设数字是 16 位,那么如果不使用掩码,您的假设很容易被打破。