簡體   English   中英

為什么有人會在 C 中將 8 位值與 16 位掩碼進行按位 AND 運算?

[英]Why would someone bitwise AND an 8-bit value with a 16-bit mask in C?

我試圖在 C# 中復制 Javidx9 的 NES/MOS6502 CPU 代碼作為學術練習,但我無法理解零頁尋址模式實現背后的邏輯。 具體來說,我正在查看此代碼

// 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'd? 我是否遺漏了 C 編譯器/x86 ISA 的工作原理?

您是對的, addr_abs &= 0x00ff

uint16_t x = n其中n是一個無符號的 8 位數字(這里就是這種情況)。 x會清除它的高 8 位。 正如@tadman 所說,之前可能使用了一種不同的方法將值存儲到addr_abs ,該方法沒有清除高 8 位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM