GameBoy 16位加载到8位内存

时间:2016-01-04 13:19:33

标签: emulation machine-code gameboy

我已经开始为Gameboy classic编程模拟器,这是我成功完成Chip 8 Emulator之后的下一个项目。

作为参考,我使用the GameBoy CPU Manual

现在第66页说:

LD  A,(HL)  7E  8

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

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

你知道这是怎么回事吗?所有其他参考文献只是简单的表格,没有解释,但说同样的事情。

感谢您的回答!

2 个答案:

答案 0 :(得分:7)

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

伪实现

register.A = memory.ReadByte(register.HL);

答案 1 :(得分:1)

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

  
      
  1. LDD A,(HL)   描述:   将地址HL的值放入A.递减HL。   相同:LD A,(HL) - DEC HL
  2.   

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