第2页:指令表
展开二、指令表
本CPU的指令为32位定长,在内存中对齐存放。内存访问时忽略地址的最低 2bit。
CPU中包含32个 32 位通用寄存器,其中R31 为指令计数器,R30 为键盘状态寄存器。当指令运算中引用 R31时,R31 永远指向当前指令的下一条指令地址。当指令执行结果修改 R31时,程序流程即跳转。
1、数据传送指令
单寄存器指针内存读取指令:LDRs R1,R2
即以寄存器 R1 中的数值为指针访问内存,将内存中的数据传送寄存器 R2 中。两个寄存器编号可以相同。
双寄存器指针内存读取指令:LDRd R1,R2,R3
即以寄存器 R1、R2 之和为指针访问内存,将内存中的数据传送到寄存器 R3中。三个寄存器编号可以交叉。
单寄存器内存写入指令:STRs R1,R2
道理同上,以 R1 为指针,将 R2 写入内存。
双寄存器指针内存写入指令:STRd R1,R2,R3
道理同上,以 R1、R2之和为指针访问内存,将 R3 写入内存。
立即数输入指令:LDRi R1, $xx
即向寄存器 R1 中输入一个有符号整数立即数。该立即数长度 19 位,符号扩展至32位存入R1.
上述指令编码如下:
LDRs STRs LDRd STRd
0000 0100 1000 1100 => AAAA
[11][AAAA][00][R1][R2][R3][000000000] 左边 msb,右边 lsb。
LDRi R1, $int
[11][0010][00][R1][int]
例:
LDRs R1, R2 11 0000 00 00001 00000 00010 000000000
STRd R4, R5, R6 11 1100 00 00100 00101 00110 000000000
LDRi R16 , $12345 11 0010 00 10000 1001110000001100000
LDRi R7 , $ -19 11 0010 00 00111 1111111111111101101
2、算术运算及逻辑运算指令
本机器中ALU 支持 ADD SUB OR NOR AND NAND XOR NXOR 等指令,指令结构相似。
ADD R1, R2,R3 即将R1,R2中的数值相加,结果存入R3 中。三个寄存器的编号可以交叉。 SUB R1, R2, R3 即将R2-R1结果存入R3。三个寄存器编号可以交叉。
OR、NOR、AND……等其余指令类似不再赘述。
本机中移位器支持逻辑左移(BSL)、循环左移(BCL)、逻辑右移(BSR)、循环右移(BCR)以及算术右移(BAR)等指令。
BSL R1,R2,R3 即将R1 中的数值逻辑左移R2 位,将结果存入R3。三个寄存器编号可以交叉。R2中的数值忽略高位,仅关注最低 5bit。
BCL、BSR、BCR、BAR等指令同理,不再赘述。
本机中乘法器和除法器分别完成乘法和除法指令。需注意的是,乘法器与除法器指令涉及4个寄存器,两个源操作数,两个目的操作数。
MUL R1,R2,R3,R4 即将R1 R2 中的数值相乘,结果存入R3 R4中。其中R3存放结果低位,R4 存放结果高位。四个寄存器的编号可以交叉,若R3 R4编号相同,则最终寄存器中只存放结果低位。
上述指令编码如下:
[00][AAAA][F][C][R1][R2][R3][R4][A][000] (注意:A 字段有前后两组,共5bit)
ADD SUB OR NOR AND NAND XOR NXOR
00000 01000 00001 00101 11101 11001 00110 00010 => AAAAA
(本组指令可影响标志位)
BSL BSR BCL BCR BAR MUL DIV
00011 10011 01011 11011 10111 10000 10100 => AAAAA
(对本组指令使用标志影响位结果将不可预知)
指令中,F和C 各占1个bit。利用这两个指示位可实现if goto指令。
F为标志影响位,若为1,则本指令执行结果将影响标志位,若运算结果为0,则标志位为1,反之标志位为0。
C为条件执行位,若本为1,则本指令在标志位为1 时才执行,否则将跳过不执行。若本位为 0,则本条指令无条件执行。
3、屏幕控制指令
清白屏:WS 011000[其余填零]
清黑屏:BS 010100[其余填零]
刷新屏:RS 010010[其余填零]
WS和 BS用于清屏,区别是WS让全屏变亮,BS 让全屏变暗。由于显示屏利用活塞BUD 暂存画面,有时活塞可能“失去粘性”,此时应使用清白屏指令使其恢复。
刷新屏指令将RAM 中显示缓冲区里的数据显示在屏幕上。
显示缓冲区为128 字节,每4 字节对应屏幕上一行,高位对应靠左的像素,低位对应靠右的像素。靠高地址端的对应屏幕底下的像素,靠高地址端的对应屏幕上方的像素。
更多相关内容请关注:我的世界专区
责任编辑:Shy夏夏