计算机的工作过程,刚开始的时候(pc)=0,指向第一条指令地址
#1(pc)->(MAR)=0
#2 M(MAR)->MDR,导致(MDR)=000001 0000000101
#3(MDR)->IR,导致(IR)=000001 0000000101
#4 OP (IR)->CU,指令传给CU,CU分析得知,这是取数指令
#5 Ad(IR)->MAR, 指令地址传给MAR(MAR)=5
# 6M(MAR)->MDR,导致MDR=0000000000000010=2
#7(MDR)->ACC 导致(ACC)=000000000000010=2
取指令(#1~#3)
分析指令(#4)
执行取数指令(#6~#9)
pc会自动++,pc在取指令后就会++,也就是在#3完成后
第一条指令完成后a就完成了取数,并且进入了ACC
再完成#3后pc就会++所以pc就执行第二条语句,也就是主存地址为1的那条语句
操作码和地址吗分开,操作码传给CU,CU进行分析这是什么运算,地址码传给MAR,MAR,MAR在存储体中找到相应的6并且将这个地址的01传给MDR,MDR再传给ACC,这样ACC就接受了6的地址,并且ACC可以跟之前存过的a在经过CU的指令进行相乘,并且将ab相乘的值放到ACC中去
然后完成了#3后又可以继续进行下面的程序,pc就可以进行第三条指令,然后又可以将操作码传给CU控制单元,然后地址码再经主存储器传给ACC,然后在和上面的程序相加,再存到ACC中
然后完成了#3后又可以进行下面的程序,pc就得到了第四条指令,然后又可以将操作码传给CU控制单元,然后地址码再经主存储器传给ACC,然后再执行CU控制单元的操作。
然后完成了#3后又可以进行下面的程序,pc就可以执行第五条指令, 然后又可以将操作吗传给CU控制单元,然后地址码经主存储器传给ACC最后就,CU控制单元再操作,最后就停止了
在C语言中完成想这么完成这么复杂的机器语言,只需要简单的几条语句
int a=2,b=3,c=1,y=0;
void main ()
{
y=a*b+c;
}
机器语言就是执行的这种二进制的数
由于机器语言晦涩难懂,所以产生了一些助记符,这些助记符比机器语言好记一点,但还是比较难懂所以产生了高级语言,
高级语言是对汇编语言进行了一次升级,C++在执行的时候会先把语句编译成汇编语言,然后汇编语言会翻译成机器语言,机器语言就是计算机可以直接执行的语言
像高级语言是可以直接进行编译的,还有一些语言是解释型的,像python,JavaScript这种,它们可以直接把机器语言解释成自己能看懂的语言。
两种类型的高级语言各有各的好处,不过我更倾向于C++这种可以直接编译的语言,直接编译的语言就像是给你一篇文章,让你写出它的翻译,你写在了纸上,你下一次还可以看到。
但是python这种语言是属于那种给你一篇文章,让一个人进行翻译,是直接说出来的,但是下一次要找的时候,就没了,需要再次让它来翻译一遍