超级任天堂编程/汇编入门
外观
< 超级任天堂编程
如果这本维基教科书可以假设你已经学习了其他形式的汇编语言,那将很方便。本教程将尝试向你介绍在尽可能低的级别上对 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 参考:寻址模式