計(jì)算機(jī)各個(gè)部件配合完成加減乘除(計(jì)組學(xué)習(xí)二)
大家好,我是賀賀。
預(yù)熱一下
當(dāng)我們了解了計(jì)算機(jī)的五大組成部分后,下面我來聊聊計(jì)算機(jī)的各個(gè)部件是怎么配合完成加減乘除的。在進(jìn)行講解之前,先說一下什么是指令,指令是由操作碼和地址碼構(gòu)成的,一條指令是由多條微指令構(gòu)成的,或者說,一條指令是由一個(gè)微程序構(gòu)成的。是不是感覺有點(diǎn)懵,不用擔(dān)心,下面通過例子就可以理解了。先放個(gè)圖,簡(jiǎn)單回憶一下,回憶不起來的可以看看往期的文章。

加法運(yùn)算
加法運(yùn)算想必大家都不陌生吧,但是對(duì)于計(jì)算機(jī)的加法運(yùn)算,可就比較復(fù)雜了,具體的運(yùn)算這篇文章暫不討論,后續(xù)文章會(huì)進(jìn)行詳細(xì)講解,這篇文章主要進(jìn)行講解各個(gè)部件是如何完成加減乘除的。首先要用到的是程序計(jì)數(shù)器PC,PC是記錄下一條要執(zhí)行的指令地址,假設(shè)此時(shí)剛好指向a+b;這行代碼,需要注意的是,看似簡(jiǎn)單的一行代碼是由很多條指令組成的,例如有取數(shù)指令加法指令等,另外假設(shè)數(shù)據(jù)在主存中已經(jīng)存在,我們主要研究是如何實(shí)現(xiàn)加法運(yùn)算的,各個(gè)部件的細(xì)節(jié),在后續(xù)文章中會(huì)逐一講解。正文開始,假設(shè)第一條指令的地址是0,PC指向0號(hào)地址。
第一步:PC的值0給MAR
第二步:通過MAR的值去存儲(chǔ)體中取數(shù)據(jù)
第三步:把取到的數(shù)據(jù)放到MDR中(這里的數(shù)據(jù)是一條指令)
第四步:將MDR的指令放到IR中(IR中存放的是要執(zhí)行的指令)
第五步:IR的操作碼送到CU里,CU通過分析發(fā)現(xiàn)是取數(shù)指令
第六步:IR里的地址碼放到MAR中
第七步:通過MAR的值去存儲(chǔ)體取數(shù)據(jù)(也就是a的值)
第八步:把取得的數(shù)據(jù)放到MDR中
第九步:把MDR的值放到ACC累加寄存器中(至此取數(shù)完成)
上面這九步完成了一個(gè)取數(shù)的指令。其中1 ~ 4是取指令,5是分析指令,6 ~ 9是執(zhí)行指令??梢姡@個(gè)取數(shù)指令由9條微指令組成。需要注意的是,在這條指令取指完成后,PC的值會(huì)自動(dòng)加一,也就是指向下一條指令地址,也就是+b操作,同樣的,這一條指令的執(zhí)行,也分為取指令,分析指令,執(zhí)行指令三個(gè)階段。與上面不同的是,取出的加數(shù)b要放到通用寄存器X中,這樣好讓ACC的值與X通過算術(shù)邏輯單元ALU進(jìn)行加法操作,得到的結(jié)果放到ACC中。

減法、乘法、除法運(yùn)算
a-b,學(xué)完加法之后,減法與之類似,需要注意的是累加器ACC中存放的是被減數(shù)a,通用寄存器X里存的是減數(shù)b,減得的結(jié)果放在ACC中。
a*b,乘法運(yùn)算,累加器ACC放的是被乘數(shù)a,而乘數(shù)b放到乘商寄存器MQ中,在運(yùn)算之前,累加器中的被乘數(shù)會(huì)放到通用寄存器X中(因?yàn)橐獔?zhí)行的是乘法),并把ACC清零,此時(shí)運(yùn)算是通過MQ里的b與X里的a進(jìn)行乘法運(yùn)算。乘得的結(jié)果高位放到ACC中,低位放到MQ中。
a/b,除法運(yùn)算,累加器ACC放的是被除數(shù)a,而除數(shù)放到X中,這里需要注意的是,運(yùn)算之前沒有用到乘商寄存器MQ(乘商寄存器,可能只用來存乘和商吧),ACC里的被除數(shù)與X里的除數(shù)相除,所得的商放到MQ中,而余數(shù)放到ACC中。

存數(shù)指令
當(dāng)我們把結(jié)果計(jì)算出來之后,要存放到主存中,而存數(shù)指令也是一條指令,指令呢,又分為三個(gè)階段,分別是:取指令、分析指令、執(zhí)行指令。假設(shè)這條指令所指的指令地址是3,也就是PC的值等于3。
取指令
第一步:將PC的值給MAR
第二步:通過MAR的值去存儲(chǔ)體中取指令
第三步:把取到的指令放到MDR中
第四步:將MDR的指令放到IR中
分析指令
第五步:IR的操作碼送到CU里,CU通過分析發(fā)現(xiàn)是存數(shù)指令
執(zhí)行指令
第六步:IR里的地址碼放到MAR中
第七步:ACC的值放到MDR中
第八步:MAR的值放到存儲(chǔ)體中
第九步:與之對(duì)應(yīng)的MDR的值也放到存儲(chǔ)體中
這樣一來,就把ACC里的值通過一條存數(shù)指令,存到了存儲(chǔ)體中。

小七的故事
小七是個(gè)初中生,總分全靠一門物理來撐著,然而物理滿分只有七十分,所以小七是個(gè)學(xué)渣,但是呢,他心里一直以為自己是個(gè)很認(rèn)真很踏實(shí)的學(xué)生,他犯了一個(gè)很大的錯(cuò),那就是,他以為只要把一件事情做到極致,就可以彌補(bǔ)其他的缺陷,就像學(xué)習(xí),他想用70分的物理,來彌補(bǔ)120分的英語,然后他的物理并沒有考到70分,而英語卻如他所愿,考的一塌糊涂。
