www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > > C語言與CPP編程
[導(dǎo)讀]對于程序員來說,計算機(jī)的重要性不言而喻,相信大家對計算機(jī)內(nèi)部也有一定的了解。但大家有沒想過,為什么一堆邏輯門組合起來就能運算了?它是如何運作來實現(xiàn)加減法的? 為什么 cpu 會不停地取指執(zhí)行?是什么在驅(qū)動著它?今天就和大家一起來探索一下底層的奧秘。

每個時代,都不會虧待會學(xué)習(xí)的人。

大家好,我是 yes。

對于我們程序員來說計算機(jī)的重要性不言而喻,相信大家對計算機(jī)內(nèi)部也有一定的了解。

但是大家有沒想過為什么一堆邏輯門組合起來就能運算了?它是如何運作來實現(xiàn)加減法的?

為什么 cpu 會不停地取指執(zhí)行?是什么在驅(qū)動著它?

今天我就和大家一起來探索一下底層的奧秘,但是術(shù)業(yè)有專攻,我們大致的了解一下即可,很多細(xì)節(jié)不清晰也不影響。

不過相信通過這篇文章你會對底層有不一樣的認(rèn)識,包括運算單元、內(nèi)存、時鐘、地址、溢出、補(bǔ)碼等等。

先打個預(yù)防針吧,這篇文章有很多電路圖,你可能感覺這啥啊,和我們開發(fā)有關(guān)系嗎?

看下去你會懂的,雖說平日里我們都是 CRUD Boy,但是我們也得時刻保持著好奇心,要有求知欲和探索精神。

對了文末再送兩本書。

正文

這個故事得從「電」開始說起。

生活中電無處不在,而它卻時刻保持著神秘感,為何插上電我們的屏幕就會亮?我們的服務(wù)器就能跑?

電是如何來的?

電起源于電子的運動,我們知道一切物質(zhì)都是由原子組成的,而原子又是由中子、質(zhì)子和電子構(gòu)成。

在某種情況下電子從原子中電離出來,這樣電就產(chǎn)生了。

質(zhì)子和電子都具有帶電荷的特性,質(zhì)子帶正電荷、電子帶負(fù)電荷。

而異電相吸,同電相斥,當(dāng)質(zhì)子數(shù)和電子數(shù)相等的時候是最穩(wěn)定的,如果數(shù)量不平衡也會往趨于平衡的方向發(fā)展。

像雷雨天氣,云層下層積累電子而云層頂層失去電子,而閃電就是大量的電子迅速從一端轉(zhuǎn)移到另一端產(chǎn)生的結(jié)果,為了趨于平衡。

題外話 :細(xì)心的朋友可能看到這原子核質(zhì)子不都合在一起了啊,不是說同電相斥嘛?這是因為有個叫強(qiáng)內(nèi)力的玩意聚集了它們,釋放核能的原子核裂變就是由強(qiáng)內(nèi)力導(dǎo)致的。

相信大家都做過電池點亮燈泡的物理實驗。

這其實就是電池發(fā)生化學(xué)反應(yīng),在負(fù)極產(chǎn)生多余的電子,然后通過回路中的原子類似接力的形式,一個原子得到電子之后會傳遞給相鄰的另一個原子,如此循環(huán)傳遞電路就形成了,最終通過燈泡到達(dá)電池的正極。

改裝下再套上個外殼,手電筒就這樣被造出來了。

而手電筒不僅僅可以用來照明,還能用來通信。相信大家都看過類似的電影場景,我這手電筒的光閃三下咱們就上!

而說到這樣簡易的通信就不得不提摩爾斯電碼,相信大家也從各渠道對摩爾斯電碼有一定的了解,比如「星際穿越」這部賊好看的電影。

在 19 世紀(jì)初期,那時候的遠(yuǎn)距離通信還得利用馬車等工具長時間運輸傳遞,人們一直在摸索即時遠(yuǎn)距離通信的方法。那時的摩爾斯就開始埋頭實驗,最終發(fā)明了電報。

電報的思想和上述說的手電筒思想一樣,手電筒通信的思想是通過開關(guān)來控制燈的亮暗,而電報利用的是電磁現(xiàn)象。

將導(dǎo)線纏繞在鐵棒上,然后通電之后鐵棒就變成了磁鐵,斷電了磁性又會消失,然后再搞個發(fā)聲器,通過磁性來吸引可動棒敲擊發(fā)聲。

通電后可動棒被拉下,敲擊下方就會發(fā)出 “滴” 的聲音,斷電則可動棒復(fù)位,敲擊上方發(fā)出 “嗒” 的聲音。將快速的滴答作為點,慢速的滴答作為劃。

通過導(dǎo)線的長距離連接就能實現(xiàn)遠(yuǎn)距離通信,通過判別點和劃的組合查閱摩爾斯電碼表,轉(zhuǎn)成最終的信息。

如果要雙向通信,就再搞一個反過來部署就好了,這就是電報機(jī)了。

不過導(dǎo)線是有電阻的,導(dǎo)線越長電阻越大,所以是有距離限制的,不過這難不倒我們,最簡單的方法就是轉(zhuǎn)發(fā)一下。

在中間距離也建個電報站,然后雇一個人,得到發(fā)送方的電報信息之后,重新敲一遍發(fā)送給真正的接收方,但是這需要多余的人力,所以可以如下圖所示,搞個棒子連起來帶動下一個開關(guān)的輸出。

這其實就是繼電器原理,我們來看看繼電器是如何的設(shè)計的。

下方通電產(chǎn)生磁力,吸引上方的金屬桿掛下,然后上方形成回路因此也通電了,這樣遠(yuǎn)距離傳輸?shù)奈⑷蹼娏骶捅挥忠淮畏糯筝敵隽?,所以最終的遠(yuǎn)距離電報應(yīng)該是這樣的。

可以看到繼電器這個發(fā)明是真的巧妙。

理解了上面所述的電的生成、電報以及繼電器之后我們再來看看二進(jìn)制。

基于二進(jìn)制的數(shù)字系統(tǒng)是最簡單的,只有 0 和 1,不能再進(jìn)一步簡化了,而簡單就代表著清晰,就像開關(guān)要么開要么關(guān)。

而二進(jìn)制的組合又可以代表多種可能,比如第一個 0 表示男,1 表示女 ,第二個 0 表示胖,1 表示瘦。

讓我們再回到之前的電池電燈圖中,這次搞兩個開關(guān)。

可以得知兩個開關(guān)都閉合電燈才會亮,如果轉(zhuǎn)化成二進(jìn)制表示,0 表示開關(guān)斷開,1 表示開關(guān)閉合,0 表示燈泡不亮,1 表示燈泡亮,總結(jié)成一張表格的話就是:

左開關(guān) 右開關(guān) 燈泡
0 0 0
0 1 0
1 0 0
1 1 1

這其實就是我們熟知的 AND 操作,如果把電路稍微改一下就是 OR 操作了。

如果把很多開關(guān)組合起來就能執(zhí)行簡單的邏輯任務(wù),但是開關(guān)需要手動的去控制。

記得之前提到的繼電器嗎?它也能串聯(lián)或者并聯(lián)電路,而且可以被其他繼電器聯(lián)動控制,不需要一個一個撥動,因此用繼電器來組合更加合適,而繼電器的組合稱之為邏輯門

簡單點的就像下圖所示,開關(guān)閉合燈泡就會亮。

有些人覺得這不是多次一舉嗎,這其實是個緩沖器,可以延遲信號,也可以放大信號,而且這個電路比較簡單,實際上有很多組合,比如下圖的這個反向操作,開關(guān)閉合的燈反而不會亮。

還有像這樣的串聯(lián)組合,只有兩個開關(guān)都閉合燈泡才會亮。

當(dāng)然這里的輸入不一定得是開關(guān),輸出也不一定得是燈泡,只是為了更加直觀的表現(xiàn)出來,不過這樣畫電路太麻煩了,于是電氣工程師們就搞了個符號來表示這些電路,比如上面的串聯(lián)其實就是 AND 操作,是與門。

簡化一下上面的圖就變成下面的樣子。

如果電路圖如下所示,就是并聯(lián),隨便一個開關(guān)開了燈泡都會亮,這就是或門。

簡化符號是這樣的:

前面還提到個反向操作的,開關(guān)閉上燈泡反而不亮的叫反向器,符號如下圖所示。

我們再來看看這樣的電路。

只有當(dāng)兩個開關(guān)都斷開的情況下燈泡才會亮,任何一個開關(guān)閉合燈泡都會熄滅,這個操作和 OR 操作相反,稱之為 NOR 即或非門,簡化后的符號比或門多了個小圓圈,代表反向。

或者這樣,組合著畫也一樣。

然后我們再來看看這種電路,只有兩個開關(guān)都斷開才會熄滅,這和與門正好相反,稱之為 NAND 與非門。

簡化符號是這樣的,也是多了個圓圈:

我再總結(jié)一下這幾個簡化圖,加深一下印象。

二進(jìn)制加法機(jī)

有了上面這幾樣?xùn)|西,我們就可以造個二進(jìn)制加法機(jī),不要小看加法,因為可以用加法來實現(xiàn)減法、乘法、除法等操作。

加法我們知道會得到當(dāng)前的和、進(jìn)位這兩個信息,例如二進(jìn)制中 1 + 1,當(dāng)前和是 0 ,進(jìn)位 1。

進(jìn)位 0 1
0 0 0
1 0 1

可以看到只有 1 +1 進(jìn)位 1 ,再仔細(xì)看看是不是和 AND 操作很像?只有 1 AND 1 結(jié)果才為1 。

AND 0 1
0 0 0
1 0 1

我們再來看看當(dāng)前和的計算

0 1
0 0 1
1 1 0

大家可以在腦子里面想象下,如果拿 OR 操作來套用的話右下角結(jié)果不對,如果是 NAND 操作的話左上角結(jié)果不對,所以得兩個結(jié)合一下,電路圖如下。

分別通過或門和與非門之后再做與門,出來的結(jié)果就是當(dāng)前和的結(jié)果,這個其實就是 XOR 異或門,簡化表示就是:

所以加法需要通過兩個邏輯門,分別是異或門來操作當(dāng)前和,與門來操作進(jìn)位,結(jié)合起來如下圖所示:

這其實就是個半加器,簡化的圖如下所示:

那為什么叫半加器?因為只能一位一位的加,而前一位的進(jìn)位參與不到下一位的計算,如果要加入進(jìn)位那下一位的運行就是 A 的當(dāng)前位 + B 的當(dāng)前位 + A 和 B 之前的進(jìn)位。

因此需要改裝一下,兩個半加器合起來再加一個或門。

假設(shè) A 輸入 1 , B 輸入 1, 進(jìn)位輸入 1,從最左邊開始第一個半加器 S 輸出 0 , CO 輸出 1,第二個半加器 S輸出 1,CO 輸出 0,最終和輸出 1,進(jìn)位輸出 1,結(jié)果沒毛病可行,這叫全加器,簡化一下圖:

全加器有了,咱們得組合起來,并且需要有輸入和輸出,我們通過開關(guān)來輸入數(shù)字,由燈泡的亮暗顯示結(jié)果。

這就是一個 8 位的計算器,有 9 個燈是因為兩個 8 位相加結(jié)果可能是 9 位。

然后從最右邊開始如下圖所示接上全加器,進(jìn)位接地表示 0 輸入

中間的都如下接法,前一個的進(jìn)位輸出是下一位的進(jìn)位輸入。

最后一個就是把進(jìn)位輸出直接接到第九個燈上就行了。

此時你擺動控制面板的開關(guān),就可以通過機(jī)器得到相加的結(jié)果。簡化的畫法如下圖所示:

現(xiàn)在我們已經(jīng)造出了八位加法器了,如果要 16 位呢?簡單合一下就好了。

當(dāng)然真實的計算機(jī)原理差不多是這樣的,不過會更復(fù)雜,比如不會像我們的加法器,一個一個的進(jìn)位加,而是會先行進(jìn)位,而且也不會用繼電器,而是晶體管等等。

減法怎么弄?

加法器我們搞出來了,那減法怎么做?減法需要有借位操作。

我們先拿熟悉的十進(jìn)制來說。假設(shè)你的賬戶上限是499,你的透支額度是500,也就是說你的賬戶金額范圍是 -500~499 這 1000 個數(shù)字,要求不能用負(fù)號來表示。

可以看到這是個三位數(shù),而最大值就到 499 過,說明 500~999 之間的數(shù)沒用,那拿來表示負(fù)數(shù)不就剛剛好嗎?

所以讓 500 表示 - 500 ,501 表示 ?-499,以此類推。

500,501.......998,999,000,001......498,499,讓5、6、7、8、9開頭的數(shù)都代表負(fù)數(shù),而且是不是看起來還形成了個環(huán)形, 499 + 1 就變成 500 了,然后 999 + 1 變成 1000 ,但是只能三位數(shù)表示,所以溢出了變成 000。

這種處理叫 10 的補(bǔ)數(shù),如果要把三位負(fù)數(shù)轉(zhuǎn)為 10 的補(bǔ)數(shù),就是讓 999 減去它再加一,也就是說 10 的補(bǔ)數(shù)等于 9 的補(bǔ)數(shù)加一。

補(bǔ)數(shù)的概念:拿 9 的補(bǔ)數(shù)來說,將一個數(shù)從一串 9 中減去得到的結(jié)果就叫這個數(shù) 9 的補(bǔ)數(shù),比如 123 ,它是三位數(shù) ,999-123 = 876 所以 123 的 9 的補(bǔ)數(shù)就是 876,如果把結(jié)果 + 1那就是 10 的補(bǔ)數(shù)了。

就拿 -499 來說,我們要轉(zhuǎn)化成補(bǔ)數(shù),就是 999 - 499 + 1 等于 501 ,看上面的排列確實用 501 來代表 - 499。

那減去一個數(shù)不就是加上一個數(shù)的負(fù)數(shù)嗎?所以通過補(bǔ)數(shù)我們就不需要做減法,只需要轉(zhuǎn)成補(bǔ)數(shù)再相加就行了!

現(xiàn)在我們再換成二進(jìn)制,二進(jìn)制相比于十進(jìn)制就更簡單了。

拿八位二進(jìn)制數(shù)來說,范圍是 00000000~11111111, 對應(yīng)的十進(jìn)制是 0~255,但現(xiàn)在我們想讓它能表示負(fù)數(shù),前面十進(jìn)制的時候我們將 5、6、7、8、9開頭的正數(shù)來表示負(fù)數(shù),對應(yīng)于二進(jìn)制我們可以將第一位以1開頭的作為負(fù)數(shù)。

那此時的范圍就是:

如果你理解了上面的十進(jìn)制轉(zhuǎn)化,這個二進(jìn)制肯定是沒問題的,這其實就是算出 2 的補(bǔ)數(shù),而 2 的補(bǔ)數(shù)又是 1 的補(bǔ)數(shù) +1。

我們拿 125 來舉個例子,125 二進(jìn)制表示是 01111101,求 1 的補(bǔ)數(shù)就是 11111111 - 01111101,這個減法在二進(jìn)制中不需要,因為這其實就是求反,還記得上文提到的反向器嗎?

取反了之后再加一,就得到 2 的補(bǔ)碼。

所以 ?-125 就是 10000011。

當(dāng)然這一切的前提都是數(shù)字的位數(shù)需要固定,所以計算機(jī)中的位數(shù)就是固定的,超出了就會溢出,到這里你應(yīng)該可以理解計算機(jī)中的補(bǔ)碼是怎么來的,而且理解了為什么最大值 +1會變成最小值?

所以減法我們只需要改造一下上面的加法器,給個開關(guān)表示要這個數(shù)是負(fù)數(shù),如果是負(fù)數(shù)則進(jìn)行一波反向器操作然后再 +1,之后再進(jìn)行加法操作即可得到最終的結(jié)果。

乘法和除法我就不分析了,一樣也能通過加減法來實現(xiàn)。

振蕩器(時鐘)、鎖存器(觸發(fā)器)和計數(shù)器

當(dāng)然這個和我們所認(rèn)識的計算機(jī)還差很多,現(xiàn)在只能進(jìn)行一些非常簡陋的加減操作,別急我們先來看看這個電路。

這個電路很有意思,當(dāng)你閉合開關(guān)的時候電路通了,此時由于電磁效應(yīng)可動棒被吸了下來,電路就斷了,斷了之后磁性消失了可動棒又移了上去,這樣電路又通了,如此往復(fù)。

這種電路叫振蕩器,這是一個很關(guān)鍵的東西,記住它。

它的來回振蕩其實就是在輸出 0 和 1 的交替序列,畫成圖如下所示:

隨著時間的變化在 0 和 1之間交替變化,因此也稱之為時鐘。

一個變化循環(huán)所需要的時間稱之為周期,頻率是周期的倒數(shù),如果周期是 0.05 秒,那么頻率就是 20,每秒 20 個循環(huán),用赫茲來作其單位,所以就是 20 Hz。

我們再來看下這個電路。

此時燈泡是不亮的。當(dāng)上面的開關(guān)閉合后,左邊的或非門輸出 0 ,右邊的或非門輸出是 1,因此燈泡亮了。神奇的地方來了,此時你斷開上面的開關(guān),燈泡依然是亮的,因為左邊的或非門輸出還是 0,而或非門只要有一個輸入是 1,輸出就是 0 。

此時如果閉合下面的開關(guān),燈泡就會熄滅,再斷開下面的開關(guān)燈泡仍舊不亮。

可以看到這個電路是有記憶功能的,你看如果你發(fā)現(xiàn)此時的燈泡是亮的,你就能推斷上一次閉合的是上面的開關(guān),如果此時燈泡是暗的那么上次閉合的就是下面的開關(guān)!

這種電路叫觸發(fā)器,其實上面的開關(guān)就等于置位(set),下面的開關(guān)等于復(fù)位(Reset),所以這也叫 R-S觸發(fā)器。

不過更有用的電路應(yīng)該能記住某個特定時間點的上上一個信號是 0 是 1。

所以還需要搞個保持位,使得保持位關(guān)了之后,上下兩個開關(guān)隨意撥動都不影響之前保持結(jié)果(下面的圖復(fù)位和置位位置和我們電路圖是相反了,不過沒影響一樣的)。

其實就是當(dāng)保持位 0 的時候,復(fù)位和置位通過與門的輸出肯定是 0 根本影響不到之前的結(jié)果。

但是這樣就有三位輸入了,比較麻煩。從上面的觀察來看有意義的輸入其實是上面開下面關(guān),或者上面關(guān)下面開,所以一定是相反的。所以搞個反向器這樣就只有兩個輸入了。

這個叫電平觸發(fā)的D型觸發(fā)器,D表示 Data,數(shù)據(jù)的輸入。電平觸發(fā)就是當(dāng)保持位為某一個特定電平時 (例子是 1),觸發(fā)器就會保存數(shù)據(jù)端的輸入值。

理解了保持位之后,我們需要引入時鐘(標(biāo)志為 clk),一個有規(guī)律的來回變化的時鐘,當(dāng)時鐘從 1 切換到 0 的時候上一次操作的內(nèi)容就被保存了,所以把保持位的輸入替換成時鐘輸入。

這樣的電路叫做電平觸發(fā)的D型鎖存器,它表示電路鎖存住一位數(shù)據(jù),并保持到將來使用,它也稱之為 1 位存儲器。

有了 1 位存儲器,那多位存儲器就很簡單了,就是將多個鎖存器合在一起,如下圖是八位鎖存器。

這里還需要提一下邊沿觸發(fā)器,不同于電平觸發(fā)器的是邊沿觸發(fā)器是在 0 變成 1 的瞬間記錄結(jié)果,像電平觸發(fā)器是在 1 的時候每個結(jié)果都會被覆蓋性的記住,在某些場景下邊沿觸發(fā)器的瞬時性更合適。

電路圖如下,由兩級 R-S 觸發(fā)器鏈接而成,其實這種電路看不的很亂覺得很復(fù)雜沒事,知道結(jié)果就行了。

簡化的畫法如下:

然后我們再來看下這個電路:

將振蕩器的輸出作為時鐘的輸入,然后反向 Q 端(上圖中下面的Q代表反向Q,圖少了一橫)的輸入又作為 D 的輸入。

出來的波形圖是這樣的,可以看到 Q 的輸出頻率是時鐘的一半,所以這種電路稱為分頻器。

而分頻器的輸出又可以是下一個分頻器的輸入,我們再來看下這個圖:

出來的波形圖是這樣的:

再填上 0 和 1:

從 Q3 開始每一列從下往上看,是不是 0000、0001、0010.... 這就是計數(shù)器,把 8 個集成一下放在黑盒中,就構(gòu)成了 8 位的計數(shù)器。

當(dāng)然這個計數(shù)器是異步的,后面的得等前面的通知,比較不準(zhǔn)確,所以更好的是同步計數(shù)器,不過比較復(fù)雜,這里就不介紹了。

簡單組裝一下

至此我們已經(jīng)有了加法器、振蕩器(時鐘)、鎖存器(觸發(fā)器)和計數(shù)器,接下來我們就開始組裝一下它們。

比如現(xiàn)在我們有一個燈泡,想測試一下八個鎖存器,八個鎖存器的話那么需要 3 個開關(guān)來表示具體選擇哪個鎖存器,2 的 3 次方等于8。

中間的黑盒肯定是拿來選擇的,通過開關(guān)來控制通路,比較復(fù)雜我覺得稍微看看就行,反正就是電路選擇。

輸入的話也不用直接用八個,所以也搞個三個開關(guān)。

內(nèi)部構(gòu)造我就不貼了,也和選擇器一樣復(fù)雜,這叫譯碼器,最終完整電路圖如下:

而是S0、S1、S2 其實就是地址,通過地址來選擇寫入哪個鎖存器中,并且對應(yīng)輸出結(jié)果,這種配置叫讀/寫存儲器,也稱為隨機(jī)訪問存儲器即 RAM。

因為它能保存信息,所以叫存儲器,因為能根據(jù)地址選擇來寫入讀取所以是隨機(jī)。

上圖電路簡化圖如下,能存儲 8 個獨立的 1 位數(shù)據(jù)。

兩個 8*1 RAM 結(jié)合一下就能表示存儲 8 個獨立的 2 位數(shù)據(jù)。

如果是通過下面這樣的組合,則能表示 16*1 RAM,那個 DI 其實就是第四根地址線,所以是 2 的 4 次方。

可以看到 RAM 陣列的存儲容量等于 2 的地址數(shù)次方,然后注意下我們圖是簡化了的,里面其實有很多繼電器的,像邏輯門都是由繼電器構(gòu)成的,當(dāng)斷電之后電磁效應(yīng)就沒了,所有的觸點都回歸原樣,這就是 RAM 為什么是易失性存儲介質(zhì)的原因。

咱們現(xiàn)在已經(jīng)把內(nèi)存給搞出來了。

接下來我們的目標(biāo)就是把要計算的數(shù)據(jù)輸入內(nèi)存中,然后讓加法器計算了之后把結(jié)果寫回內(nèi)存,并且可以再通過內(nèi)存查看結(jié)果,大致的組裝樣子如下:

然后我們可以將加法器和鎖存器結(jié)合起來作為一個累加器,即每次加法的值存儲到鎖存器中并作為下一次累加的值。

有了累加器之后,我們可以將存儲器的值傳到累加器中,稱為 Load 裝載,把下一個值添加到累加器中,稱為 Add,然后將結(jié)果保存在某個位置,稱為 Store。

可以通過控制面板先往存儲器里面寫好要操作的值并且可以通過控制面板上的燈來查看內(nèi)存寫入結(jié)果,然后一開始訪問存儲器的地址為 0000,由計數(shù)器來驅(qū)動地址的前進(jìn),然后進(jìn)行相加,最終將結(jié)果存儲回 RAM 陣列中,當(dāng)然也需要設(shè)置停止信號。

把我們前面定義的 Load 等操作碼,轉(zhuǎn)化為特定的代碼來控制整體的流程(你就認(rèn)為這代碼會指示電路做某種操作,沒必要細(xì)想反正就是通過邏輯門組合產(chǎn)生的)。

這個操作碼僅是個助記符,因為地址是固定的,并且操作碼指令字節(jié)是固定長度(1個字節(jié)),所以我們可以在每條操作后面跟上地址,總的而言每條指令(除停止)需要 3 個字節(jié)。

簡單的看下圖,就是在存儲器地址0000處存入以下“代碼”。

并且可以搞個 Jump 指令用來跳轉(zhuǎn)地址,可以通過設(shè)置計數(shù)器來達(dá)成跳轉(zhuǎn)地址的功能,有了跳轉(zhuǎn)我們就能做循環(huán)操作了。某些重復(fù)的指令只需要編寫一次,通過條件跳轉(zhuǎn)來完成循環(huán),最終的組裝示意圖如下:

2-1 選擇器是切換計數(shù)器的地址輸入或者是計算得出的輸入,通過三個 8 位鎖存器來分別代表代碼,地址高位和低位,上圖來看可能有點繞,不理解細(xì)節(jié)也沒有關(guān)系,大致的流程還是簡單的。

至此我們其實已經(jīng)組裝了一臺計算機(jī)了,之所以能叫計算機(jī)而不是計算器是因為它可以根據(jù)你寫入存儲器的指令自動取指執(zhí)行,并且可以進(jìn)行條件跳轉(zhuǎn)和循環(huán)執(zhí)行自動停止。

計算機(jī)的處理器就是我們上面的累加器,可以稱之為算數(shù)邏輯單元,即 ALU。

那個計數(shù)器就是我們的程序計數(shù)器PC。

存儲器就是內(nèi)存了,輸入就是控制面板,輸出就是控制面板上的燈。

計算機(jī)幾個核心模塊就都有了。

至于前面我們定義的操作碼其實就是機(jī)器語言,而人類為了好記就會搞一些助記符來標(biāo)識,發(fā)展到后來就是匯編語言,而匯編語言又太麻煩了,因此又抽象搞了高級語言,比如 C、Java 等等。

最后

這篇文章最終所描述的計算機(jī)其實是相當(dāng)簡陋的,真正的計算機(jī)也肯定不會這樣造的,比如不會用繼電器,線路也會用各種總線啥的搭建起來各種集成電路等等,ALU 也不會如此簡單,會有各種并行計算等等。

主要是想借此大致的說下計算機(jī)基本的運行原理和構(gòu)成,因為本質(zhì)上的道理是一樣的。如果要我把很多細(xì)節(jié)都說出來我也不會,我也就懂一點點點點皮毛,我也不是搞硬件的,啥模電的課我也沒上過,我就會裝裝機(jī)的水準(zhǔn)。

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉