7

我已经开始为 Gameboy 经典游戏编写模拟器,这是继成功的 Chip 8 模拟器之后的下一个项目。

作为参考,我使用GameBoy CPU Manual

现在在第 66 页上它说:

LD  A,(HL)  7E  8

基本上,将值 HL 加载到寄存器 A 中。

但是,据我了解,这会将 16 位值 HL 加载到 8 位寄存器 A 中。这当然不适合。

你知道这是什么意思吗?所有其他参考资料都只是简单的表格,没有解释,但都说同样的话。

感谢您的回答!

4

2 回答 2

10

使用此指令, (HL) 指向的值被加载到 A 中,而不是 HL 本身的值。例如,如果 HL 的值为 0xABCD,并且地址 0xABCD 的内存值为 0x50,则 0x50 被加载到寄存器 A。

伪实现

register.A = memory.ReadByte(register.HL);
于 2016-01-04T13:37:37.327 回答
1

我认为 LD A,(HL) 是更广泛地写为 LD a,[hl] 的同义词,基于第 71 页上类似指令的文档。

  1. LDD A,(HL) 说明:将地址 HL 处的值放入 A。递减 HL。同:LD A,(HL) - DEC HL

因此,LD A,(HL) 表示“将地址 HL 处的值放入 A”。HL 是一个 16 位的值,但它引用的地址是 8 位的,所以它适合 A。

于 2016-01-04T13:39:22.203 回答