GameBoy 16 位加载到 8 位内存
GameBoy 16-bit load into 8-bit memory
我已经开始为 Gameboy classic 编写模拟器,这是我继成功的 Chip 8 模拟器之后的下一个项目。
作为参考,我使用 the GameBoy CPU Manual。
现在第 66 页上写着:
LD A,(HL) 7E 8
基本上,将值 HL 加载到寄存器 A。
但是,据我了解,这会将 16 位值 HL 加载到 8 位寄存器 A 中。这当然不适合。
你知道这是什么意思吗?所有其他参考资料都是简单的表格,没有解释,但说的是一样的。
感谢您的回答!
通过这条指令,(HL) 指向的值被加载到 A 中,而不是 HL 本身的值。
例如,如果 HL 的值为 0xABCD,地址 0xABCD 处的内存值为 0x50,则将 0x50 加载到寄存器 A.
伪实现
register.A = memory.ReadByte(register.HL);
我认为 LD A,(HL) 是更广泛写为 LD a,[hl] 的同义词,基于第 71 页上类似说明的文档。
- LDD A,(HL)
Description:
Put value at address HL into A. Decrement HL.
Same as: LD A,(HL) - DEC HL
所以LD A,(HL)表示"Put value at address HL into A."HL是一个16位的值,但是它引用的地址是8位,所以适合A.
我已经开始为 Gameboy classic 编写模拟器,这是我继成功的 Chip 8 模拟器之后的下一个项目。
作为参考,我使用 the GameBoy CPU Manual。
现在第 66 页上写着:
LD A,(HL) 7E 8
基本上,将值 HL 加载到寄存器 A。
但是,据我了解,这会将 16 位值 HL 加载到 8 位寄存器 A 中。这当然不适合。
你知道这是什么意思吗?所有其他参考资料都是简单的表格,没有解释,但说的是一样的。
感谢您的回答!
通过这条指令,(HL) 指向的值被加载到 A 中,而不是 HL 本身的值。 例如,如果 HL 的值为 0xABCD,地址 0xABCD 处的内存值为 0x50,则将 0x50 加载到寄存器 A.
伪实现
register.A = memory.ReadByte(register.HL);
我认为 LD A,(HL) 是更广泛写为 LD a,[hl] 的同义词,基于第 71 页上类似说明的文档。
- LDD A,(HL) Description: Put value at address HL into A. Decrement HL. Same as: LD A,(HL) - DEC HL
所以LD A,(HL)表示"Put value at address HL into A."HL是一个16位的值,但是它引用的地址是8位,所以适合A.