GameBoy Z80汇编读取LY寄存器($ff44)指令异常问题咨询
GameBoy Z80汇编中直接读取LY寄存器崩溃的原因
核心原因是GameBoy搭载的LR35902(Z80定制衍生架构)不支持对$FF00-$FFFF的IO寄存器区域使用16位立即数寻址的ld a, ($nnnn)指令。
虽然标准Z80允许该寻址方式,但GameBoy的CPU做了针对性限制:
- 访问$FF00及以上的IO空间时,仅支持两种合法方式:
- 寄存器间接寻址:先通过
ld hl, $ff44让HL指向目标地址,再用ld a, (hl)读取 - 8位偏移短寻址:使用
ld a, ($FF00+n)格式(对应机器码F0 n),比如ld a, ($ff00+44)也能正确读取LY寄存器
- 寄存器间接寻址:先通过
- 你尝试的
ld a, ($ff44)属于16位立即数寻址,GameBoy CPU会错误解析这个操作,导致非法内存访问,最终触发崩溃。
而ld hl, $ff44 + ld a, (hl)完全符合GameBoy的IO访问规范,因此可以正常读取LY寄存器的值。
内容的提问来源于stack exchange,提问作者MorsaHelada
相关产品推荐
相关产品推荐

