通过代码例子进行计算机工作流程例分析

计算机工作流程

基础知识:

cpu包括运算器和控制器

运算器:

ACC  累加,存放操作数或者结果

MQ 乘商相关寄存器存操作数或结果

ALU 算术逻辑单元

x 通用操作数寄存器,存放操作数

控制器:

PC  程序计数器 存放下一条指令地址,有自加1

IR 指令寄存器,存放当前执行指令

CU 控制单元,分析指令给出控制信号

主存储器:

存储体   

MAR address

MDR data

计算机的工作过程

int a=2,b=3,c=1,y=0;

void main(){

y=a*b+c;

}

 

1.首先,控制器里面PC读取下一条指令地址,从(PC)=0,指向第一条指令的存储地址,(PC)—>MAR,导致MAR=0;就是主存地址0,M(MAR)—>MDR.导致(MDR)=000001 0000000101  这是地址为0时,对应在存储体中的数据,放在MDR中所以MDR里面是000001 0000000101 。(MDR)—>IR  导致(IR)=000001 0000000101.类似把MDR里面的值赋给IR,IR是存放当前指令地址的。OP(IR)—>CU,就是把IR中的操作码000001送给CU,CU分析,知道000001是取数指令,AD(IR)—>MAR,把IR中的地址码部分送到MAR,(MAR)=0000000101=5, M(MAR)—>MDR.导致(MDR)=000000 0000000010=2,(MDR)—>ACC 把MDR的值送到ACC存放结果。(ACC)=2,然后取指操作后(就是完成(MDR)—>IR)PC程序计数器+1

2.在取指操作后(就是完成(MDR)—>IR),PC自加1,(PC)=1,指向第二条指令的存储地址,(PC)—>MAR,导致MAR=1;就是主存地址1,M(MAR)—>MDR.导致(MDR)=000010 0000000110,这是地址为1时,对应在存储体中的数据,放在MDR中所以MDR里面是000010 0000000110。(MDR)—>IR ,  导致(IR)=000010 0000000110.类似把MDR里面的值赋给IR,IR是存放当前指令地址的。OP(IR)—>CU,就是把IR中的操作码000010送给CU,CU分析,知道000010是乘法指令,,AD(IR)—>MAR,把IR中的地址码部分送到MAR,(MAR)=0000000110=6, M(MAR)—>MDR.导致(MDR)=000000 0000000011=3,(这就是另外一个乘数),(MDR)—>MQ,MQ是用于乘商,(MQ)=3;然后(ACC)—>x,x是通用寄存器,(x)=2, ALU实现乘法运算,两个乘数就是x,MQ,结果放在ACC,(MQ)*(x)—>ACC    (ACC)=3*2=6; (MQ的作用:当乘数过大,ACC里面放结果不够用,将结果低位放在MQ中)

3.在取指操作后(就是完成(MDR)—>IR),PC自加1,(PC程序计数器+1) (PC)=2, (PC)—>MAR, MAR=2,主存地址就是2 ,M(MAR)—>MDR.导致(MDR)=000011 0000000111,这是地址为2时,对应在存储体中的数据,放在MDR中所以MDR里面是000011 0000000111。(MDR)—>IR     (IR)=000011 0000000111,   OP(IR)—>CU,   000011送给CU,CU分析出,这是加法指令, AD(IR)—>MAR,把IR中的地址码部分送到MAR,(MAR)=0000000111=7,    M(MAR)—>MDR, (MDR)=000000 0000000001=1 ,根据前面分析出是加法,(MDR)—>x,把一个加数放到通用寄存器x,然后ALU实现加法运算,(ACC)+(x)—>ACC,导致 (ACC)=6+1=7;

4.在取指操作后(就是完成(MDR)—>IR),PC自加1,(PC程序计数器+1) (PC)=3, (PC)—>MAR,(MAR)=3; M(MAR)—>MDR.导致(MDR)=000010 0000001000,这是地址为3时,对应在存储体中的数据,放在MDR中所以MDR里面是000010 0000001000。(MDR)->IR  (IR)=000010 0000001000,   OP(IR)—>CU,   000010 送给CU,CU分析出,这是存数指令,就是把ACC的值赋给IR地址码所对应的主存地址对应的指令地址。AD(IR)->MAR,(MAR)=  0000001000=8; ( M(MAR)->MDR.就是八号主存地址对应的指令地址(MDR)=000000 0000000000  这一步操作就是把(MAR)=8对应的MDR的值拿到 ),而本次CU分析出的指令是存数指令,不需要考虑该位置之前的值,所以不需要进行这步操作。直接 (ACC)->MDR,将ACC的值放到MDR中,MDR还需要把数存到存储体中实现存数。(MDR)->地址为8的存储单元,此时存储在存储体中。

 5.在取指操作后(就是完成(MDR)—>IR),PC自加1,(PC程序计数器+1) (PC)=4,(PC)->MAR.(MAR)=4,M(MAR)->MDR,导致(MDR)=000110 0000000000,这是地址为4时,对应在存储体中的数据,放在MDR中所以MDR里面是000110 0000000000。MDR)->IR  (IR)=000110 0000000000, OP(IR)—>CU,   000110 送给CU,CU分析出,这是停机指令 ,之后就是利用中断机制通知操作系统终止该进程。

 

从(PC)=0开始

(PC)->MAR.

M(MAR)->MDR

(MDR)->IR

OP(IR)->CU        //取前面的操作码送到CU判断是什么指令

AD(IR)->MAR     //将地址码部分给MAR

M(MAR)->MDR   //地址码对应的指令地址

如果是取数

(MDR)->ACC

如果是乘法,MDR就是另外一个乘数,要放在对应乘商寄存器,而原来放在ACC的乘数要放在通用寄存器x,通过ALU实现乘法操作,结果放在ACC

(MDR)->MQ

(ACC)->x

(MQ)*(x)->ACC

如果是加法 ,MDR中就是另外一个加数,要放在通用寄存器x中

(MDR)->x

(ACC)+(x)->ACC

如果是存数

M(MAR)->MDR   //地址码对应的指令地址

这一步不需要

只需要:

(ACC)->MDR

(MDR)->存储单位为(MAR)=x的存储单元,此时存储在存储体中

如果是停机指令

从(PC)=0开始

(PC)->MAR.

M(MAR)->MDR

(MDR)->IR

OP(IR)->CU        //取前面的操作码送到CU判断是什么指令

分析出是停机指令,后续就不需要进行,采用中断机制通知操作系统终止该进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值