專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

關于CPU的胡言亂語

作者:又見飛刀   來源:本站原創(chuàng)   點擊數:  更新時間:2013年12月07日   【字體:

         CPU具體是如何工作的?
        工作多年的資深程序員也未必說得清楚,即便是匯編高手也不一定能準確描述,大部分人對這些幾乎沒有興趣,照樣能寫出優(yōu)秀的程序。
        作為一個學生時代就開始對電子電路發(fā)生興趣的愛好者,模擬電路自然很好理解,也很形象,比如一個波形經過放大,變成電壓更高的相同的波形,比如發(fā)光二極管加上一個正向電壓就會發(fā)光......可是,一旦接觸到數字電路,這些東西都排不上了用場,有種不會外語的中國人到了外國的感覺。
        數字電路接觸多了,大概也理解了一些皮毛,不過是輸入一個高或低的電平,輸出一個高或低的電平,這些規(guī)則是設計好的(程序),這些與非或門就是最原始最純樸的CPU,而這些程序是固化的,焊接上去就那個樣子的,你輸入一串脈沖,它就按照規(guī)則輸出一串脈沖,如此這般。
        后來,接觸了編程,先學了高級語言VB、VB.net,再瀏覽過幾本C語言,瞻仰了一下匯編語言,不明覺歷啊!時間長了,感覺也就那么回事,沒什么深奧的,只要下功夫研究,完全可以成為一個合格的程序員,就這么感覺著突然就少了興趣,唉,人就是這么及安!

        許多年來,對數字電路到程序之間的聯絡,一直處于糊涂一盆的狀態(tài),苦于沒有名師指點,也缺乏這方面的資料,頓時感到那些所謂講師都是書呆子,我堅信他們可以照本宣科地把匯編指令倒背如流,卻講不明白CPU內部那些神奇的脈沖是如何跳躍的,這是我所關心的,我想也是很多人關心的。

        下面,就按我的個人傻瓜式的理解描述一下我認為的CPU工作原理,太雷人,游客請止步,防止觸電身亡!

        先說內存,內存就像一張方格信紙,每行多個列,共有多上行都是固定的。這張方格紙被劃了幾個區(qū)域,分別存放不同性質的數據。內存又像一塊黑板,所有的演算過程都要在黑板上進行。
        舉個例子,老師在黑板上講課,學生問:“1+1=?”,老師拿起粉筆(CPU的指針),在黑板上寫下了“1+1=” ,相當于在方格紙上占了4個格(事實上不是那么少,先不管它),眾所周知,CPU是靠程序發(fā)出指令的,所以這時候程序員的指令必定是要求CPU進行加法運算,假設這個等號就是要求運算的指令,那么“1+1”這個算式就會被CPU編譯成10010100101100010001110001......這樣的二進制機器碼送進CPU內部的加法器,然后輸出一串011101010010011100101......之類的結果,結果放在哪里呢,自然是寫在黑板上,同理,放在方格紙的指定位置(這個位置必須是閑置的,不然會將原來的格子里的數據擦除,帶來不可知的后果)。于是就完成了計算的過程。
        如果覺得還是難以理解,那我舉個更淺顯的例子。以前給火鍋店修理過一臺羊肉切片機,這種機器是通過調整切刀的間隙達到調整羊肉片的厚薄的,這里的羊肉就代表需要運算的數據,間隙的大小就代表邏輯算法,如果切刀間隙是固定的,那么你放進去一斤羊肉,會切出5盤肉片(老板好黑。,同理放進兩斤羊肉就出出10盤肉片。這里的羊肉、肉片都是要占用空間的(內存),羊肉片端出去上桌(輸出),內存的數據就完成了任務。

        按照這樣似是而非的邏輯,發(fā)揮我胡思亂想的特長,CPU內部世界林立著幾億個二極管,這些二極管組成了各種各樣的邏輯電路,隨時等待著羊肉的到來,在迅雷不及掩耳盜鈴的時間內切出了一盤一盤的羊肉片,羊肉絲,羊肉塊,羊肉丁......
        這是最簡單的一個運算,而程序往往十分復雜和冗長,CPU像一個不知疲倦的工人,時刻等著下一條指令;氐絼偛欧礁窦埬莻思路上來,所有的程序代碼必須在內存上進行存放才能進入CPU進行運算,運算后的結果也必須寫在內存里,這就像老師不能把1+1的結果“2”放在心里一樣,他必須寫在黑板上。

        CPU在內存這張方格紙上讀取和寫入數據的時候,并不像我們寫文章從左到右,從上到下一個字一個字,一行一行地寫,而是隨時進行跳轉,神經病一樣,它可能走著走著突然就跳走了,然后又突然跳回來,它的節(jié)奏永遠是那么齊整,他跳一百米和一米的時間是一樣的,不可思議吧!

        這就是我所理解的CPU底層工作的狀態(tài),不管你懂不懂,反正我是似懂非懂。至于如何將結果送到顯示器,如何將鼠標鍵盤的數據送進來,這不屬于最底層,不是今天學習的筆記。這些東西相對還是容易理解的,至少我真的略知一二。

關閉窗口

相關文章