RGBDS项目中的GBZ80 CPU指令集详解
概述
本文详细解析了RGBDS汇编器支持的Game Boy Z80(GBZ80)CPU指令集。GBZ80是任天堂Game Boy和Game Boy Color掌机所使用的8位处理器,基于Zilog Z80指令集,但有一些独特的特性和限制。
指令格式说明
在GBZ80汇编中,所有以寄存器A为目的地的算术和逻辑指令都可以省略目的地寄存器A。例如:
OR A,B ; 标准写法
OR B ; 简化写法 - 效果相同
此外,CPL(取反)指令可以接受可选的A寄存器作为目的地:
CPL ; 标准写法
CPL A ; 带显式目的地 - 效果相同
指令分类详解
1. 数据传输指令
基本数据传输
LD r8,r8
:寄存器间传输(1周期)LD r8,n8
:立即数加载到寄存器(2周期)LD r16,n16
:16位立即数加载(3周期)
内存操作
LD [HL],r8
:寄存器值存入HL指向的内存(2周期)LD r8,[HL]
:从HL指向的内存加载到寄存器(2周期)LD [HLI],A
和LD [HLD],A
:带自动增/减HL指针的存储(2周期)
特殊内存区域操作
LDH
指令用于操作$FF00-$FFFF
范围的I/O寄存器:LDH [n16],A ; 存储A到I/O地址 LDH A,[C] ; 从$FF00+C加载到A
2. 算术运算指令
8位运算
ADD/ADC/SUB/SBC
:加/带进位加/减/带借位减INC/DEC
:增1/减1操作CP
:比较指令(设置标志但不保存结果)
示例:
ADD A,B ; A = A + B
ADC A,[HL] ; A = A + [HL] + 进位
CP 10 ; 比较A与10
16位运算
ADD HL,r16
:16位加法(影响H/C标志)INC/DEC r16
:16位增/减(不影响标志)
3. 逻辑运算指令
AND/OR/XOR
:按位与/或/异或CPL
:按位取反(NOT操作)
示例:
AND $0F ; 取A的低4位
XOR B ; A = A XOR B
4. 位操作指令
BIT u3,r8
:测试位(设置Z标志)SET/RES u3,r8
:设置/清除特定位
示例:
BIT 3,A ; 测试A的第3位
SET 2,[HL] ; 设置[HL]的第2位
5. 移位指令
RL/RLC/RR/RRC
:循环左/右移(带/不带进位)SLA/SRA/SRL
:算术/逻辑移位SWAP
:交换高低半字节
示例:
RL A ; 通过进位循环左移
SRL B ; B逻辑右移,最高位补0
6. 控制流指令
跳转指令
JP n16
:绝对跳转(4周期)JR e8
:相对跳转(范围-128~+127)JP HL
:跳转到HL指向的地址(1周期)
条件跳转
JP NZ,label ; Z标志为0时跳转
JR C,label ; C标志为1时相对跳转
子程序调用
CALL n16
:调用子程序(6周期)RET/RETI
:返回/从中断返回
7. 栈操作指令
PUSH r16
:压栈(4周期)POP r16
:出栈(3周期)ADD SP,e8
:SP加有符号偏移(4周期)
8. 特殊指令
DAA
:十进制调整(用于BCD运算)HALT
:低功耗模式DI/EI
:禁用/启用中断
标志位详解
GBZ80有4个主要标志位:
- Z(Zero):结果为0时置1
- N(Subtract):减法操作时置1
- H(Half Carry):低半字节进位/借位
- C(Carry):全字节进位/借位
性能考量
每条指令的周期数对Game Boy编程至关重要,因为:
- 标准模式下CPU频率为1MHz(1周期=1微秒)
- GBC双倍速模式下为2MHz
例如,LD A,[HL]
需要2周期,而LD A,[n16]
需要4周期,因此在性能敏感区域应优先使用寄存器间接寻址。
实际应用技巧
- 高效内存拷贝:
Loop:
LD A,[HLI]
LD [DE],A
INC DE
DEC BC
LD A,B
OR C
JR NZ,Loop
- 位操作技巧:
; 检查按键输入(位操作典型应用)
LD A,P1 ; 读取输入端口
BIT 0,A ; 测试A按钮
JR Z,Pressed ; 如果按下(位为0)则跳转
- 中断处理:
DI ; 禁用中断
; 关键代码段
EI ; 启用中断
RETI ; 中断返回(自动重新启用中断)
注意事项
HALT
指令的行为取决于IME标志和中断状态,使用时需特别注意EI
指令会在下一条指令执行后才真正启用中断- 16位寄存器操作(如
INC HL
)比等效的8位操作(INC H
+INC L
)更高效
通过深入理解GBZ80指令集,开发者可以编写出既高效又节省空间的Game Boy程序。掌握各指令的周期数和标志位影响是优化性能的关键。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考