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库的惯例。