主贴:http://www.mcbbs.net/thread-197233-1-1.html
上一教程:基础教程1
1.基本程序结构
APC中总共有4套指令集:
- CPU指令集 - 包含基础的运算指令
- AdvCPU指令集 - 包含高级CPU指令
- FPU指令集 - 包含浮点数运算指令
- 伪指令集 - 编译器提供的辅助指令
- 运算指令:
- 1 | 0x0001 | SET A,B | 设置 A 为 B
- 2 | 0x0002 | ADD A,B | 设置 A 为 A 加 B
- 3 | 0x0003 | SUB A,B | 设置 A 为 A 减 B
- 4 | 0x0004 | MUL A,B | 设置 A 为 A 乘 B
- 5 | 0x0005 | DIV A,B | 设置 A 为 A 除以 B,B为0则A不变,寄存器O为0xA
- 6 | 0x0006 | MOD A,B| 设置 A 为 A 除以 B 的余数,B为0则A不变,寄存器O为0xA
- 位操作指令:
- 7 | 0x0007 | AND A,B | 设置 A 为 A 按位与 B (位都为1结果位才为1)
- 8 | 0x0008 | BOR A,B | 设置 A 为 A 按位或 B (任意一位为1结果位就为1)
- 9 | 0x0009 | XOR A,B | 设置 A 为 A 按位异或 B (不同位为1,同位为0)
- 10 | 0x000a | SHR A,B | 设置 A 为 A 添零按位右移 B 位
- 11 | 0x000b | ASR A,B | 设置 A 为 A 按位右移 B 位
- 12 | 0x000c | SHL A,B | 设置 A 为 A 按位左移 B 位
- 比较指令:
- 13 | 0x000d | IFE A,B | 当 A 等于 B 时执行下一条指令,否则跳过
- 14 | 0x000e | IFN A,B | 当 A 不等于 B 时执行下一条指令,否则跳过
- 15 | 0x000f | IFA A,B | 当 A 大于 B 时执行下一条指令,否则跳过
- 16 | 0x0010 | IFU A,B | 当 A 小于 B 时执行下一条指令,否则跳过
- SET X,100
- SET Y,54
- SET Z,X
- MUL Z,Y
- IFA Z,1000
- SET A,0
当有大量数据需要保存的时候,寄存器就不够用了,这时候我们需要将其保存在内存中,还是上面的例子,只不过现在我们把Z替换成内存位置8192:
- SET X,100
- SET Y,54
- SET Z,X
- MUL [8192],Y
- IFA [8192],1000
- SET A,0
- SET Z,100
- MUL [8192],54
- IFA [8192],1000
- SET A,0
- if(A > 200)
- {
- B = -1
- }
- else
- {
- B = A * 10
- }
- IFA A 200
- JSR l1
- :l0
- SET B,A
- MUL B,10
- JSR l2
- :l1
- SET B,-1
- JSR l2
- :l2
APC中总共有14种字面量:
- Dec - 十进制有符号整数
- Hex - 十六进制无符号整数
- Oct - 八进制无符号整数
- Bin - 二进制无符号整数
- Reg - 寄存器
- MemReg - 寄存器索引内存
- MemDec - 十进制有符号整数索引内存
- MemHex - 十六进制无符号整数索引内存
- MemOct - 八进制无符号整数索引内存
- MemBin - 二进制无符号整数索引内存
- String - 字符串
- Char - 字符
- Lable - 标签
- Real - 浮点
(当你看到这里时某触还在继续码字)