最近我开始学习如何在z80 asm中为gameboy创建游戏,我知道内存中有一个寄存器($ff44)LY寄存器,我尝试使用指令“ld a,($ff44)读取该寄存器”,十六进制“3a 44 ff”,但是当我在 Gameboy 模拟器中运行游戏时,它会关闭游戏。
如果我使用指令:“ld hl, $ff44 ld a, (hl)”,我认为它有效,但为什么当我使用其他指令时它不起作用?
(抱歉,我不会说英语,所以这篇文章可能写得不好。)
最近我开始学习如何在z80 asm中为gameboy创建游戏,我知道内存中有一个寄存器($ff44)LY寄存器,我尝试使用指令“ld a,($ff44)读取该寄存器”,十六进制“3a 44 ff”,但是当我在 Gameboy 模拟器中运行游戏时,它会关闭游戏。
如果我使用指令:“ld hl, $ff44 ld a, (hl)”,我认为它有效,但为什么当我使用其他指令时它不起作用?
(抱歉,我不会说英语,所以这篇文章可能写得不好。)
GameBoy 处理器不是 z80。它也不是 Intel 8080。当然,它与这两者有很强的相似之处。
3A 操作码并不意味着
ld a, (nn)
在类似 GameBoy z80 的处理器上,它ld a, (hl-)
也表示为ldd a, (hl)
,但无论你如何编写它,它都是一条使用地址hl
然后递减的指令hl
,它不需要两个额外的代码字节作为地址。44 和 FF 将被视为额外指令,其中 FF 的意思是rst 7
。ld a, (nn)
可以直接编码,但使用不同的操作码,即 FA。GameBoy 处理器还有一些您可以使用的其他功能(z80 没有):
ld a, (0xFF00 + n)
编码为F0 n
. 与普通的相比,它可以节省空间和时间ld a, (nn)
。资料来源: