跳到内容

超级任天堂编程/汇编入门

来自维基教科书,开放世界中的开放书籍

如果这本维基教科书可以假设你已经学习了其他形式的汇编语言,那将很方便。本教程将尝试向你介绍在尽可能低的级别上对 SNES 进行编程的实践。

寄存器

[编辑 | 编辑源代码]

寄存器是任何处理器的核心,本质上是内存中的位置,用于特殊目的。所有指令都会对这些寄存器中的一个或多个产生影响。即使是nop指令,它什么也不做,也会增加程序计数器寄存器。

通用寄存器
累加器 (A) 处理所有算术和逻辑运算。65816 的核心。
索引 (X & Y) 具有有限功能的索引寄存器
特殊用途寄存器
处理器状态 (P) 处理器标志,保存测试结果和 65816 处理状态。
堆栈 (S) 堆栈指针
直接页面 (DP) 允许 65816 以直接寻址模式访问内存
程序库 (PB) 保存当前 CPU 指令的内存库地址
程序计数器 (PC) 保存当前 CPU 指令的内存地址
数据库 (DB) 保存 CPU 正在访问的数据的内存库地址

所有 SNES 寄存器都是 8 位或 16 位。寄存器 A、X、Y 可以设置为 8 位或 16 位。

十六进制表示法

[编辑 | 编辑源代码]

在低级编程中,程序员通常以十六进制表示法键入数字。这意味着值可以有 16 为基数。换句话说,每个数字可以有 16 种可能的值:0-9、A、B、C、D、E、F。这样就可以方便地表示和操作单个位。

在 SNES 汇编中,十六进制值用 $ 前缀指定。

示例
十进制 十六进制 二进制
18 $12 %00010010
122 $7A %01111010

指令是机器代码的分解。对于 SNES,它们由一个 1 字节的操作码加上 0-3 字节的操作数组成。完整的指令可以被称为。例如,指令“ADC $3a”在内存中占用 2 个字节,如果汇编,它将被存储为“E6 3A”。

大多数至少包含 2 个字节的指令都具有不止一个寻址模式。寻址模式被置于其中,以便基本的指令可以被解释为给定各种操作数的正确方式。SNES 寻址模式可以在 65c816_reference 的末尾找到。

算术/逻辑指令

[编辑 | 编辑源代码]

大多数算术指令对 A(累加器)和另一个值执行算术运算,并将结果存储回 A。例如,加法由“ADC”表示。

ADC、SBC(减法)、AND、ORA(按位或)、EOR(按位异或)是最基本的算术指令。这些指令最常见的寻址模式是

立即寻址 ADC #$01ff 将 $01ff 加到 A。
绝对寻址 SBC $80fb 减去 DB 指定的库中的地址 80fb 处的值
绝对索引寻址 AND $a0c0, X 与绝对寻址相同,但将 X 加到地址中
等等!

另请参阅 65c816 参考:寻址模式

华夏公益教科书