NTFY 超得屁(°∀°)ノ

NTFY 超得屁(°∀°)ノ

CPU和主存储器结构

CPU

  • 运算器
    • ACC(累加器)
    • ALU(算数逻辑单元)
    • MQ(乘商寄存器)
    • X(操作数寄存器)
  • 控制器
    • CU(控制单元)
    • IR(指令寄存器)
    • PC (程序计数器)

主存储器

  • M(主存储体)
  • MDR(存储器数据寄存器)
  • MAR(存储器地址寄存器)

计算机组成原理——小啃一下-LMLPHP

指令的操作

计算机组成原理——小啃一下-LMLPHP

第一条指令

取指

1: PC ⟶ 指令地址 MAR \textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR} PC指令地址MAR,命令存储器读;
2: 0000010000001000 ⟶ MDR \textbf{0000010000001000}\overset{\textbf{}}{\longrightarrow}\textbf{MDR} 0000010000001000MDR
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} CUAd(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} 0000001000xMDRxACC,存储器将地址码 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} CUAd(IR)MAR,地址码 0000001001 \textbf{0000001001} 0000001001,送入 MAR \textbf{MAR} MAR,命令存储器读;
5: MDR ⟶ a ACC \textbf{MDR}\overset{{a}}{\longrightarrow}\textbf{ACC} MDRaACC,存储器将地址码 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} 0ACC
[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} CUAd(IR)MAR,地址码 0000001010 \textbf{0000001010} 0000001010,送入 MAR \textbf{MAR} MAR,命令存储器读;
5: MDR ⟶ b ACC \textbf{MDR}\overset{{b}}{\longrightarrow}\textbf{ACC} MDRbACC,存储器将地址码 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} CUAd(IR)MAR,地址码 0000001000 \textbf{0000001000} 0000001000,送入 MAR \textbf{MAR} MAR,命令存储器读;
5: MDR ⟶ x ACC \textbf{MDR}\overset{{x}}{\longrightarrow}\textbf{ACC} MDRxACC,存储器将地址码 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} 0ACC
[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} CUAd(IR)MAR,地址码 0000001011 \textbf{0000001011} 0000001011,送入 MAR \textbf{MAR} MAR,命令存储器读;
5: MDR ⟶ c ACC \textbf{MDR}\overset{{c}}{\longrightarrow}\textbf{ACC} MDRcACC,存储器将地址码 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} CUAd(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} CUAd(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不在更新指令地址。

11-28 15:35