1 前言
??本文是基于《編碼》、《穿越計算機的迷霧》兩部著作進行讀后整理的記錄性博客。對書中較為重要的內(nèi)容進行歸納整理進行二次創(chuàng)作俗或,略去了繁瑣的講述細(xì)節(jié)秘蛔,力求簡明扼要陨亡。
編碼:一種由若干符號和規(guī)則組成的系統(tǒng)傍衡,用來向計算機表述指令。
2 正文
2.1 從算盤到芯片
??早期通過連接的方式將各部件聯(lián)系起來负蠕,可是聪舒,在之前的介紹中,我們知道繼電器的某些組合具有特定功能虐急,可以重復(fù)利用(在后續(xù)發(fā)展中箱残,出現(xiàn)了功能更加強大的電子化的 “繼電器”——晶體管)。如果把晶體管預(yù)先連接成常見的構(gòu)件止吁,再用其來組裝計算機會更加容易被辑。
這種設(shè)想由英國物理學(xué)家杰里佛(Geoffrey Dummer,生于1909年)在 1952 年 5 月的一次演講中提出敬惦,他說:“我希望展望未來盼理,”,接下來他提出了以下觀點:
??“隨著晶體管的出現(xiàn)以及半導(dǎo)體研究的廣泛開展俄删,現(xiàn)在也許可以設(shè)想將來會出現(xiàn)不采用連線而是由固體塊組成的電子設(shè)備宏怔。這種固體塊可能由絕緣層、導(dǎo)體層畴椰、整流層以及放大層四個層次組成臊诊,將不同層次的隔離區(qū)連接起來即可實現(xiàn)電子功能⌒敝”
實際上抓艳,硅片是薄而且易碎的,因此它必須被安全地封裝起來帚戳,這樣不僅可以起到保護作用玷或,還可以為芯片內(nèi)部的部件與其他芯片之間的連接提供某種便利。集成電路有幾種不同的封裝方式片任,但最為常見的是采用矩形塑料雙排直插式(或稱為 DIP)偏友,提供 14、16 或者 40 個管腳对供。
上圖是一個有 16 個管腳的芯片位他。將芯片上的凹槽朝左放置,用 1 到 16 對管腳進行編號犁钟,從左下角開始棱诱,環(huán)繞到右端,依次為 1~16涝动,16 號管腳位于左邊最上端迈勋。管腳之間的距離正好是 1/10 英寸。
??20 世紀(jì) 70 年代早期醋粟,使用集成電路在一塊電路板上制造一個完整的計算機處理器變得可能靡菇,實際上這距離將整個處理器放入一塊芯片中重归,只是一個時間問題。
??英特爾在為日本吉康公司生產(chǎn)的可編程計算器設(shè)計芯片的過程中厦凤,決定采取一種不同的方法鼻吮。正如英特爾工程師特德·霍夫說的:“我想讓它成為一個具有通用功能的計算機,進而可以通過編程成為一個計算器较鼓,而不是使這個設(shè)備成為一個只有一些編程能力的計算器椎木,”這導(dǎo)致了 Intel 4004 的產(chǎn)生,它是第一塊 “計算機芯片”博烂,或者叫做 “微處理器”香椎。
??自4004芯片開始,在比較微處理器性能時禽篱,通常采用三個衡量標(biāo)準(zhǔn)畜伐。
??第一個標(biāo)準(zhǔn):4004 是一個 4 位微處理器,這意味著處理器中數(shù)據(jù)通路寬度只有 4 位躺率。每次做加玛界、減運算時,它只能處理 4 位的數(shù)字悼吱。
??第二個標(biāo)準(zhǔn):4004 每秒最大時鐘頻率為 108,000 周期慎框,即 108 KHz。時鐘頻率是指連接到微處理器并驅(qū)動它運行的振蕩器的最大頻率舆绎,超過此時鐘頻率鲤脏,微處理器將不能正常工作。
??第三個標(biāo)準(zhǔn):4004 的可尋址存儲器只有 640 字節(jié)吕朵。
然而,速度是處理器之間的根本不同點窥突,同時速度也是我們使用計算機的一大原因努溃。
最大時鐘頻率(maximum clock speed),也稱為主頻阻问,是影響處理器速度的決定性因素之一梧税。時鐘頻率決定了執(zhí)行一條指令所需要的時間,處理器的數(shù)據(jù)位寬也影響處理器的速度称近。
2.2 微處理器
??微處理器——將計算機中央處理器的所有構(gòu)成組件整合在一起第队,集成在一個硅芯片上。
兩種典型的微處理器
- Intel 8080
8080 是一個 8 位的微處理器刨秆,它包括 6000 個晶體管凳谦,運行的時鐘頻率為 2 MHz,尋址空間為 64 KB- Motorola 6800
6800 包括4000個晶體管衡未,其尋址空間是 64 KB尸执。第一個版本的 6800 的運行速度為 1 MHz家凯,但摩托羅拉于 1977 年推出了運行速度分別為 1.5 MHz 和 2 MHz 的版本
這些芯片被稱為 “單芯片微處理器”(single-chip microprocessors)
??下面給出了 8080 的 40 個管腳的示意圖:
??從芯片引出的箭頭表明這是一個輸出(output)信號,這種信號由微處理器控制如失,計算機的其他芯片對該信號響應(yīng)绊诲。指向芯片的箭頭表明該信號是一個輸入(input)信號,該信號由其他芯片發(fā)出褪贵,并由 8080 芯片對其響應(yīng)掂之。還一些管腳既是輸入又是輸出。和我們前面介紹的處理器一樣脆丁,8080 需要兩個不同的同步時鐘輸入板惑,它們的頻率都是 2MHz,分別標(biāo)記為和(上圖中的 22 和 15)偎快。
??一個微處理器通常有多個用來尋址存儲器的輸出信號冯乘。用于尋址的輸出信號的數(shù)目與微處理器的可尋址空間大小直接相關(guān)。8080 有 16 個用于尋址的輸出信號晒夹,標(biāo)記為裆馒,因此它的可尋址空間大小為,即 65,536 字節(jié)丐怯。
??8080 是一個 8 位的微處理器喷好,可以一次從存儲器讀取或向存儲器寫入 8 位數(shù)據(jù)。該芯片還包括標(biāo)記為的 8 個信號读跷,這些信號是芯片僅有的幾個既可以用做輸入又可以用做輸出的信號梗搅。當(dāng)微處理器從存儲器中讀取一個字節(jié)時,這些管腳的功能是輸入效览;當(dāng)微處理器向存儲器寫入一個字節(jié)時无切,其功能又變成了輸出。
??芯片的其余 10 個管腳是控制信號(controlsignals)丐枉。例如哆键,RESET(復(fù)位)輸入用于控制微處理器的復(fù)位。
??在前面設(shè)計的計算機中瘦锹,所有的指令(除了 HLT 暫停指令)都是 3 個字節(jié)長籍嘹,包括 1 字節(jié)的操作碼和 2 字節(jié)的地址。在 8080 中弯院,指令的長度可以是 1 字節(jié)辱士、2 字節(jié),或者 3 字節(jié)听绳。有些指令使 8080 從存儲器的一個特定地址讀取字節(jié)到微處理器颂碘,有些指令使 8080 在其內(nèi)部執(zhí)行而不需要訪問 RAM。8080 執(zhí)行完第一條指令后辫红,接著從存儲器讀取第二條指令凭涂,并依此類推祝辣。這些指令組合在一起構(gòu)成了計算機程序,可以用來實現(xiàn)不同的功能切油。
??當(dāng) 8080 以最高速度 2 MHz 運行時蝙斜,每個時鐘周期是 500ns(1 ÷ 2,000,000 = 0.000000500s)。前面文章中的計算機的所有指令都需要 4 個時鐘周期澎胡,8080 的每條指令需要 4~18 個時鐘周期孕荠,這就意味著每條指令的執(zhí)行時間為 2~9μs。
??8080 芯片的微處理器的內(nèi)部除累加器外還設(shè)置了 6 個寄存器(register)攻谁,每個寄存器可以存放一個 8 位的數(shù)稚伍。這些寄存器和累加器一樣,本質(zhì)上都是鎖存器戚宦。處理器既可以把數(shù)據(jù)從存儲器讀入寄存器个曙,也可以把數(shù)據(jù)從寄存器存回存儲器。
??在 8080 中用 B受楼,C垦搬,D,E艳汽,H 和 L 來表示新增的 6 個寄存器猴贰。H 可以代表高(High)而 L 可以代表低(Low)。通常把兩個 8 位的寄存器 H 和 L 合起來構(gòu)成一個 16 位的寄存器對河狐,稱做 HL米绕,H 用來保存高字節(jié)而 L 用來保存低字節(jié),這個 16 位的值通常用來對存儲器尋址馋艺。
??寄存器是計算機必不可少的部件嗎栅干?結(jié)合我們前面介紹的內(nèi)容,我們不難發(fā)現(xiàn)寄存器不是必需的丈钙,但在實際應(yīng)用中使用它們將帶來很大的方便非驮。很多計算機程序都同時用到多個數(shù)據(jù),將這些數(shù)據(jù)存放在寄存器比存放在存儲器更便于訪問雏赦,因為程序訪問內(nèi)存的次數(shù)越少其執(zhí)行速度就越快。
??在 8080 中有一條指令至少用到了 63 個操作碼芙扎,這條指令就是 MOV星岗,即 Move 的縮寫。其實該指令是一條單字節(jié)指令戒洼,它主要用來把一個寄存器中的內(nèi)容轉(zhuǎn)移到另一個寄存器(也可能就是原來的寄存器)俏橘。因為 8080 微處理器設(shè)計了 7 個寄存器(包括累加器在內(nèi)),因此應(yīng)用中使用大量的 MOV 指令是很正常的圈浇。
書中這部分內(nèi)容過于繁瑣寥掐,筆者不展開敘述靴寂,感興趣可以過一遍書上的介紹,了解即可召耘。下面內(nèi)容為本章部分要點知識百炬,作為摘錄補充。
??我們通常把微處理器可以尋址訪問的存儲器稱為隨機訪問存儲器(random access memory污它,RAM)剖踊,主要的原因是:只要提供了存儲器地址(有多種方式),微處理器可以用非常簡便的方式訪問存儲器的任意存儲單元衫贬。RAM 就像一本書德澈,我們可以翻到它的任意一頁。我們不需要像讀磁帶那樣固惯,為了收聽后面部分內(nèi)容只能快進磁帶梆造。
??顯然,隨機訪問存儲器是非常好的一種尋址方式葬毫,對于經(jīng)常訪問存儲器的微處理器來說更是如此镇辉。然而,在某些情況下使用不同的尋址方式訪問存儲器也是有好處的供常。例如摊聋,就像我們在瀏覽網(wǎng)頁時,隨著點擊在一個頁面中的超鏈接之間跳轉(zhuǎn)栈暇,從一個頁面進入另一個頁面麻裁,而要回到最初的頁面需要一步步地進行回退。這種形式的存儲器稱作棧(stack)源祈。使用棧時煎源,我們以從底部到頂部的順序把數(shù)據(jù)存入棧,并以相反的順序把數(shù)據(jù)從棧中取出香缺,因此該技術(shù)也稱作后進先出存儲器(last-in-first-out手销,LIFO)。棧的特點是图张,最先保存到棧中的數(shù)據(jù)最后被取出锋拖,而最后保存的數(shù)據(jù)則被最先取出(這部分內(nèi)容可以參考數(shù)據(jù)結(jié)構(gòu)的知識)。
??正如你大概所了解的祸轮,存儲器并不是連接在微處理器上的唯一設(shè)備兽埃。一個完整的計算機系統(tǒng)通常需要輸入/輸出設(shè)備(I/O)以實現(xiàn)人機交互。輸入/輸出設(shè)備通常包括鍵盤和顯示器等适袜。微處理器是如何與外圍設(shè)備(除存儲器外柄错,與微處理器連接的所有設(shè)備都可以稱為外圍設(shè)備)互相通信的呢?外圍設(shè)備配備了與存儲器類似的接口,微處理器通過與某種外圍設(shè)備對應(yīng)的特定地址(即接口)對其進行讀寫操作售貌。在某些微處理器中给猾,外圍設(shè)備實際上占用了一些通常用來尋址存儲器的地址,這種結(jié)構(gòu)稱作內(nèi)存映像 I/O颂跨。
??現(xiàn)代處理器使用多種技術(shù)來提高其運行速度敢伸。其中一種就是流水線技術(shù)(pipelining),即處理器在執(zhí)行一條指令的同時讀取下一條指令毫捣,盡管 Jump 指令在一定程度上會改變這種流程∠曜荆現(xiàn)代處理器還包括一個 Cache(高速緩沖存儲器),它是一個設(shè)置在處理器內(nèi)部蔓同,訪問速度非橙恼蓿快的RAM陣列,用來存放處理器最近要執(zhí)行的指令斑粱。由于計算機程序經(jīng)常執(zhí)行一些小的指令循環(huán)弃揽,使用 Cache 可以避免反復(fù)加載這些指令。上面提到的這些提高運行速度的策略都需要在處理器內(nèi)部增加更多的邏輯組件和晶體管则北。
3 小結(jié)
??兩種典型的微處理器篇介紹了早期市面上兩種較為典型的微處理器矿微,但原文內(nèi)容過于繁雜,且結(jié)合了其他計算機的知識尚揣,筆者便進行了省略涌矢。感興趣的可以閱讀《編碼》原著第 19 章內(nèi)容進行了解。為了精簡內(nèi)容刪減了部分較為詳細(xì)的書寫快骗,僅作為整理總結(jié)娜庇。