寄存器指令
内容寄存器为数据计算提供储存空间。
我们可以通过寄存器指令对寄存器中储存的数值进行操作,并根据寄存器数值的变化在一定条件下改变指令运行的顺序。
0x10
写入寄存器值
向指定寄存器写入数值。
tip
运行结果可以在辅助屏的寄存器信息页面实时查看。
INST_WRITE_REG | 编号 | sOP01 | OP-1 | |
---|---|---|---|---|
将03E8 写入寄存器R1C | 10 | 00 | 1C | 03E8 |
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定寄存器编号 |
OP-1 | 0000 ~FFFF | 写入值的十六进制数值 |
0x11
复制寄存器值
复制指定寄存器值到另一个寄存器。
tip
运行结果可以在辅助屏的寄存器信息页面实时查看。
INST_REG_COPY | 编号 | sOP01 | sOP11 | ||
---|---|---|---|---|---|
将寄存器R1C 值复制到R1D | 11 | 00 | 1D | 00 | 1C |
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定目标寄存器编号 |
sOP10 | 00 | 忽略 |
sOP11 | 00 ~3F | 指定源寄存器编号 |
0x12
增减寄存器值
增加或减少指定寄存器的值。
tip
可以约定是否允许寄存器储存值溢出。
caution
如果不允许溢出,寄存器值最大增加到FFFF
,最小减少到0000
。
INST_REG_INC_DEC | 编号 | sOP00 | sOP01 | OP-1 |
---|---|---|---|---|
将寄存器R1C 值增加03E8 ,不允许溢出 | 12 | 00 | 1C | 03E8 |
将寄存器R1C 值增加0FFF ,允许溢出 | 12 | 01 | 1C | 0FFF |
假设寄存器R1C
中已经存储值FF00
,而上面第1行指令想要增加值03E8
:
计算结果应为十六进制值1 02E8
,占用17个bit。
而在寄存器存储时,如果不允许溢出,将只保留最低的16-bit,运算结果将自动修正为02E8
。
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 增加值但不允许溢出 |
01 | 增加值并允许溢出 | |
10 | 减少值但不允许溢出 | |
11 | 减少值并允许溢出 | |
sOP01 | 00 ~3F | 指定寄存器编号 |
OP-1 | 00 ~FF | 增减值 |
0x13
输出寄存器值
输出指定寄存器的值到数字端口。
INST_REG_TO_PORT | 编号 | sOP01 | ||
---|---|---|---|---|
将寄存器R04 值输出到数字端口 | 13 | 00 | 04 | 0000 |
假设寄存器R04
中已经存储值3579
:
转化为二进制则是:
只考虑最末尾一位数:
那么表示十进制值尾数9的4-bit二进制值将被输出到数字端口。
4个LED指示灯也将显示输出值对应的亮灭状态。
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定寄存器编号 |
OP-1 | 0000 | 忽略 |
0x14
指定值输入寄存器
将输入端口全部4个管脚对应的二进制值输入到指定寄存器。
tip
输入值的范围为0000
~000F
:
最大值是管脚全部输出为高时对应的二进制数1111
。
INST_PORT_TO_REG | 编号 | sOP01 | ||
---|---|---|---|---|
将输入端口对应的二进制值存储到寄存器R04 | 14 | 00 | 04 | 0000 |
假设4个输入管脚的状态为高、低、高、低,对应二进制值1010
,那么:
转换成十六进制的值则是000C
,所以写入到寄存器R04
的值就是000C
。
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定寄存器编号 |
OP-1 | 0000 | 忽略 |
0x15
逻辑运算:移位
将指定寄存器存储值向左或向右移位指定位数。
INST_BITSHIFT | 编号 | sOP00 | sOP01 | sOP11 | |
---|---|---|---|---|---|
将寄存器R07 存储值右移2位,不可循环 | 15 | 00 | 07 | 00 | 02 |
将寄存器R07 存储值左移2位,允许循环 | 15 | 11 | 07 | 00 | 02 |
假设寄存器R07
存储值是8009
,那么对应二进制值:
如果不允许循环,向右移位2位的结果是:
注意原存储值最右侧的2位数值被移出,因此执行指令后寄存器值变为2002
。
而如果允许循环,同样向右移位2位的结果就变成了:
这时存储值最右侧的2位数值被循环移位到了最左侧2位,执行指令后寄存器值变为6002
。
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 向右移位不可循环 |
01 | 向右移位允许循环 | |
10 | 向左移位不可循环 | |
11 | 向左移位允许循环 | |
sOP01 | 00 ~3F | 指定寄存器编号 |
sOP10 | 00 | 忽略 |
sOP11 | 00 ~FF | 移位位数 |
0x16
逻辑运算:按位取反
将指定寄存器存储值对应的二进制值按位取反后,将结果转换为十六进制存储到该寄存器。
INST_BIT_REVERSE | 编号 | sOP01 | ||
---|---|---|---|---|
将寄存器R07 存储值逐位取反 | 16 | 00 | 07 | 0000 |
假设寄存器R07
存储值是8009
,对应的二进制值就是:
按位将该数值取反得到:
所以,存入寄存器的新值就是7FF6
。
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定寄存器编号 |
OP-1 | 0000 | 忽略 |
0x17
逻辑运算:按位与
对2个指定寄存器存储值做按位与运算,并将结果存储到前一个寄存器中。
INST_REG_AND | 编号 | sOP01 | sOP11 | ||
---|---|---|---|---|---|
将寄存器R07 和R09 存储值进行与运算,保存结果到R07 | 17 | 00 | 07 | 00 | 09 |
假设寄存器R07
存储值是8009
、R09
存储值是FF00
,他们对应的二进制值分别是:
对两个寄存器进行按位与运算结果是:
运算结果8000
存储到寄存器R09
。
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定寄存器编号 |
sOP10 | 00 | 忽略 |
sOP11 | 00 ~3F | 指定及存储目标寄存器编号 |
0x18
逻辑运算:按位或
对2个指定寄存器存储值做按位与运算,并将结果存储到前一个寄存器中。
INST_REG_O R | 编号 | sOP01 | sOP11 | ||
---|---|---|---|---|---|
将寄存器R07 和R09 存储值进行或运算,保存结果到R07 | 18 | 00 | 07 | 00 | 09 |
假设寄存器R07
存储值是8009
、R09
存储值是FF00
,他们对应的二进制值分别是:
对两个寄存器进行按位与运算结果是:
运算结果FF09
存储到寄存器R09
。
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定寄存器编号 |
sOP10 | 00 | 忽略 |
sOP11 | 00 ~3F | 指定及存储目标寄存器编号 |
0x1A
数值运算:加法
对指定寄存器存储值做加法数值运算,并将结果存储到前一个寄存器中。
INST_REG_SUM | 编号 | sOP01 | sOP11 | ||
---|---|---|---|---|---|
计算R08 与R06 存储值的和,保存结果到R08 | 1A | 00 | 08 | 00 | 06 |
假设R08
存储值是1234
、R06
存储值是0020
。
两者相加结果是1254
,保存到前一个寄存器R08
。
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定及存储目标寄存器编号 |
sOP10 | 00 | 忽略 |
sOP11 | 00 ~3F | 指定寄存器编号 |
0x1B
数值运算:减法
对指定寄存器存储值做减法数值运算,并将结果存储到前一个寄存器中。
INST_REG_SUB | 编号 | sOP01 | sOP11 | ||
---|---|---|---|---|---|
计算R08 减R06 存储值的差,并将结果保存在R08 中 | 1B | 00 | 08 | 00 | 06 |
假设R08
存储值是1234
、R06
存储值是0020
。
前者减去后者结果是1214
,保存到前一个寄存器R08
。
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定及存储目标寄存器编号 |
sOP10 | 00 | 忽略 |
sOP11 | 00 ~3F | 指定寄存器编号 |
0x1C
数值运算:乘法
对指定寄存器存储值做乘法数值运算,并将结果存储到前一个寄存器中。
INST_REG_PROD | 编号 | sOP01 | sOP11 | ||
---|---|---|---|---|---|
计算R08 乘以R06 存储值的积,并将结果保存在R08 中 | 1C | 00 | 08 | 00 | 06 |
假设R08
存储值是1234
、R06
存储值是0020
。
两者相乘结果是2 4680
,此时发生溢出,仅保留较低的16-bit值4680
。
保存到前一个寄存器R08
。
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定及存储目标寄存器编号 |
sOP10 | 00 | 忽略 |
sOP11 | 00 ~3F | 指定寄存器编号 |
0x1D
数值运算:除法
对指定寄存器存储值做除法数值运算,并将结果存储到前一个寄存器中。
INST_REG_DIVISION | 编号 | sOP01 | sOP11 | ||
---|---|---|---|---|---|
计算R08 除以R06 存储值的商,并将结果保存在R08 中 | 1D | 00 | 08 | 00 | 06 |
假设R08
存储值是1234
、R06
存储值是0020
:
前者除以后者的结果是0091
。
保存到前一个寄存器R08
。
caution
注意这里的除法为整型数除法,只保留除法运算的商。余数则需要使用1E
指令计算得出。
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定及存储目标寄存器编号 |
sOP10 | 00 | 忽略 |
sOP11 | 00 ~3F | 指定寄存器编号 |
0x1E
数值运算:求余
对指定寄存器存储值做除法数值运算,并将余数存储到前一个寄存器中。
INST_REG_REMAINDE | 编号 | sOP01 | sOP11 | ||
---|---|---|---|---|---|
计算R08 除以R06 存储值的余数,并将结果保存在R08 中 | 1D | 00 | 08 | 00 | 06 |
假设R08
存储值是1234
、R06
存储值是0020
:
前者除以后者的余数是0014
。
保存到前一个寄存器R08
。
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定及存储目标寄存器编号 |
sOP10 | 00 | 忽略 |
sOP11 | 00 ~3F | 指定寄存器编号 |
0x1F
生成随机数
生成一个随机数并存储到指定寄存器中。
INST_REG_REMAINDE | 编号 | sOP01 | ||
---|---|---|---|---|
生成一个随机数并保存到R05 | 1F | 00 | 05 | 0000 |
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定寄存器编号 |
OP-1 | 0000 | 忽略 |
0x20
高低位:重组
将2个指定寄存器的高低位重新组合,并存储到前一个指定寄存器中。
INST_BYTE_COMPOSE | 编号 | sOP01 | sOP11 | ||
---|---|---|---|---|---|
重组R05 和R06 的高低位,并将结果保存在R05 中 | 20 | 00 | 05 | 00 | 06 |
假设寄存器R05
存储值是2450
,取高八位;
假设寄存器R06
存储值是FF00
,取低八位;
所以重组后存储到R05
的值是2400
。
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定及存储目标寄存器编号 |
sOP10 | 00 | 忽略 |
sOP11 | 00 ~3F | 指定寄存器编号 |
0x21
高低位:交换
将指定寄存器存储值的高8-bit与低8-bit交换。
INST_BYTE_SWAP | 编号 | sOP01 | ||
---|---|---|---|---|
将寄存器R05 存储值的高、低8-bit互换 | 21 | 00 | 05 | 0000 |
info
OP/sOP | 取值 | 含义 |
---|---|---|
sOP00 | 00 | 忽略 |
sOP01 | 00 ~3F | 指定寄存器编号 |
OP-1 | 0000 | 忽略 |