参考UP主乔然的计算机世界的 XASM 制作的社区拓展版本的 XASM 。 编译方法
1. 对比原UP的XASM_V1的特点
-
开放了源代码,可以供大家学习和使用。
-
跨平台支持,支持Windows、Linux、MacOS等操作系统。
-
支持位运算指令。
以下是XASM Community的指令,使用了原UP的XASM指令集并加上了位运算的指令。
| 指令 | 指令Hex | 说明 | 调用格式 |
|---|---|---|---|
| add | 0x01 | 加法运算 | add 被加数地址 加数地址 |
| sub | 0x02 | 减法运算 | sub 被减数地址 减数地址 |
| xadd | 0x03 | 乘法运算 | xadd 被乘数地址 乘数地址 |
| xsub | 0x04 | 除法运算 | xsub 被除数地址 除数地址 |
| 指令 | 指令Hex | 说明 | 调用格式 |
|---|---|---|---|
| and | 0x11 | 逻辑与运算 | and 地址1 地址2 存放布尔值的地址 |
| or | 0x12 | 逻辑或运算 | or 地址1 地址2 存放布尔值的地址 |
| not | 0x13 | 逻辑非运算 | not 地址1 存放布尔值的地址 |
| 指令 | 指令Hex | 说明 | 调用格式 |
|---|---|---|---|
| mov | 0x21 | 把地址的值改成操作数 | mov 地址 操作数 |
| copy | 0x22 | 复制地址2的值到地址1 | copy 地址1 地址2 |
| goto | 0x23 | 跳转到地址指针指向的地址 | goto 指向跳转地址的指针 |
| geta | 0x24 | 保存下一个指令的地址到指定地址 | geta 地址 |
| > | 0x25 | 大于判断,为真则跳转到指定位置 | > 地址1 地址2 指向跳转位置的地址 |
| < | 0x26 | 小于判断,为真则跳转到指定位置 | < 地址1 地址2 指向跳转位置的地址 |
| = | 0x27 | 等于判断,为真则跳转到指定位置 | = 地址1 地址2 指向跳转位置的地址 |
| lm | 0x28 | 把地址往左移(不是<<) | lm 地址 把地址往左移动的次数的地址 |
| rm | 0x29 | 把地址往右移(不是>>) | rm 地址 把地址往右移动的次数的地址 |
| exit | 0x2a | 退出 | exit |
| sto | 0xff | 忽略其中的命令不执行,但会被编译出来 | sto 数据 sto |
| 指令 | 指令Hex | 说明 | 调用格式 |
|---|---|---|---|
| putc | 0x31 | 输出一个字符 | putc 指向字符地址的地址 |
| putn | 0x32 | 输出一个数字 | putn 指向数字地址的地址 |
| puth | 0x33 | 输出一个16进制数 | puth 指向16进制数地址的地址 |
| getc | 0x34 | 获取一个字符并保存到指定的地址 | getc 字符存储的地址 |
| getn | 0x35 | 获取一个数字并保存到指定的地址 | getn 数字存储的地址 |
| geth | 0x36 | 获取一个16进制数并保存到指定的地址 | geth 16进制数存储的地址 |
| 指令 | 指令Hex | 说明 | 调用格式 |
|---|---|---|---|
| & | 0x41 | 地址1与地址2的值按位与,结果保存到地址1 | & 地址1 地址2 |
| | | 0x42 | 地址1与地址2的值按位或,结果保存到地址1 | | 地址1 地址2 |
| ^ | 0x43 | 地址1与地址2的值按位异或,结果保存到地址1 | ^ 地址1 地址2 |
| ~ | 0x44 | 把地址中的值按位取反,结果保存到地址 | ~ 地址 |
| << | 0x45 | 把数字左移后,保存到原来的地址 | << 数字的地址 左移次数的地址 |
| >> | 0x46 | 把数字右移后,保存到原来的地址 | >> 数字的地址 右移次数的地址 |
以上就是关于XASM Community里的全部信息和指令了
XASM Community还有自己的编译器,名字叫XASM Compile Community。(源码也在这个项目中公开)
通过给编译后的程序传递 --help 参数获取帮助
XASM Compile Community编译器有以下特点
-
可以识别以
//、#、--开头的注释,这意味着可以使代码可读性提高,编译成ROM文件后并不会保留注释。 -
不加指令前缀也可以使用0xXX存储单个字节的数据
-
可以使用字符串
"要保留的内容"或者'要保留的内容'来在编译成ROM文件时保留一些认为必须要保留的内容,这样就可以在ROM文件中存储一些资源了,注意: 编译后的ROM文件并不会留下"或'符号。 -
支持字符串中使用转义字符,现支持的有:
\n换行\t制表符\\反斜杠\"双引号\'单引号
-
仅支持使用0xXX 0xXX 0xXX 0xXX来存储操作数,编译成ROM文件后,会自动拼接指令后面分段存储的单字节数据并作为输入处理