ics3
T1
1
\(\lfloor \log_2(32786)\rfloor = 15\)
最少 15 位。
2
- 5 位 opcode
- 两个寄存器共 6 位
- 1 位指示指令为立即数的加
- 剩 4 位立即数
补码,最大数为 \(2^3-1=7\)
3
- 5 位 opcode
- 寄存器 3 位
- 剩 8 位 PCoffset
地址范围 \([PC-256,PC+255]\)
T2
1
- Fetch 从内存中获取指令,使用 PC 中的地址。然后将PC递增,指向下一条指令。
- Decode 对获取的指令进行译码,确定操作码及相关操作数。此阶段识别要执行的操作及将要访问的寄存器或内存位置。
- Evaluate Address 如果指令需要访问内存,通过偏移量等,计算操作数的有效地址。
- Fetch Operands 从指定的寄存器或内存位置获取指令所需的操作数。
- Execute 执行指令所指定的实际操作。
- Store Result 将执行结果写回到指令指定的目标,寄存器或内存位置。
2
Opcode | Fetch | Decode | Evaluate Address | Fetch Operands | Execute | Store Result |
---|---|---|---|---|---|---|
ADD | 1 | 1 | 1 | 1 | 1 | |
AND | 1 | 1 | 1 | 1 | 1 | |
ST | 1 | 1 | 1 | 1 | 1 | 1 |
STR | 1 | 1 | 1 | 1 | 1 | 1 |
LDI | 1 | 1 | 1 | 1 | 1 | 1 |
LD | 1 | 1 | 1 | 1 | 1 | 1 |
LEA | 1 | 1 | 1 | 1 | 1 | |
BR | 1 | 1 | 1 | |||
JMP | 1 | 1 | 1 |
3
LEA:6
ADD:6
ST:106
AND:6
ADD:6
STR:205
LDI:106
总共:441
4
ADD 指令
FETCH | DECODE | EVALUATE ADDRESS | FETCH OPERANDS | EXECUTE | STORE RESULT | |
---|---|---|---|---|---|---|
PC | RW | |||||
IR | W | R | R | R | R | |
MAR | W | |||||
MDR | ||||||
MEM | R | |||||
registers | R | W | W | |||
NZP | W |
STR 指令
FETCH | DECODE | EVALUATE ADDRESS | FETCH OPERANDS | EXECUTE | STORE RESULT | |
---|---|---|---|---|---|---|
PC | RW | |||||
IR | W | R | R | R | R | R |
MAR | W | W | ||||
MDR | W | |||||
MEM | R | W | ||||
registers | R | R | ||||
NZP | W |
JMP 指令
FETCH | DECODE | EVALUATE ADDRESS | FETCH OPERANDS | EXECUTE | STORE RESULT | |
---|---|---|---|---|---|---|
PC | RW | W | ||||
IR | W | R | R | R | ||
MAR | W | |||||
MDR | ||||||
MEM | R | |||||
registers | ||||||
NZP |
5
除了前 5 个周期外,每个周期处理完一个指令。
共 995 个。
T3
1
7
2
x3000: 1101 000 000 0 00 000
x3001: 0001 000 000 1 00001
x3002: 0001 010 001 0 00 000
x3003: 0001 010 001 0 00 010
x3004: 1001 010 010 111111
x3005: 0000 010 000000001
x3006: 1111 0000 00100101
3
- 引入一个新的操作码用于 XOR 指令,将 XOR 添加到指令集
- 更新指令解码器,识别新的 XOR 操作码,并将其路由到适当的执行路径。
- 修改控制逻辑,能向 ALU 发出执行 XOR 操作的信号。
- 在 ALU 内部实现逻辑电路,添加 XOR 操作
- 更新汇编器,识别新的 XOR 指令并生成适当的机器代码。
T4
R/W | MAR | MDR |
---|---|---|
W | x4000 | 11110 |
R | x4003 | 10110 |
W | x4001 | 10110 |
R | x4002 | 01101 |
W | x4003 | 01101 |
memory1:
01101
11010
01101
10110
11110
memory2:
11110
10110
01101
10110
11110
memory3:
11110
10110
01101
01101
11110
T5
X | Does the program halt? | Value stored in R0 |
---|---|---|
000000010 | y | 2 |
000000001 | y | 3 |
000000000 | y | 6 |
111111111 | n | |
111111110 | n |