您好,登錄后才能下訂單哦!
7.1 馮·諾依曼結(jié)構(gòu)
7.1.1 馮·諾依曼結(jié)構(gòu)的組成部分
(1)輸入、輸出設(shè)備
1)輸入設(shè)備:向計算機輸入數(shù)據(jù),比如,
·通過攝像頭、MIC,將圖像/聲音等轉(zhuǎn)成二進制數(shù)據(jù)給計算機
·從網(wǎng)卡輸入數(shù)據(jù)給計算機等
·其它
2)輸出設(shè)備:從計算機輸出數(shù)據(jù),比如,
·通過顯示器、揚聲器,將二進制數(shù)據(jù)翻譯稱為圖片/視頻/聲音等供人能夠識別
·或者通過網(wǎng)卡輸出數(shù)據(jù)給別的計算機
·其它
(2)存儲器:存儲程序和數(shù)據(jù)
(3)運算器:進行算術(shù)運算和邏輯運算
(4)控制器:解釋程序指令,將程序指令轉(zhuǎn)為對應(yīng)的一條一條的微指令,這些微指令會控制運算器等部件工作,進行比如,
·數(shù)據(jù)的算術(shù)、邏輯運算
·數(shù)據(jù)的搬移,比如從CPU的寄存器搬移到內(nèi)存,或者從內(nèi)存的某個位置搬移到內(nèi)存的另一個位置。
·等等
7.1.2 結(jié)構(gòu)圖
7.2 哈佛結(jié)構(gòu)
與馮諾·依曼結(jié)構(gòu)相對應(yīng)的是哈佛結(jié)構(gòu),我們會在后面詳細講解這兩種結(jié)構(gòu)之間的異同和優(yōu)缺,為了便于講解的方便,這邊還是以經(jīng)典的馮諾·依曼結(jié)構(gòu)為例,進行計算機組成結(jié)構(gòu)的介紹。
7.3 詳細結(jié)構(gòu)
7.3.1 詳細結(jié)構(gòu)圖(PC)
7.3.2 各部分簡述
計算機的詳細組成總體上可以分為三大部分,CPU,總線與接口、外部設(shè)備,核心部分主要就是cpu/總線,外部設(shè)備總體上分為輸入設(shè)備和輸出設(shè)備,而核心部分與外部設(shè)備通過接口連接。
(1) cpu
1)運算器
(a)作用:根據(jù)指令要求,對數(shù)字電信號的二進制數(shù)據(jù),進行算術(shù)運算和邏輯運算,
(b)運算器組成
·ALU:Arithmetic Logic Unit,算術(shù)運算單元,進行算數(shù)運算和邏輯運算
·(通用)寄存器組:用于存放ALU在進行算術(shù)/邏輯運算時,運算過程中涉及到的一些中間值和計算結(jié)果值。
·乘商寄存器:專門用于存放乘法和除法運算中間值和結(jié)果值。
·CVZS:各種ALU運算需要用到的標志位
C:進位、借位標志,如果有進位或者借位,C=1,否則C=0。
C的應(yīng)用舉例:請寫匯編代碼計算13208 + 34535相加后的值。
答:為了便于編程時好理解,我們先將這兩個二進制的數(shù),轉(zhuǎn)為16進制,即OX3398+0X86E7。
匯編實現(xiàn)這兩個數(shù)的相加的大致步驟如下圖所示。
總結(jié):從這個例子就可以看出,C進位/借位標志位的作用,有關(guān)借位作用同理,就不再贅述。如果你想了解跟多,我們在 后面嵌入式技術(shù)課程中,在講有關(guān)匯編時,還會將這方面的內(nèi)容。當然我們這里在強調(diào)一點,我們學習匯編并不是為了
使用會變來進行開發(fā),而是通過匯編理解計算機的工作原理。
有些同學說,我用C語言的等高級語言寫代碼,這些標志位也會用的上嗎,也會用得上,百年一起在編譯時,C語言會被翻譯為匯編,翻譯為匯編后,進行加法的算術(shù)運算時,同樣會按照同樣的方式使用C進/借位標志位。
Z:運算結(jié)果是否為零標志,如果結(jié)果為0,Z=1,否者Z=0。
應(yīng)用舉例:比較兩數(shù)是否相等,比如a=3,b=3,判斷兩數(shù)是否相等,寫成匯編程序的話,實際上就是將兩數(shù)相減(算術(shù)運算),
如果Z=1表示a和b的值相等,否則不相等。
V:溢出標志,有溢出,V=1,V=0
(1)什么是溢出
比如一個32位的寄存器,只有32位,所能裝的二進制的數(shù)的最大情況就是32個1,即11111111 11111111 11111111 11111111,如果再往里面加一個1的話,就向33為進1了,但是寄存器只有32為,不存在33為,溢出的哪個1不存在了,寄存器中的32個bit,全部是0,即00000000 00000000 00000000 00000000,因此溢出回事數(shù)值發(fā)生巨大突變,在真實的計算機中,溢出會導(dǎo)致數(shù)據(jù)的值發(fā)生錯誤,導(dǎo)致計算結(jié)果產(chǎn)生很大的問題。
(2)為什么要檢查溢出
從上面的描述中,不難看出,溢出的檢查很有意義,通過基礎(chǔ)標志V的檢查,就可以知道數(shù)據(jù)有無溢出,如果沒有溢出證明數(shù)據(jù)是沒問題的,否者數(shù)據(jù)的值可能存在問題,需要做相應(yīng)的處理。
高級語言,比如C語言實現(xiàn)兩個很大數(shù)計算時,如果數(shù)據(jù)計算機結(jié)果因為太大而溢出,當你使用這個溢出的數(shù)據(jù)時,會有溢出提醒,這個溢出提醒就是通過,C語言程序被編譯后的匯編程序,檢查V這個溢出標志位得到的,我們在后面將C語言時,還會講到有關(guān)溢出事情。
S:有時用是N,當兩個有符號數(shù)進行運算時,S=1表示運算的結(jié)果為負數(shù),S=0表示運算的結(jié)果為正數(shù)或零。
應(yīng)用舉例:比較a、b兩數(shù)的大小,寫成程序的話,我們會讓兩個數(shù)進行減法減法運算,如果S=1,表示是一個負數(shù),說明a<b,如果S=0,說明a等于或者大于b,這個時候需要在查詢Z標志位,如果Z標志位為1,表示a等于b,否者說明a小于b。
2)cpu的控制器
(a)作用:最重要的功能就是對指令進行譯碼,然后將指令轉(zhuǎn)成微指令,再由微指令控制計算機工作,比如
· 控制ALU,讓ALU進行數(shù)據(jù)的算術(shù)、邏輯運算
· 進行數(shù)據(jù)的移動,比如從CPU的寄存器移到內(nèi)存中,或者從內(nèi)存的某個位置搬移到內(nèi)存的另一個位置。
· 等等
(b)控制器組成
· 程序計數(shù)器(PC):Program Counter,程序最開始運行時,PC里面放的是程序第一條指令在內(nèi)存中所在的地址,每運行一
條指令,PC里面的地址就會加1,指向下一個指令,如果一個指令的存放需要4個字節(jié),pc中的地址加1,實際上加的是4個字節(jié)。
· 指令寄存器(IR):Instruction Register,臨時存放從內(nèi)存中取得的,即將要被解釋運行的指令,指令由兩部分組成,
- 第一部分:操作碼,指明計算機需要執(zhí)行一個什么樣的動作,比如有些操作碼表示做加運算,有些表示要進行數(shù)據(jù)搬移。
- 第二部分:地址碼,
+ 直接是要被操作碼操作的數(shù)
+ 要被操作的數(shù)在內(nèi)存中所在的地址。
MOV
偽指令 101001 1001010101
操作碼 地址碼
· 指令譯碼器(ID):Instruction Decoder,解釋指令,解釋指令的過程為,
- 第一步:檢查指令的格式是否合法,是否夾有非法字符、或者非法詞組,有的話,譯碼將不會通過
- 第二步:如果指令被檢查合格了,會提取出操作碼,將操作碼翻譯為微指令,控制計算機各部分,按照操作碼的要求做事
· 控制存儲器:用于存放微指令程序(或稱微程序),每一操作碼都對應(yīng)著一個自己的微指令程序,控制存儲器中存放著所有操作碼
所對應(yīng)的微指令程序。
比如MOV(加運算)操作碼,就有自己的微指令程序,微指令程序是由一條條的微指令構(gòu)成的,在出廠時,這些微指令程序就被
固化在了控制存儲器中。
· 微指令寄存器:用于臨時存放微指令
(2)總線與io接口
總線與接口的作用就是,將CPU和外部設(shè)備連接在一起。-----
1)三大高速總線
(a)作用:高速通信線路,屬于CPU的高速公路
· 地址總線:傳輸?shù)刂沸盘?,比如通過傳輸?shù)刂沸盘?,找到要操作的?nèi)存單元等
· 控制總線:傳輸控制信號
通過地址總線傳輸?shù)牡刂沸盘?,找到?nèi)存的某位置了,接下來到底是往里面寫數(shù)據(jù)呢,還是從里面讀數(shù)據(jù)呢,那就
要看具體的“指令”了,如果是寫指令,指令經(jīng)過譯碼器的譯碼后,會被轉(zhuǎn)為微指令,微指令會通過控制總線,向內(nèi)存發(fā)
控制信號,表示說,我希望向該內(nèi)存位置寫數(shù)據(jù)。
· 數(shù)據(jù)總線:傳輸數(shù)據(jù)信號
比如通過地址信號找到內(nèi)存的某個位置了,控制總線也發(fā)出了寫的控制信號,希望對該空間寫數(shù)據(jù),那么寫數(shù)據(jù)時,就需要
通過數(shù)據(jù)總線向該內(nèi)存空間傳輸數(shù)據(jù)信號的,內(nèi)存收到這個數(shù)據(jù)信號后,會將該數(shù)據(jù)信號鎖存到該內(nèi)存空間中,那么這樣就實現(xiàn)了
寫數(shù)據(jù)的過程。
(b)三大高速總線是分開的
三大高速總線其實是可以合在一起的,但是合成一個的話會忙不過來的,通信的速率會非常低,分成三條總線就好比將高速公
路分成三個車道,不同車走不同的車道,互不相干,效率自然就高。
(c)三大高速總線是并行通信的
使用并行通信的目的也是為了條通信效率。
(d)三大高速總線所處位置 -------
三大高速總線位于CPU的內(nèi)部,通過CPU芯片的引腳與外部的IO橋連接在一起。
2)IO接口
(a)作用:負責連接各種的輸入、輸出外部設(shè)備
(b)每一個設(shè)備都會有屬于自己的IO接口
(c)io接口也有地址、數(shù)據(jù)、控制三大線,
· io接口的地址線、數(shù)據(jù)線、控制線,大多數(shù)情況都是串行通信的,而且往往是復(fù)用的
比如USB通信,usb使用的就是串行通信的,常見的USB2.0有4根線,其中有兩根線,一個是正極電源線,另一個負極電源線,
其它兩根線被復(fù)用當作地址線、數(shù)據(jù)線、控制線使用。
· 不過內(nèi)存是一個特例,為了能夠提高內(nèi)存的訪問速度,內(nèi)存io接口的地址、數(shù)據(jù)、控制線都是獨立的,并且使用的是并行通信。
(d)后面的linux驅(qū)動課程,主要涉及的就是IO接口相關(guān)的內(nèi)容
linux驅(qū)動就是講如何通過編寫驅(qū)動程序,去控制這些IO接口,實現(xiàn)與外部設(shè)備的通信,有關(guān)IO接口這一塊的知識,我們會在后面的
linux驅(qū)動技術(shù)課程部分詳細講解,所以,io接口是后面Linux驅(qū)動課程的核心內(nèi)容。
(e)io接口所處的位置
· 在芯片的外部:比如pc機(個人電腦),所有IO接口基本都是在CPU芯片的外部
· 集成在芯片內(nèi)部:比如像單片機,雖然有一部分也是在芯片外部,但是有很大部分IO接口是被直接集成于在了芯片的內(nèi)部。
3)IO橋
(a)并不是計算機都需要IO橋
IO橋是PC機特有的,除了PC外的其它類的計算機,有些(單片機)就不使用IO橋。---------------
(b)為什們會使用IO橋
其實是可以不使用IO橋的,沒有IO橋時,所有的“IO接口”都是直接掛接在三大高速總線上的,但是隨著發(fā)展,掛接的外部
設(shè)備越來越多,直接掛接在總線上,管理是一個麻煩,為了管理的便利,就加了IO橋,IO接口直接掛接在IO橋上,就由IO橋
來管理眾多的IO接口。
(c)IO橋常常分為南橋和北橋
南橋?qū)?yīng)的就是一個南橋芯片,北橋?qū)?yīng)的就是一個北橋芯片,南北橋之間會有相互連接。 -----------
· 南橋:負責CPU與鼠標、鍵盤、磁盤等,通信速率較低的外部設(shè)備之間的通信。
· 北橋:負責CPU與內(nèi)存、顯示器等,通信速率要求較高的外設(shè)之間的通信。
(d)io橋所處的位置
io橋指的就是南橋和北橋芯片,位于CPU芯片的外部。
4)地址、數(shù)據(jù)、控制線相互配合工作
(a)例子:將內(nèi)存中地址0101字節(jié)的內(nèi)容讀出,寫到CPU通用寄存器R0(地址為1001)中,假設(shè)寄存器R0只有一個字節(jié)。
步驟:
第一大步:從內(nèi)存0101的字節(jié),讀出數(shù)據(jù)
(1)cpu通過地址線發(fā)出0101這個地址信號,內(nèi)存的0101對應(yīng)的字節(jié)會被選中
(2)cpu解釋并執(zhí)行“讀指令”,發(fā)出“讀”的控制信號
通過控制線發(fā)送“讀”控制信號后,之前被選中的0101字節(jié),就被設(shè)置為了可讀,設(shè)置為可讀后,內(nèi)存0101字節(jié)中的數(shù)據(jù)2.5v 2.5v 0v 0v 2.5v 0v 0v 2.5v(11001001)會被讀出,讀的過程,其實就是通過數(shù)據(jù)線將電信號導(dǎo)出,由于內(nèi)存的數(shù)據(jù)、地址、控制線是并行傳輸?shù)?,那么在并行?shù)據(jù)線上,此時擁有與2.5v 2.5v 0v 0v 2.5v 0v 0v 2
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。