该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
前面说过,我们的CPU是8-bit的,也就是说它最多只能支持2^8=256个内存地址。我们的CPU内部将会有四个通用寄存器(General Purpose Register)R0~R3,一个PC寄存器(Program Counter Register),每个寄存器容量为8 bit。这个CPU不支持中断,意味着它不接受键盘和鼠标的输入,只会从内存里读取并执行指令。另外,CPU内部还有两个特殊的比特位,N和Z。如果某个运算的结果是负数,那么N就会被设定为1;如果某个运算结果为零,那么Z就被设定为1。我们将会在跳转指令里用到这两个比特位。
该CPU可以执行10种指令:
1. LOAD R1 (R2)
实现方法:
TMP = MEM[R2]
R1 = TMP
PC = PC + 1
这条指令是把内存地址R2处的数据读出来,然后放进寄存器R1里。接着PC寄存器加一为下一条指令做准备。看出来了吗?下面将不再有这种文字描述,全部使用简写。
2. STORE R1 (R2)
实现方法:
MEM[R2] = R1
PC = PC + 1
3. ADD R1 R2 [加法运算]
实现方法:
TMP = R1 + R2
R1 = TMP
IF (TMP == 0) Z = 1; ELSE Z = 0;
IF (TMP < 0) N = 1; ELSE N = 0;
PC = PC + 1
4. SUB R1 R2 [减法运算]
实现方法:
TMP = R1 - R2
R1 = TMP
IF (TMP == 0) Z = 1; ELSE Z = 0;
IF (TMP < 0) N = 1; ELSE N = 0;
PC = PC + 1
5. NAND R1 R2 [NAND逻辑运算]
实现方法:
TMP = R1 NAND R2
R1 = TMP
IF (TMP == 0) Z = 1; ELSE Z = 0;
IF (TMP < 0) N = 1; ELSE N = 0;
PC = PC + 1
6. ORI IMM5 [OR逻辑运算]
实现方法:
TMP = R1 OR IMM5, IMM5是一个5-bit的二进制数
R1 = TMP
IF (TMP == 0) Z = 1; ELSE Z = 0;
IF (TMP < 0) N = 1; ELSE N = 0;
PC = PC + 1
7. SHIFT L/R R1 IMM2 [移位运算]
实现方法:
IF (L) THEN TMP = R1 << IMM2
ELSE TMP = R1 >> IMM2
R1 = TMP
IF (TMP == 0) Z = 1; ELSE Z = 0;
IF (TMP < 0) N = 1; ELSE N = 0;
PC = PC + 1
8. BZ IMM4 [如果Z=1,就跳过IMM4个指令]
实现方法:
IF (Z == 1) PC = PC + 1 + (SIGN-EXTEND8(IMM4))
ELSE PC = PC + 1
9. BNZ IMM4 [跟上一条指令相反]
实现方法:
IF (Z == 0) PC = PC + 1 + (SIGN-EXTEND8(IMM4))
ELSE PC = PC + 1
10. BPZ IMM4 [若N = 0,就跳过IMM4个指令]
实现方法:
IF (N == 0) PC = PC + 1 + (SIGN-EXTEND8(IMM4))
ELSE PC = PC + 1
这些描述都比较抽象,做拼装的时候这些东西应该会表现得更具体些。