日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机的硬件工作原理(图片部分资源摘自王道考研资料)

發布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机的硬件工作原理(图片部分资源摘自王道考研资料) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、現代計算機的組成

?

此處主存和輔存可以理解為,內存和外存,內存的特點是讀取速度快但是不利于保存大量數據,外存的特點 是讀取速度慢,但是可以存儲大量數據

計算機在開機時不會讀取硬盤上的所有數據,開機時先讀取的是c盤的數據(系統裝在c盤),這樣可以實現計算機的開機速度快

當需要有讀取的文件時,再在內存中開辟一塊空間讀取其他地址的數據

二、計算機硬件的工作方式

?

?

?

?

?

?

?

?

?

?

?

?

* Y=a×b+b,這是高級語言程序員看到的一個視角。但事實上CPU不可能一次性完成這樣的一個復雜運算,它只能先進行乘法,然后再進行加法,這樣的兩大步驟,程序在經過編譯等連續一系列的騷操作之后,可以把這個高級語言翻譯成機器能讀得懂的機器語言,同時會把這段程序裝入儲存
1. 定義abcd4個變量
1. 這個變量存放在地址為5的這個存儲單元中,主存中以二進制的形式來存放
1. b存放在6
1. c存放在7
1. 最后計算的Y,是存放在8這個存儲單元中
- 每一條指令會分為操作碼和地址碼,這樣的兩個部分
- 初:(PC)=0,指向第一條指令的存儲地址
?? ?* 程序運行之前PC會指向0這個位置,把存放在這一位置的條指令取出來執行,寄存器的名字后面打一個括號指的是這個寄存器里邊的內容
- 1:(PC)->MAR,導致(MAR)=0
?? ?* PC存放的內容需要通過地址總線把它傳送到mar這個地址寄存器當中,導致mar這個寄存器的值變為了0
- 3:M(MAR)->MDR,導致(MDR)=000001 0000000101?
?? ?* 接下來要訪問的是0號地址所對應的這一串數據,同時控制器會通過控制總線告訴主存儲器,這次要進行的是讀操作,接下來主存儲器會根據mar記錄的這個地址信息,去存儲體里邊找出0號地址所對應的二進制數據,并且把這些二進制數據放到mdr也就是這個數據寄存器當中,這就導致了mdr這個寄存器當中,現在存放的就是想要讀取的第1條指令,一個M表示的是memory,也就是主存儲器
- 4:(MDR)->IR,導致(IR)=000001 0000000101?
?? ?* 現在CPU要的數據已經放到mdr這計算器當中了,要取走的數據是一條指令,所以這條指令也會通過數據總線把它放到ir,也就是指令寄存器當中,這就導致控制器的ir這個計算器里邊已經存放了此次要執行的指令
- 5:OP(IR)->CU,指令的操作碼送到CU,CU分析后得知,這是“取數”指令
?? ?* 這條指令的前邊6個比特是操作碼,這6個比特會被送到CU控制單元里,cu會分析這個操作,就知道0000.它對應的是一條取數的指令,所以接下來要把這個地址嗎所指明的內存單元里的這個數據取出來,并且放到ACC這個計算器當中,這是取數指令要做的事情
- 6:Ad(IR)->MAR,指令的地址碼送到MAR,導致(MAR)=5?
?? ?* 要讀取儲存的這個地址的信息,于是就需要把這個地址碼放到儲存的MAR當中,這就導致此時MAR是等于5,
- 8:M(MAR)->MDR,導致(MDR)=0000000000000010=2?
?? ?* 主存儲器根據mar指明的這個地址,去存儲體當中找出5號單元的這些數據,并且把這些數據放到MDR當中,
- 9:(MDR)->ACC,導致(ACC)=0000000000000010=2
?? ?* a的值是2好最后再控制單元的指揮下,mdr里的數據會被傳送到ACC也就累加寄存器當中,到此完成了一個取數的指令,最終導致a這個變量的值已經被我們放到ACC這個計算器當中了
- 上一條指令取指后PC自動+1,(PC)=1;執行后,(ACC)=2
?* 之前這條指令執行之后導致的效果就是PC此時等于1,然后ACC=2也就是等于a的值
- 1:(PC)->MAR,導致(MAR)=1
- 3:M(MAR)->MDR,導致(MDR)=000100 0000000110
- 4:(MDR)->IR,導致(IR)= 000100 0000000110
- 5:OP(IR)->CU,指令的操作碼送到CU, CU分析后得知,這是“乘法”指令?
?? ?* 根據程序計數器PC所指向的位置取得第2條指令,取指令的過程和之前是類似的,通過這樣的4個步驟把第2條指令放到IR寄存器當中,那取完指令之后就需要分析指定那和之前一樣,會把操作碼這個部分送到CU控制單元,然后經過CU分析之后他可以知道000100這個操作碼對應的是一個乘法操作,所以這是一條乘法指令,因此接下來CU會指揮其他部件來協調的完成這個乘法操作
- 6:Ad(IR)->MAR,指令的地址碼送到MAR,導致(MAR)=6?
?? ?* 程序Y=a×b+C,現在這一步,要完成的是a×b的操作,而a這個變量之前已經被送到ACC這個計算器里面了,所以現在這一條乘法指令的地址碼指明的是另一個乘數,b的存放位置,那b存放在6這個位置,所以這一條指定的地址碼會被送到MAR當中指明,要取出的是6號存儲單元里邊的數據,
- 8:M(MAR)->MDR,導致(MDR)=0000000000000011=3?
?? ?* 接下來儲存會根據MAR所指明的這個地址取出相應的這個數據,就把B這個變量的值放到了MDR當中,
- 9:(MDR)->MQ,導致(MQ)=0000000000000011=3
?? ?* 接下來b的值會從MDR再通過數據總線送到MQ也就是乘商寄存器當中,所以現在B的值已經放到MQ里面了
- 10:(ACC)->X,導致(X)=2?
?? ?* 接下來還需要把a的值先放到通用寄存器x當中,當這個CPU執行乘法操作的時候,它會把被乘數放到X這個通用寄存器里邊,
- 11:(MQ)*(X)àACC,由ALU實現乘法運算,導致(ACC)=6,如果乘積太大,則需要MQ輔助存儲
?? ?* 然后把乘數放到MQ這個乘商寄存器里邊,接下來CU會通過控制線告訴ALU算術邏輯單元,讓它進行乘法運算,ALU會把X和mq里邊存儲的這兩個數把它們進行一個相乘的操作,然后把最終乘得的結果放到ACC里邊,那這個操作導致ACC里面得到了a,乘以B的值,2*3得6

?? ?* 那大家會發現和前邊那一條指令相比,其實第1步到第5步這幾個步驟每一步要做的事情都是一模一樣的,只有當CU控制單元分析出這一條指令是乘法指令的時候,接下來的操作就會產生一些區別,另外和之前說的一樣,當取指令結束之后,PC的值也會自動加一

?? ?* 上一條指令取指后 (PC)=3,執行后,(ACC)=7
- 1:(PC)->MAR,導致(MAR)=3
- 3:M(MAR)->MDR,導致(MDR)=000010 0000001000?
- 4:(MDR)àIR,導致(IR)= 000010 0000001000?
- 5:OP(IR)->CU,指令的操作碼送到CU,CU分析后得知,這是“存數”指令?
- 6:Ad(IR)->MAR,指令的地址碼送到MAR,導致(MAR)=8?
- 7:(ACC)->MDR,導致(MDR)=7
- 9:(MDR)->地址為8的存儲單元,導致y=7
? * 就是PC指向了2,也就指向下一條要執行的指令,ACC里邊此時存放了上一個運算的結果,也就是a×b的值a×b等于6,接下來執行2這個地址存放了這條指令,那前邊的幾個步驟都是一樣的,通過5個步驟可以完成取指令和分析指令的操作,那CU發現這一次要執行的操作碼應該是000011這個操作嘛,對應的是一個加法操作,所以這是一條加法指令,那接下來CU會根據加法指令的這個執行步驟來指揮著其他部件協調工作好,那這次要計算的是a×B+C而a×B的結果,我們是已經存放在ACC當中,所以這個加法指定的地址碼指明的是C這個變量它的存放地址,那C是存放在7這個位置了,剛好把這個二進制數轉換成十進制就是7,因此接下來要取出7這個地址所存放的數據,那么就需要把這個地址碼把它放到MAR地址寄存器當中,接下來組成根據MAR指明的地址取出相應的這個數據,也就把C的值放到了MDR當中,讓接下來這一步會把MDR的值再傳送到通用計算機X當中,也就是說當我們進行加法運算的時候,ACC里邊會先存入被加數,然后通用計算機X當中會存放加速,也就是C的值,接下來控制單元會向ALU發送一個信號,告訴他你此次要執行的是加法操作,那么ALU算是邏輯單元,就會把ACC和X里面只放的值進行一個相加,并且把價格的結果再次存回ACC當中,因此這就導致了ACC=7,也就是把a×B+C的值存放到了ACC里邊,好,那到此為止,我們完成了第3條指令,

- 上一條指令取指后(PC)=2,執行后,(ACC)=6
- 1:(PC)->MAR,導致(MAR)=2
- 3:M(MAR)->MDR,導致(MDR)= 000011 0000000111
- 4:(MDR)àIR,導致(IR)= 000011 0000000111 - ?
- 5:OP(IR)->CU,指令的操作碼送到CU, CU分析后得知,這是“加法”指令?
- 6:Ad(IR)->MAR,指令的地址碼送到MAR,導致(MAR)=7
- 8:M(MAR)->MDR,導致(MDR)=0000000000000001=1?
- 9:(MDR)->X,導致(X)=0000000000000001=1?
- 10:(ACC)+(X)->ACC,導致(ACC)=7,由ALU實現加法運算


?? ?* 就是這個加法指令,看到前邊的5個步驟,其實和之前的兩條之內沒有任何區別。另外再取完指令之后,同樣的也會自動的進行PC +1的操作,也就是PC會指向下一條我們應該執行的指令,接下來這條指令的執行前面的這些步驟都是一樣的,根據PC記錄的這個地址取出這條指令并且放到IR指定計算器當中,然后第5個步驟會把這個指令的操作碼把它送到CU當中進行分析,然后CU分析之后發現000010這是一條純數的題目,也就是要把ACC里邊的數據把它存到地址碼所指明的存儲單元當中,那這個地址碼轉換成10進制應該是8,而把這個存儲單元剛好對應的是y這個變量的存儲位置,那現在ACC里邊存的是7,也就是a×B+C的值好,接下來執行這個純屬指令,首先會把這個指令的地址碼部分,把它送到MAR里邊用來指明此次我要存入的是哪一個存儲單元,另外還需要把ACC里邊的運算結果通過數據總線把它送到MBR當中,也就是說此時MBR里邊保存了a×B+C的值,并且才是MAR里邊指明了這個值是要存到內存地址為8的這個地方,然后接下來CU控制單元會通過控制總線告訴啊主存儲器,說我此次要進行的是一個存一個寫的操作,于是主存儲器會根據MDR所指明的地址,把MDR當中的。這個數據放到相應的位置當中,這就導致了8號存儲單元它的值變為了7,也就是我們最終想要得到的這個結果,Y=a×B+C

- 上一條指令取指后(PC)=4
- 1:(PC)àMAR,導致(MAR)=3
- 3:M(MAR)àMDR,導致(MDR)=000110 0000000000?
- 4:(MDR)àIR,導致(IR)= 000110 0000000000?
- 5:OP(IR)àCU,指令的操作碼送到CU,CU分析后得知,這是“停機”指令(利用中斷機制通知操作系統終止該進程)

?? ?* 首先需要取出指令,把這個指令把它取到ir指令寄存器當中,然后接下來要把操作碼部分送到CU里面,然后CU分析發現,000110這個操作,對應的是停機之靈,所以執行到這一步就知道我們的這段程序運行結束了,那學過操作系統的同學知道要停止一個進程的運行,需要通過系統調用或者說通過中斷機制來通知操作系統來終止這個進程,于是接下來執行的指令就不是這一系列指令,而是操作系統相關的那些指令,
?

?

總結

以上是生活随笔為你收集整理的计算机的硬件工作原理(图片部分资源摘自王道考研资料)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。