CPU和主存储器结构
CPU:
- 运算器
- ACC(累加器)
- ALU(算数逻辑单元)
- MQ(乘商寄存器)
- X(操作数寄存器)
- 控制器
- CU(控制单元)
- IR(指令寄存器)
- PC (程序计数器)
主存储器
- M(主存储体)
- MDR(存储器数据寄存器)
- MAR(存储器地址寄存器)
指令的操作
第一条指令
取指
1:
PC
⟶
指令地址
MAR
\textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR}
PC⟶指令地址MAR,命令存储器读;
2:
0000010000001000
⟶
MDR
\textbf{0000010000001000}\overset{\textbf{}}{\longrightarrow}\textbf{MDR}
0000010000001000⟶MDR
3:
MDR
⟶
指令
IR
\textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR}
MDR⟶指令IR
分析、执行
1:
OP(IR)
⟶
操作码
CU
\textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU}
OP(IR)⟶操作码CU,得到操作码
000001
\textbf{000001}
000001,为取数指令;
2:
CU
⟶
Ad(IR)
MAR
\textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR}
CU⟶Ad(IR)MAR,地址码
0000001000
\textbf{0000001000}
0000001000,送入
MAR
\textbf{MAR}
MAR,命令存储器读;
3:
0000001000
⟶
x
MDR
⟶
x
ACC
\textbf{0000001000}\overset{{x}}{\longrightarrow}\textbf{MDR}\overset{{x}}{\longrightarrow}\textbf{ACC}
0000001000⟶xMDR⟶xACC,存储器将地址码
0000001000
\textbf{0000001000}
0000001000对应数据
x
x
x送入
MDR
\textbf{MDR}
MDR,
MDR
\textbf{MDR}
MDR再送入
ACC
\textbf{ACC}
ACC;
4:
PC+1
\textbf{PC+1}
PC+1,生成下一条指令地址。
第二条指令
取指、分析、执行…
1:
PC
⟶
指令地址
MAR
\textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR}
PC⟶指令地址MAR,命令存储器读;
2:
MDR
⟶
指令
IR
\textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR}
MDR⟶指令IR
3:
OP(IR)
⟶
操作码
CU
\textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU}
OP(IR)⟶操作码CU,得到操作码
000100
\textbf{000100}
000100,为乘法指令;
4:
CU
⟶
Ad(IR)
MAR
\textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR}
CU⟶Ad(IR)MAR,地址码
0000001001
\textbf{0000001001}
0000001001,送入
MAR
\textbf{MAR}
MAR,命令存储器读;
5:
MDR
⟶
a
ACC
\textbf{MDR}\overset{{a}}{\longrightarrow}\textbf{ACC}
MDR⟶aACC,存储器将地址码
0000001001
\textbf{0000001001}
0000001001对应数据
a
a
a送入
MDR
\textbf{MDR}
MDR,
MDR
\textbf{MDR}
MDR再送入
MQ
\textbf{MQ}
MQ;
6:将
[ACC]
\textbf{[ACC]}
[ACC]看作被乘数,方括号表示寄存器里的数据
[ACC]
→
X
\textbf{[ACC]} \rightarrow\textbf{X}
[ACC]→X
0
→
ACC
\textbf{0} \rightarrow\textbf{ACC}
0→ACC
[MQ]*[X]
→
ACC//MQ
\textbf{[MQ]*[X]} \rightarrow\textbf{ACC//MQ}
[MQ]*[X]→ACC//MQ
7:
PC+1
\textbf{PC+1}
PC+1,生成下一条指令地址。
第三条指令
取指、分析、执行…
1:
PC
⟶
指令地址
MAR
\textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR}
PC⟶指令地址MAR,命令存储器读;
2:
MDR
⟶
指令
IR
\textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR}
MDR⟶指令IR
3:
OP(IR)
⟶
操作码
CU
\textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU}
OP(IR)⟶操作码CU,得到操作码
000011
\textbf{000011}
000011,为加法指令;
4:
CU
⟶
Ad(IR)
MAR
\textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR}
CU⟶Ad(IR)MAR,地址码
0000001010
\textbf{0000001010}
0000001010,送入
MAR
\textbf{MAR}
MAR,命令存储器读;
5:
MDR
⟶
b
ACC
\textbf{MDR}\overset{{b}}{\longrightarrow}\textbf{ACC}
MDR⟶bACC,存储器将地址码
0000001010
\textbf{0000001010}
0000001010对应数据
b
b
b送入
MDR
\textbf{MDR}
MDR,
MDR
\textbf{MDR}
MDR再送入
X
\textbf{X}
X;
6:将
[ACC]
\textbf{[ACC]}
[ACC]看作被加数,方括号表示寄存器里的数据
[ACC]+[X]
→
ACC
\textbf{[ACC]+[X]} \rightarrow\textbf{ACC}
[ACC]+[X]→ACC
此时
ACC
\textbf{ACC}
ACC存储的数据为
a
x
+
b
ax+b
ax+b
7:
PC+1
\textbf{PC+1}
PC+1,生成下一条指令地址。
第四条指令
取指、分析、执行…
1:
PC
⟶
指令地址
MAR
\textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR}
PC⟶指令地址MAR,命令存储器读;
2:
MDR
⟶
指令
IR
\textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR}
MDR⟶指令IR
3:
OP(IR)
⟶
操作码
CU
\textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU}
OP(IR)⟶操作码CU,得到操作码
000100
\textbf{000100}
000100,为乘法指令;
4:
CU
⟶
Ad(IR)
MAR
\textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR}
CU⟶Ad(IR)MAR,地址码
0000001000
\textbf{0000001000}
0000001000,送入
MAR
\textbf{MAR}
MAR,命令存储器读;
5:
MDR
⟶
x
ACC
\textbf{MDR}\overset{{x}}{\longrightarrow}\textbf{ACC}
MDR⟶xACC,存储器将地址码
0000001000
\textbf{0000001000}
0000001000对应数据
x
x
x送入
MDR
\textbf{MDR}
MDR,
MDR
\textbf{MDR}
MDR再送入
MQ
\textbf{MQ}
MQ;
6:将
[ACC]
\textbf{[ACC]}
[ACC]看作被乘数,方括号表示寄存器里的数据
[ACC]
→
X
\textbf{[ACC]} \rightarrow\textbf{X}
[ACC]→X
0
→
ACC
\textbf{0} \rightarrow\textbf{ACC}
0→ACC
[MQ]*[X]
→
ACC//MQ
\textbf{[MQ]*[X]} \rightarrow\textbf{ACC//MQ}
[MQ]*[X]→ACC//MQ
此时
ACC
\textbf{ACC}
ACC存储的数据为
(
a
x
+
b
)
×
x
(ax+b)\times x
(ax+b)×x
7:
PC+1
\textbf{PC+1}
PC+1,生成下一条指令地址。
第五条指令
取指、分析、执行…
1:
PC
⟶
指令地址
MAR
\textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR}
PC⟶指令地址MAR,命令存储器读;
2:
MDR
⟶
指令
IR
\textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR}
MDR⟶指令IR
3:
OP(IR)
⟶
操作码
CU
\textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU}
OP(IR)⟶操作码CU,得到操作码
000011
\textbf{000011}
000011,为加法指令;
4:
CU
⟶
Ad(IR)
MAR
\textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR}
CU⟶Ad(IR)MAR,地址码
0000001011
\textbf{0000001011}
0000001011,送入
MAR
\textbf{MAR}
MAR,命令存储器读;
5:
MDR
⟶
c
ACC
\textbf{MDR}\overset{{c}}{\longrightarrow}\textbf{ACC}
MDR⟶cACC,存储器将地址码
0000001011
\textbf{0000001011}
0000001011对应数据
c
c
c送入
MDR
\textbf{MDR}
MDR,
MDR
\textbf{MDR}
MDR再送入
X
\textbf{X}
X;
6:将
[ACC]
\textbf{[ACC]}
[ACC]看作被加数,方括号表示寄存器里的数据
[ACC]+[X]
→
ACC
\textbf{[ACC]+[X]} \rightarrow\textbf{ACC}
[ACC]+[X]→ACC
此时
ACC
\textbf{ACC}
ACC存储的数据为
a
x
2
+
b
x
+
c
ax^2+bx+c
ax2+bx+c
7:
PC+1
\textbf{PC+1}
PC+1,生成下一条指令地址。
第六条指令
取指、分析、执行…
1:
PC
⟶
指令地址
MAR
\textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR}
PC⟶指令地址MAR,命令存储器读;
2:
MDR
⟶
指令
IR
\textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR}
MDR⟶指令IR
3:
OP(IR)
⟶
操作码
CU
\textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU}
OP(IR)⟶操作码CU,得到操作码
000010
\textbf{000010}
000010,为存数指令;
4:
CU
⟶
Ad(IR)
MAR
\textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR}
CU⟶Ad(IR)MAR,地址码
0000001100
\textbf{0000001100}
0000001100,送入
MAR
\textbf{MAR}
MAR,命令存储器写;
5:
ACC
⟶
[
A
C
C
]
MDR
\textbf{ACC}\overset{{[ACC]}}{\longrightarrow}\textbf{MDR}
ACC⟶[ACC]MDR,存储器将对应数据
[ACC]
\textbf{[ACC]}
[ACC]送入
MDR
\textbf{MDR}
MDR,将
MDR
\textbf{MDR}
MDR中的数据写入存储器地址码
0000001100
\textbf{0000001100}
0000001100中;
6:
PC+1
\textbf{PC+1}
PC+1,生成下一条指令地址。
第七条指令
取指、分析、执行…
1:
PC
⟶
指令地址
MAR
\textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR}
PC⟶指令地址MAR,命令存储器读;
2:
MDR
⟶
指令
IR
\textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR}
MDR⟶指令IR
3:
OP(IR)
⟶
操作码
CU
\textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU}
OP(IR)⟶操作码CU,得到操作码
000101
\textbf{000101}
000101,为打印指令;
4:
CU
⟶
Ad(IR)
MAR
\textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR}
CU⟶Ad(IR)MAR,地址码
0000001100
\textbf{0000001100}
0000001100,送入
MAR
\textbf{MAR}
MAR,命令存储器读;
5:
MDR
⟶
数据
IO
\textbf{MDR}\overset{{数据}}{\longrightarrow}\textbf{IO}
MDR⟶数据IO,存储器将对应数据送入
IO
\textbf{IO}
IO打印;
6:
PC+1
\textbf{PC+1}
PC+1,生成下一条指令地址。
第八条指令
取指、分析、执行…
1:
PC
⟶
指令地址
MAR
\textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR}
PC⟶指令地址MAR,命令存储器读;
2:
MDR
⟶
指令
IR
\textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR}
MDR⟶指令IR
3:
OP(IR)
⟶
操作码
CU
\textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU}
OP(IR)⟶操作码CU,得到操作码
000110
\textbf{000110}
000110,为停机指令;
4:
PC
\textbf{PC}
PC不在更新指令地址。