<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          放假期間,我造了一臺計算機

          共 8123字,需瀏覽 17分鐘

           ·

          2020-10-23 14:49

          關(guān)注?W3Cschool?,每天一篇文章,與你共同成長

          來源丨yes練級攻略


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

          大家好,我是 yes。

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

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

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

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

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

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

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

          正文

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

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

          電是如何來的?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          左開關(guān)右開關(guān)燈泡
          000
          010
          111

          這其實就是我們熟知的 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é)一下這幾個簡化圖,加深一下印象。

          二進制加法機

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

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

          進位01
          000
          100
          101

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

          AND01
          000
          101

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

          01
          001
          110

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

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

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

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

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

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

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

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

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

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

          中間的都如下接法,前一個的進位輸出是下一位的進位輸入。

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

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

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

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

          減法怎么弄?

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

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

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

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

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

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

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

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

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

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

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

          那此時的范圍就是:

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

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

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

          所以 ?-125 就是 10000011。

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

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

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

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

          當(dāng)然這個和我們所認識的計算機還差很多,現(xià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é)果,這種配置叫讀/寫存儲器,也稱為隨機訪問存儲器即 RAM。

          因為它能保存信息,所以叫存儲器,因為能根據(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ū)動地址的前進,然后進行相加,最終將結(jié)果存儲回 RAM 陣列中,當(dāng)然也需要設(shè)置停止信號。

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

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

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

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

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

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

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

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

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

          計算機幾個核心模塊就都有了。

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

          最后

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

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

          本文大量借助了《編碼的奧義》一書的例子,或者說是對此書一些章節(jié)的梳理和總結(jié),如果對原文有興趣的可以自己購買書籍。

          -End-


          W3Cschool注冊會員突破200萬啦~


          編程獅(W3Cschool


          學(xué)編程,從W3Cschool開始

          微信掃描二維碼,關(guān)注公眾號

          點擊分享」「」「在看
          說不定你的朋友也喜歡讀▼▼▼
          瀏覽 52
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月天久久影院 | 国内一级免费黄色视频在线网展览器的封 | 中文字幕一区二区三 | 欧美中文字幕免费在线观看 | 一二区无码|