为什么有人会按位AND在C中使用16位掩码的8位值?

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

我正在尝试用C#复制Javidx9的NES / MOS6502 CPU代码,这是一次学术练习,但我很难理解零页面寻址模式的实现背后的逻辑。具体来说,我正在查看此code

// Address Mode: Zero Page
// To save program bytes, zero page addressing allows you to absolutely address
// a location in first 0xFF bytes of address range. Clearly this only requires
// one byte instead of the usual two.
uint8_t olc6502::ZP0()
{
    addr_abs = read(pc);    
    pc++;
    addr_abs &= 0x00FF;
    return 0;
}

我很难理解为什么addr_abs &= 0x00FF;存在,uint16_t addr_abs是16位,但是uint8_t read(uint16_t a);无论如何都会返回一个8位值,因此默认情况下高8位(MOS6502是低位优先)将被00掉吗?我是否缺少有关C编译器/ x86 ISA的工作方式的信息?

c emulation
1个回答
0
投票

您是正确的addr_abs &= 0x00ff不需要。

uint16_t x = n,其中n是无符号的8位数字(在这种情况下)。 x会将其高8位清除。如@tadman所述,以前可能使用了另一种方法将值存储到addr_abs中,但并未清除高8位。

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