4.指令架构
<h2>整体架构</h2>
<ul>
<li>一般情况下,脚本运行在按键上。</li>
<li>每个按键可以看做一个单独的线程,多线程运行。</li>
<li>每个线程寄存器独立,但可通过指针访问共享内存区域。</li>
<li>每个线程有4个8位参数寄存器(参数通过按键传入,非只读,可以独立重载)、4个32位专用寄存器(作为数据暂存或指针)、1个32位A寄存器(用于累加、乘除)、1个32位B寄存器(用作除法)。</li>
</ul>
<h2>跳转控制</h2>
<ul>
<li>为更简单的进行跳转而无需计算地址,引入了FLAG。</li>
<li>可通过SET_FLAG指令将下一条指令的地址压入寄存器。</li>
<li>跳转时,如果寄存器为0则向下搜索。</li>
</ul>
<h2>寄存器</h2>
<table>
<thead>
<tr>
<th>名称</th>
<th>取值范围</th>
<th>读写</th>
<th>用法</th>
</tr>
</thead>
<tbody>
<tr>
<td>参数1~参数4</td>
<td>0~255</td>
<td>RW</td>
<td>按键传入/通用寄存器</td>
</tr>
<tr>
<td>R0~R3</td>
<td>0~4294967295</td>
<td>RW</td>
<td>通用寄存器</td>
</tr>
<tr>
<td>A</td>
<td>0~4294967295</td>
<td>RW</td>
<td>累加器/通用寄存器</td>
</tr>
<tr>
<td>B</td>
<td>0~4294967295</td>
<td>RW</td>
<td>除法寄存器/通用寄存器</td>
</tr>
<tr>
<td>DPTR</td>
<td>0~4294967295</td>
<td>RW</td>
<td>通用寄存器</td>
</tr>
<tr>
<td>P_R0~P_R3</td>
<td>?</td>
<td>RW</td>
<td>共享RAM内存区域指针</td>
</tr>
<tr>
<td>P_DPTR</td>
<td>?</td>
<td>RO</td>
<td>数据指针</td>
</tr>
<tr>
<td>IO</td>
<td>0~255</td>
<td>RO</td>
<td>IO状态,0=按下</td>
</tr>
<tr>
<td>SYS_TIME_MS</td>
<td>0~4294967295</td>
<td>RO</td>
<td>系统时间,毫秒</td>
</tr>
<tr>
<td>SYS_TIME</td>
<td>0~4294967295</td>
<td>RO</td>
<td>系统时间,秒</td>
</tr>
<tr>
<td>SYS_KB_LED</td>
<td>0~255</td>
<td>RO</td>
<td>键盘LED状态</td>
</tr>
<tr>
<td>SYS_KEY_NUM</td>
<td>0~4294967295</td>
<td>RO</td>
<td>按键计数</td>
</tr>
<tr>
<td>SYS_KEY_LAY</td>
<td>0~255</td>
<td>RW</td>
<td>键盘层级</td>
</tr>
<tr>
<td>S_SCRIPT_ADDR</td>
<td>0~4294967295</td>
<td>RO</td>
<td>当前脚本步骤地址</td>
</tr>
<tr>
<td>S_DATA_RANDOM</td>
<td>0~4294967295</td>
<td>RW</td>
<td>R:获取一个随机数 W:设置随机数种子</td>
</tr>
</tbody>
</table>