“想知道算术、逻辑、加载、存储、跳转......这些指令怎么实现的吗?话说有点儿长呢~”
指令寄存器
ALU指令
算术与逻辑运算指令对应着之前我们组装的运算器,用于执行选中的运算操作。
| 操作指令 | 含义 |
|---|
| ADD RA,RB | 将RA与RB相加,结果存入RB |
| SHR RA,RB | 将RA右移一位,结果存入RB |
| SHL RA,RB | 将RA左移一位,结果存入RB |
| NOT RA,RB | 将RA取反,结果存入RB |
| AND RA,RB | RA和RB进行与运算,结果存入RB |
| OR RA,RB | RA和RB进行或运算,结果存入RB |
| XOR RA,RB | RA和RB进行异或运算,结果存入RB |
| CMP RA,RB | 比较RA和RB |
Load和Store指令
寄存器RA用于存储内存地址,RB用于存储数据。加载指令会将指定内存地址处的内容加载到RB中;而存储指令会将RB中的数据存储到指定内存地址处。
| 操作指令 | 含义 |
|---|
| LD RA,RB | 将RA指定的RAM地址内容加载到RB |
| St RA,RB | 将RB存储到RA指定的RAM地址 |
Data指令
数据指令用于将指定数据存储到RB选择的寄存器。
| 操作指令 | 含义 |
|---|
| DATA RB,xxxx xxxx | 将这8比特存储到RB |
Jump Register 指令
RB选择的寄存器用于存储一个内存地址,这一地址处的内容是可被执行的计算机指令。跳转寄存器指令用于将RB存储的指令地址存储到指令地址寄存器(IAR)中。也就是说接下来就要跳转到那里去执行指令了。
Jump指令
在跳转指令所在内存地址的下一字节处存储一个指令地址,跳转指令用于将这一指令地址存储到指令地址寄存器(IAR),然后就会从那一地址处的指令开始执行了。
| 操作指令 | 含义 |
|---|
| JMP Addr | 跳转到下一字节存储的地址处 |
参考资料
《But How Do It Know?》 J.Clark Scott
