【计算机组成原理】计算机工作过程
高级语言
int a = 2,b = 3,c = 1,y = 0;
void main(){
y = a*b+c;
}
编译装入主存转化为机器语言
初始:(PC)=0,指向第一条指令的存储地址
#1: (PC)->MAR,导致(MAR)=0
#3: M(MAR)->MDR,导致(MDR)=0000010000000101
#4: (MDR)->IR,导致(IR)=0000010000000101
#5: OP(IR)->CU,指令的操作码送到CU,CU分析后得知,这是取数指令
#6: Ad(IR)->MAR,指令的地址码送到MAR,导致(MAR)=5
#8: M(MAR)->MDR,导致(MDR)=0000000000000010=2
#9: (MDR)->ACC,导致(ACC)=0000000000000010=2
取指令(#1~#4)
分析指令(#5)
执行取数指令(#6~#9)
上一条指令取指后PC自动加1,(PC)=1;执行后(ACC)=2
#1: (PC)->MAR,导致(MAR)=1
#3: M(MAR)->MDR,导致(MDR)=0001000000000110
#4: (MDR)->IR,导致(IR)=0001000000000110
#5: OP(IR)->CU,指令的操作码送到CU,CU分析后得知,这是乘法指令
#6: Ad(IR)->MAR,指令的地址码送到MAR,导致(MAR)=6
#8: M(MAR)->MDR,导致(MDR)=0000000000000011=3
#9: (MDR)->MQ,导致(MQ)=0000000000000010=3
#10: (ACC)->X,导致(X)=2
#11: (MA)*(X)->ACC,由ALU实现运算,导致(ACC)=6,如果乘积太大,则需要MQ辅助存储
取指令(#1~#4)
分析指令(#5)
执行乘法指令(#6~#11)
上一条指令取指后PC自动加1,(PC)=2;执行后(ACC)=6
#1: (PC)->MAR,导致(MAR)=2
#3: M(MAR)->MDR,导致(MDR)=0000110000000111
#4: (MDR)->IR,导致(IR)=0000110000000111
#5: OP(IR)->CU,指令的操作码送到CU,CU分析后得知,这是加法指令
#6: Ad(IR)->MAR,指令的地址码送到MAR,导致(MAR)=7
#8: M(MAR)->MDR,导致(MDR)=0000000000000001=1
#9: (MDR)->X,导致(X)=0000000000000001=1
#10: (ACC)+(X)->ACC,导致(ACC)=7
取指令(#1~#4)
分析指令(#5)
执行加法指令(#6~#10)
上一条指令取指后PC自动加1,(PC)=3;执行后(ACC)=7
#1: (PC)->MAR,导致(MAR)=3
#3: M(MAR)->MDR,导致(MDR)=0000100000001000
#4: (MDR)->IR,导致(IR)=0000100000001000
#5: OP(IR)->CU,指令的操作码送到CU,CU分析后得知,这是存数指令
#6: Ad(IR)->MAR,指令的地址码送到MAR,导致(MAR)=8
#7: (ACC)->MDR,导致(MDR)=7
8号存储单元变为0000000000000111
取指令(#1~#4)
分析指令(#5)
执行存数指令(#6~#7)
上一条指令取指后PC自动加1,(PC)=4
#1: (PC)->MAR,导致(MAR)=4
#3: M(MAR)->MDR,导致(MDR)=0001100000000000
#4: (MDR)->IR,导致(IR)=0001100000000000
#5: OP(IR)->CU,指令的操作码送到CU,CU分析后得知,这是停机指令
利用中断机制通知操作系统终止该进程
以上也可以看出,指令和数据以同等地位(16bit)存于存储器,可按地址寻访