计算机各个部件配合完成加减乘除(计组学习二)
共 1766字,需浏览 4分钟
·
2022-01-17 02:47
大家好,我是贺贺。
预热一下
当我们了解了计算机的五大组成部分后,下面我来聊聊计算机的各个部件是怎么配合完成加减乘除的。在进行讲解之前,先说一下什么是指令,指令是由操作码和地址码构成的,一条指令是由多条微指令构成的,或者说,一条指令是由一个微程序构成的。是不是感觉有点懵,不用担心,下面通过例子就可以理解了。先放个图,简单回忆一下,回忆不起来的可以看看往期的文章。
加法运算
加法运算想必大家都不陌生吧,但是对于计算机的加法运算,可就比较复杂了,具体的运算这篇文章暂不讨论,后续文章会进行详细讲解,这篇文章主要进行讲解各个部件是如何完成加减乘除的。首先要用到的是程序计数器PC,PC是记录下一条要执行的指令地址,假设此时刚好指向a+b;这行代码,需要注意的是,看似简单的一行代码是由很多条指令组成的,例如有取数指令加法指令等,另外假设数据在主存中已经存在,我们主要研究是如何实现加法运算的,各个部件的细节,在后续文章中会逐一讲解。正文开始,假设第一条指令的地址是0,PC指向0号地址。
第一步:PC的值0给MAR
第二步:通过MAR的值去存储体中取数据
第三步:把取到的数据放到MDR中(这里的数据是一条指令)
第四步:将MDR的指令放到IR中(IR中存放的是要执行的指令)
第五步:IR的操作码送到CU里,CU通过分析发现是取数指令
第六步:IR里的地址码放到MAR中
第七步:通过MAR的值去存储体取数据(也就是a的值)
第八步:把取得的数据放到MDR中
第九步:把MDR的值放到ACC累加寄存器中(至此取数完成)
上面这九步完成了一个取数的指令。其中1 ~ 4是取指令,5是分析指令,6 ~ 9是执行指令。可见,这个取数指令由9条微指令组成。需要注意的是,在这条指令取指完成后,PC的值会自动加一,也就是指向下一条指令地址,也就是+b操作,同样的,这一条指令的执行,也分为取指令,分析指令,执行指令三个阶段。与上面不同的是,取出的加数b要放到通用寄存器X中,这样好让ACC的值与X通过算术逻辑单元ALU进行加法操作,得到的结果放到ACC中。
减法、乘法、除法运算
a-b,学完加法之后,减法与之类似,需要注意的是累加器ACC中存放的是被减数a,通用寄存器X里存的是减数b,减得的结果放在ACC中。
a*b,乘法运算,累加器ACC放的是被乘数a,而乘数b放到乘商寄存器MQ中,在运算之前,累加器中的被乘数会放到通用寄存器X中(因为要执行的是乘法),并把ACC清零,此时运算是通过MQ里的b与X里的a进行乘法运算。乘得的结果高位放到ACC中,低位放到MQ中。
a/b,除法运算,累加器ACC放的是被除数a,而除数放到X中,这里需要注意的是,运算之前没有用到乘商寄存器MQ(乘商寄存器,可能只用来存乘和商吧),ACC里的被除数与X里的除数相除,所得的商放到MQ中,而余数放到ACC中。
存数指令
当我们把结果计算出来之后,要存放到主存中,而存数指令也是一条指令,指令呢,又分为三个阶段,分别是:取指令、分析指令、执行指令。假设这条指令所指的指令地址是3,也就是PC的值等于3。
取指令
第一步:将PC的值给MAR
第二步:通过MAR的值去存储体中取指令
第三步:把取到的指令放到MDR中
第四步:将MDR的指令放到IR中
分析指令
第五步:IR的操作码送到CU里,CU通过分析发现是存数指令
执行指令
第六步:IR里的地址码放到MAR中
第七步:ACC的值放到MDR中
第八步:MAR的值放到存储体中
第九步:与之对应的MDR的值也放到存储体中
这样一来,就把ACC里的值通过一条存数指令,存到了存储体中。
小七的故事
小七是个初中生,总分全靠一门物理来撑着,然而物理满分只有七十分,所以小七是个学渣,但是呢,他心里一直以为自己是个很认真很踏实的学生,他犯了一个很大的错,那就是,他以为只要把一件事情做到极致,就可以弥补其他的缺陷,就像学习,他想用70分的物理,来弥补120分的英语,然后他的物理并没有考到70分,而英语却如他所愿,考的一塌糊涂。