我已经开始为 Gameboy 经典游戏编写模拟器,这是继成功的 Chip 8 模拟器之后的下一个项目。
作为参考,我使用GameBoy CPU Manual。
现在在第 66 页上它说:
LD A,(HL) 7E 8
基本上,将值 HL 加载到寄存器 A 中。
但是,据我了解,这会将 16 位值 HL 加载到 8 位寄存器 A 中。这当然不适合。
你知道这是什么意思吗?所有其他参考资料都只是简单的表格,没有解释,但都说同样的话。
感谢您的回答!
我已经开始为 Gameboy 经典游戏编写模拟器,这是继成功的 Chip 8 模拟器之后的下一个项目。
作为参考,我使用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) 说明:将地址 HL 处的值放入 A。递减 HL。同:LD A,(HL) - DEC HL
因此,LD A,(HL) 表示“将地址 HL 处的值放入 A”。HL 是一个 16 位的值,但它引用的地址是 8 位的,所以它适合 A。