ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

计算机各个部件配合完成加减乘除(计组学习二)

2022-01-13 17:01:59  阅读:353  来源: 互联网

标签:ACC 运算 计组 放到 部件 MDR 指令 MAR 加减乘除


大家好,我是贺贺。

计算机组成原理系列

计算机的五大组成部分(计组学习一)
计算机各个部件配合完成加减乘除(计组学习二)

预热一下

当我们了解了计算机的五大组成部分后,下面我来聊聊计算机的各个部件是怎么配合完成加减乘除的。在进行讲解之前,先说一下什么是指令,指令是由操作码和地址码构成的,一条指令是由多条微指令构成的,或者说,一条指令是由一个微程序构成的。是不是感觉有点懵,不用担心,下面通过例子就可以理解了。先放个图,简单回忆一下,回忆不起来的可以看看往期的文章。

加法运算

加法运算想必大家都不陌生吧,但是对于计算机的加法运算,可就比较复杂了,具体的运算这篇文章暂不讨论,后续文章会进行详细讲解,这篇文章主要进行讲解各个部件是如何完成加减乘除的。首先要用到的是程序计数器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分,而英语却如他所愿,考的一塌糊涂。

标签:ACC,运算,计组,放到,部件,MDR,指令,MAR,加减乘除
来源: https://blog.csdn.net/HeZhiYing_/article/details/122474507

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有