32位,小端序。
| 0 | 常量0 |
|---|---|
| 1 | 常量1 |
| 2 | 立即数 |
| 3 | 常量−1 |
| 4~F | 通用寄存器 |
| 标志 | 进位、零、溢出、符号标志 |
寄存器0~3只能作为源寄存器使用;标志寄存器不能作为源寄存器或目标寄存器直接使用。
| 适用的操作码 | 指令类型 | 字节 | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | 5 | ||||||||||||||||||
| [00, 07] | 无参 | 操作码 | ▲ | ||||||||||||||||||||
| [08, 1F] ∪ [30, 5F] | 常规 | 操作码 |
操作数
|
(立即数) | |||||||||||||||||||
| [20, 2F] | 移位 | 操作码 |
操作数
|
(立即数) | ▲ | ||||||||||||||||||
| [60, 6F] | 近跳转 | 操作码 | 偏移量 | ▲ | |||||||||||||||||||
| [70, 7F] | 远跳转 | 操作码 | 偏移量 | ▲ | |||||||||||||||||||
跳转类指令的偏移量皆是相对于之后一条指令,故十六进制编码为71 00000000的指令相当于什么都没做,而61 FE则为死循环。
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 00 | 停机 | 返回 | 清进位 | 置进位 | 空操作 | 进位取反 | 入栈 | 出栈 | 带进位循环右移 | 交换端序 | 位反转 | 位计数 | 前导零计数 | 尾缀零计数 | ||
| 10 | 位与 | 位异或 | 位或 | 测试 | ||||||||||||
| 20 | 左移 | 右移 | 算术右移 | 带符号扩展 | 循环左移 | 循环右移 | ||||||||||
| 30 | 加法 | 带进位加法 | 减法 | 带退位减法 | 反向减法 | 带退位反向减法 | 比较负 | 比较 | ||||||||
| 40 | 乘法 | 无符号除法 | 带符号除法 | 无符号取余 | 带符号取余 | 装入8 | 装入16 | 装入32 | 保存8 | 保存16 | 保存32 | |||||
| 50 | 交换 | 传送 | 无符号<则传送 | 无符号≥则传送 | =则传送 | ≠则传送 | 无符号≤则传送 | 无符号>则传送 | 带符号<则传送 | 带符号≥则传送 | 带符号≤则传送 | 带符号>则传送 | 溢出则传送 | 不溢出则传送 | ||
| 60 | 近调用 | 近跳转 | 无符号<则近跳转 | 无符号≥则近跳转 | =则近跳转 | ≠则近跳转 | 无符号≤则近跳转 | 无符号>则近跳转 | 带符号<则近跳转 | 带符号≥则近跳转 | 带符号≤则近跳转 | 带符号>则近跳转 | 溢出则近跳转 | 不溢出则近跳转 | ||
| 70 | 远调用 | 远跳转 | 无符号<则远跳转 | 无符号≥则远跳转 | =则远跳转 | ≠则远跳转 | 无符号≤则远跳转 | 无符号>则远跳转 | 带符号<则远跳转 | 带符号≥则远跳转 | 带符号≤则远跳转 | 带符号>则远跳转 | 溢出则远跳转 | 不溢出则远跳转 | ||
| 80 | ||||||||||||||||
| 90 | ||||||||||||||||
| A0 | ||||||||||||||||
| B0 | ||||||||||||||||
| C0 | ||||||||||||||||
| D0 | ||||||||||||||||
| E0 | ||||||||||||||||
| F0 | 无效 |
| 0 | 假 | ⊥ |
|---|---|---|
| 1 | 真 | ⊤ |
| 2 | 无符号< | 进位标志 |
| 3 | 无符号≥ | ¬进位标志 |
| 4 | = | 零标志 |
| 5 | ≠ | ¬零标志 |
| 6 | 无符号≤ | 进位标志 ∨ 零标志 |
| 7 | 无符号> | ¬进位标志 ∧ ¬零标志 |
| 8 | 带符号< | 符号标志 ⊕ 溢出标志 |
| 9 | 带符号≥ | ¬(符号标志 ⊕ 溢出标志) |
| A | ||
| B | ||
| C | 带符号≤ | 零标志 ∨ (符号标志 ⊕ 溢出标志) |
| D | 带符号> | ¬零标志 ∧ ¬(符号标志 ⊕ 溢出标志) |
| E | 溢出 | 溢出标志 |
| F | 不溢出 | ¬溢出标志 |
自JSON直接读入树结构,内存表示同样无环,故引用定义不以指针,而是凭借整数标识符和相对层级。为免去JSON不允许尾随逗号之烦,不用行末逗号,而用行首逗号。缩进干扰版本控制系统的判断,故也不缩进。一段简短的程序写作JSON看起来甚至比S-表达式都长太多,其实只是常用算术记号太精简带来的错觉。
编译器的Go实现使用内置的JSON库直接解析到对象。参数列表对应切片(语言中的标准列表类型),最是方便。若要以其他语言实现,也请活用内置JSON库的惯例。