SayoDevice脚本指令


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>

页面列表

ITEM_HTML