《編碼》讀書筆記:從無到有構建電腦系統

來源:互聯網
上載者:User

標籤:

1 簡單的電報系統:

按鍵、發聲裝置,電池和一些導線即可構成:

當電報機的鍵按下時,發生器的電磁鐵將可動棒拖下發出“滴”的聲音;當鍵放開時,棒彈回初始位置,發出“嗒”的聲音。快速的“嘀嗒”為點,慢速的則為劃。

 

2 繼電器

電磁式繼電器一般由鐵芯、線圈、銜鐵、觸點簧片等組成的。只要線上圈兩端加上一定的電壓,線圈中就會流過一定的電流,從而產生電磁效應,銜鐵就會在電磁力吸引的作用下克服返回彈簧的拉力吸向鐵芯,從而帶動銜鐵的動觸點與靜觸點(常開觸點)吸合。當線圈斷電後,電磁的吸力也隨之消失,銜鐵就會在彈簧的反作用力返回原來的位置,使動觸點與原來的靜觸點(常閉觸點)吸合。這樣吸合、釋放,從而達到了在電路中的導通、切斷的目的。對於繼電器的“常開、常閉”觸點,可以這樣來區分:繼電器線圈未通電時處於斷開狀態的靜觸點,稱為“常開觸點”;處於接通狀態的靜觸點稱為“常閉觸點”。

 

長距離導線會有很大的電阻,會導致電流越來越小。中的繼電器系統就是為了增大電流。

上述通訊系統中的繼電器的簡單實現:

 3 邏輯代數與電路

邏輯代數是分析和設計邏輯電路的數學基礎。邏輯代數是由英國科學家喬治·布爾(George·Boole)創立的,故又稱布爾代數。

 

4 邏輯門 (logic gates)

邏輯門和通常讓水和人通過的門十分相似。邏輯門通過阻擋或允許電流通過在邏輯中執行簡單的任務。

(1)與門

用兩個繼電器串聯成一個與門

 

 

(2)或門

用兩個繼電器並聯成一個或門

標準表示:

(3)反向器

標準表示:

它被稱為反向器的原因是當輸入為0時輸出卻為1,反之亦然。

(4)或非門

標準表示:

(5)與非門

 標準表示:

(6)緩衝器

緩衝器的特點是“什麼都不做”,其輸出和輸入是相同的:當輸入訊號很弱時,可以使用緩衝器,這是因為這也正是多年前繼電器被用於電報當中輸入輸出的原因。此外,緩衝器也可用於延遲一個訊號,這是因為繼電器可能要求多一點兒動作時間,如1秒的幾分之一才被觸發。

標準表示:

 5 加法器

二進位的加法表:

+ 0 1
0 00 01
1 01 10

 

這樣一來,位元字相加的結果是兩位元,分別稱為“和”和“進位”(比如“ 1加1等於0,進位是1”)。現在,可以把這張二進位加法表分成兩張表,第1張是表示“和”的表。下面表(1)是加法位的:

+加法位 0 1
0 0 1
1 1 0

 

下面表(2)是進位的:

+進位位   0 1
0 0 0
1 0 1

 

這樣的話就便於用之前的邏輯門電路來分別實現上述兩張表的功能。

表(2)很簡單,可以用與門實現;表(1)略複雜,如下:

 

進而可以構成半加器 → 全加器 → 8位加法器 → ...

8位加法器如下:

 

層層組合:繼電器 → 邏輯門 → 加法器

當然現代電腦已經不使用繼電器了,後來使用過真空管,現在使用的是晶體管,但是工作方式和繼電器是基本相同的。繼電器 → 真空管 → 晶體管。

 

6 減法器

減法器主要通過一些變換,最後轉換為加法器來處理。

一個減法器的組成:

 

7 鎖存器

將繼電器、電池、開關按如下形式串連:

只要開關是閉合的,金屬簧片就會上下跳動—使電路閉合或斷開—並製造一種聲音。

對於反向器而言,當輸入為0時,輸出為1;輸入為1時,輸出為0。在該電路中閉合開關會使反向器中的繼電器間斷地閉合和斷開。如果去掉開關,可以使反向器連續地工作,如示:

這個電路稱為振蕩器,它和我們以前見到的每樣東西都有本質上的區別。以前,所有的電路都靠手動地斷開或閉合開關來改變狀態,而振蕩器卻不需要人的幹涉,它可以自主地工作。

所有電腦都靠某種振蕩器來使其他組件同步工作。振蕩器的輸出是0和1的交替序列,可以用形象地來表示它,圖中,水平軸表示時間,垂直軸表示輸出是0或1:

此圖表示隨著時間的變化,振蕩器的輸出在0和1之間交替變化。基於這個原因,振蕩器有時稱為時鐘(c l o c k),因為通過對振蕩次數記數還可確定時間。我們把振蕩器從某個時間的輸出開始,經曆一段變化又回到同樣輸出的這一段間隔稱為振蕩器的一個迴圈(c y c l e),一個迴圈所需要的時間稱為振蕩器的周期。

 

如下電路是一個基本的觸發器電路:

觸發器電路可以保持資訊,換句話說,它有記憶性。它可以“記住”最近一次是哪個開關先閉合的。

 

可以進一步構成鎖存器。鎖存器不同於觸發器,它不在鎖存資料時,輸出端的訊號隨輸入訊號變化,就像訊號通過一個緩衝器一樣;一旦鎖存訊號起鎖存作用,則資料被鎖住,輸入訊號不起作用。鎖存器也稱為透明鎖存器,指的是不鎖存時輸出對於輸入是透明的。

 

8 儲存空間

8個1位鎖存器,3-8解碼器,8-1選取器構成的一個8×1RAM,如所示:

這種鎖存器的配置有時也稱為讀/寫儲存空間,但通常叫作隨機訪問儲存空間或R A M。稱它為儲存空間是因為它能儲存資訊,稱為讀/寫儲存空間是因為可以在每個鎖存器中儲存新的資料(也就是寫資料),同時還可以查看每個鎖存器中所儲存的資料(也就是讀資料)。稱它為隨機訪問儲存空間是因為通過簡單地改變地址輸入就可以從8個鎖存器中的任意一個讀出或寫入資料。相比之下,其他類型的儲存空間必須順序讀出—也就是,在可以讀出儲存在地址1 0 1的資料之前,必須讀出儲存在地址1 0 0的資料。

可以將多個8×1RAM構成一個整體的RAM,兩種組合思路:增加資料寬度(資料線),增加地址線寬度。

為什麼RAM具有易失性?

如果一個裝滿65 536位元組的6 4 K×8 RAM陣列被關掉電源,將會發生什麼情況呢?所有的電磁鐵將失去磁性,所有繼電器的觸點將回到未觸發狀態, R A M中的內容也將永遠丟失。
這就是隨機訪問儲存空間也稱為易失性儲存空間的原因,它需要恒定的電源來保持其中的內容。

 

9 電腦雛形

用來累加多個數的鎖存器成為累加器(accumulator)。

(1)version 1.0

(2)version 2.0

(1)初步產生兩個,一個是資料RAM,一個是代碼RAM。代碼RAM陣列中存放的每一個代碼都對應著資料RAM中要被載入或者加到累加器中的數,或者對應需要存回到資料RAM中的某個數。以這種方式使用的數字代碼常常被稱為指令碼(instruction code)或作業碼(operationcode)。代碼儲存空間中的每一條指令對應資料存放區器中相同地址的儲存單元。

(2)支援save、sub指令功能。

(3)version 3.0 

1)帶參數的指令。改成一個指令佔3個位元組。第一個為代碼本身,後兩個為16位儲存空間單元地址。是為瞭解決之前 版本的問題,具體問題分析見 P203

2)合并資料RAM和代碼RAM。

從儲存空間中取出指令的過程稱為取指令(instruction fetch)。在上述加法機中,每個指令長3個位元組。因每次只能從儲存空間中取出一個位元組,因此每次取指令需要3個刻度。

機器響應指令代碼執行一系列操作稱為執行(execute)指令,但這並不是說機器是有生命的東西,因為它不能自行分析機器代碼並決定該做什麼。每一個機器碼用其唯一的方式觸發多種控制訊號,使機器產生各種操作。

能否控制重複操作或者迴圈是電腦和計算機的區別。

我們的電腦是用繼電器、電線、開關和燈泡建造的,所有這些都是硬體。與之對應,指令和輸入儲存空間中的其他資料叫作軟體,之所以叫“軟體”是因為它們比硬體更容易改變。

上述圖中:

CPU包含若干組件:累加器(由8位鎖存器構成)是其中一個。

8位反相器和8位加法器構成了ALU(本例中只能進行算術運算)。

16位的計數器被稱為程式計數器(PC,Program Counter)。

 

處理器可以響應的作業碼(如指裝載和儲存的1 0 h和11 h)叫作機器碼,或機器語言。之所以用“語言”這個術語是因為機器碼類似於可讀/寫的人類語言可被機器理解和響應。

以上表示的是一種電腦程式設計語言,稱作組合語言。它是全數位機器代碼和指令描述性語言的綜合,且儲存空間地址用符號表示。人們有時會把機器語言和組合語言弄混淆,因為它們是表示同種事情的兩種不同的方法。組合語言的每條語句都對應於機器代碼的特定位元組。

 

10 馮諾依曼體繫結構

早期的電腦中儲存空間只是用來儲存中間結果,程式本身則儲存到一些物理媒介上面,例如帶穿孔的紙帶。並且使用的還不是位元字系統(ENIAC用的是十進位)。

馮諾依曼提出:電腦內部應該使用位元;電腦中應該擁有儘可能大容量的儲存空間,這些儲存空間應該用來儲存程式碼和程式執行中產生的資料;這些指令在儲存空間中是順序存放的,而且可以由程式計數器進行定址,但允許條件跳轉。這就是儲存程式概念(stored-program concept)。

 11 電腦的發展

晶片:指內含整合電路的矽片,體積很小,常常是電腦或其他電子裝置的一部分。整合電路實體往往要以晶片的形式存在。

某種意義上,所有數字電腦都是相同的。如果一個處理器的硬體能做別的處理器做不了的,那麼別的處理器可以用軟體實現,最終它們能做同樣的事情。

以下三個指標經常用來作為微處理器相互比較的標準:

  • 處理器的資料通路的寬度。
  • 時鐘頻率是可串連到微處理器並能啟動並執行振蕩器的最大頻率。時鐘頻率決定了每一條指令的執行速度。
  • 可定址空間大小。
 12 8080微處理器

(1)除了累加器,8080微處理器內部還包括6個寄存器(register),每個寄存器可以儲存8位的值。這些寄存器和累加器非常相似,事實上,累加器被看作是一種特殊的寄存器。和累加器一樣,這6個寄存器也是鎖存器。處理器可以把資料從儲存空間傳送到寄存器,也可以把資料從寄存器送回到儲存空間。然而,這些寄存器沒有累加器的功能強大。

(2)該是談論8080標誌位的時候了。在第17章的處理器中,已有進位標誌位C F和零標誌位ZF。8080還有3個標誌位,即符號標誌位S F、奇偶標誌位P F和輔助進位標誌位A F。所有標誌位都儲存在另一個叫作程式狀態字(PSW:program status word)的8位寄存器中。

(3)堆棧是怎樣實現的呢?首先,堆棧只是不被別的東西使用的正常的RAM的一部分。8080微處理器包含一個特殊的16位寄存器來對這一部分儲存空間進行定址,這個16位寄存器叫作堆棧指標。

(4)對每個PUSH指令,堆棧都會增加2個位元組,這可能導致程式出現小毛病—堆棧可能會變得很大以致會覆蓋掉程式所需的一些代碼和資料。這就是堆棧上溢問題。同樣,過多的POP指令會過早用光堆棧內容,這就是堆棧下溢問題。由於程式碼放在低地址空間,為了避免相互幹擾,一般sp指向的是高地址空間,然後堆棧向低地址空間增長。

(5)第一個是Call(調用)指令。Call指令與Jump指令的不同之處在於:前者把一個新值裝入到程式計數器PC中,處理器儲存PC中原來的地址,儲存在哪裡?當然,在堆棧中。這種策略意味著Call指令可有效地儲存“程式從哪裡跳轉”的標記。處理器最終可利用此地址返回到原來的位置。這個返回指令叫Return。Return指令從堆棧中彈出兩個位元組,並把該值裝載到PC中。

(6)微處理器是怎樣與外圍裝置(對於串連到微處理器而不是儲存空間的東西的稱呼)進行通訊的呢?外圍裝置具有與儲存空間相似的介面,微處理器可通過對應於外設的具體地址來對外設進行讀寫。在有些微處理器中,外圍裝置實際上佔用了通常用來定址儲存空間的地址,這種配置叫作記憶體映像I/O。然而在8 0 8 0中,在65536個正常地址外還有256個附加地址專門為輸入輸出裝置預留,這些就是I/O連接埠(I/O Port)。I/O地址訊號為A0~A7,但I/O訪問與儲存空間訪問不同,由8228系統控制晶片鎖存的訊號來區分。

 

13 ASCII碼和字元轉換

數字電腦中唯一可以儲存的是位元。
人類所積累的大部分資訊,都是以各種文本形式儲存的,這些文本資訊是由各種人類可識別的符號(字元)構成的,比如字母、數字,標點符號等等。

為了將文本資訊儲存在電腦中,需要對每一個字元賦予一個唯一的編碼(位元序列)。

所謂編碼錶就是指 “字元 → 編碼(電腦中就是二進位位元序列)” 的這樣映射表。

這樣每一個字元的編碼就會佔據一定的位元。

對數字編碼?

數字(0-9)也是一種字元,所以可以像其他字元一樣,為每個字元賦予一個唯一的編碼。問題不就解決了。就看成一般字元就完事了嘛。

問題是數字在電腦中可以用十六進位碼、BCD碼等形式來表示,所以很蛋疼。

比如十進位數:12

ASCII碼:00110001 00110010 ;即31h和32h。

BCD碼:00010010 ;用4位位元來表示1位十進位數中的0~9這10個數位。

十六進位碼:00000001 00000010 ;即01和02h。

當數字以文字資料流的身份出現時,是以ASCII編碼的。和該數本身表示的含義無關。也就是說我們平時從鍵盤輸入一個數字(0-9)都是ASCII碼形式的。

 14 I/O裝置

輸出裝置:比如視頻顯示器CRT(電子射線管)。

視頻適配器是獨立存在的,它們擁有自己的電路板,也就是我們常說的顯卡。視頻適配器為視頻顯示器提供訊號。

視頻適配器中必須配置有一些RAM,用以儲存顯示的內容;微處理器也必須能夠向此RAM中寫入資料以改變顯示器上顯示的內容。當然這個RAM也可以是微處理器儲存空間的一部分。

字元產生器也是視頻適配器板上的一部分,包含了所有ASCII碼字元的像素圖,它是唯讀記憶體,即ROM,這些資料在廠家製造晶片時已經配置好了,當然你也可以對ROM晶片進行編程。可程式化唯讀記憶體PROM只能編程一次,而可擦除唯讀記憶體EPROM可以重複擦除和寫入。

只顯示文本的視頻顯示適配器還必須支援游標功能。游標所在的行和列常被儲存在兩個8位的寄存器中,這兩個寄存器也是視頻板的一部分,而且微處理器可以對其進行寫操作。

 

從鍵盤輸入字元,然後顯示在顯示器上的過程?

按下鍵盤中的某個鍵,產生一個對應的掃描碼,(注意,一般的鍵盤是不會本身提供ASCII碼對按鍵的對應關係的),然後通過一小段計算程式計算出這個按鍵對應的ASCII碼。

按下某個按鍵→產生中斷→運行中斷處理常式(在這個程式中會計算出這個按鍵對應的ASCII碼,並寫入儲存空間中)。

按照代碼轉換方式鍵盤可以分為編碼式和非編碼式兩種。編碼式鍵盤是通過數字電路直接產生對應於按鍵的ASCII碼,這種方式目前很少使用。非編碼式鍵盤將按鍵排列成矩陣的形式,由硬體或軟體隨時對矩陣掃描,一旦某一鍵被按下,該鍵的行列資訊即被轉換為位置碼並送入主機,再由鍵盤驅動程式查表,從而得到按鍵的ASCII碼,最後送入記憶體中的鍵盤緩衝區供主機分析執行。

具體可參看這裡。

 

一般我們從鍵盤輸入的最後都會以ASCII的方式存放到儲存空間,這些ASCII字元可以輸出給顯示適配器,然後顯示器顯示這些ASCII字元。

雖然這些ASCII字元是儲存在記憶體中的,但它們不是可執行檔檔案,因為這些位元組編碼代表字元,而不代表指令。

 

假設我們的命令列處理常式可以處理如下命令:

MOV A 3A

假設該命令會將十六進位表示的3A送到累加器A中,則鍵盤程式處理後的3A就變成了如下兩個ASCII編碼 33h 41h,而我們期待A中存放的是3Ah,那麼中間肯定會存在一個轉換程式:將 33h 41h 轉為 3Ah。

 

參考資料

《編碼:隱匿在電腦軟硬體背後的語言》

《編碼》讀書筆記:從無到有構建電腦系統

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.