CPU 只能進行數值運算,那麼計算機是怎麼顯示出字符的? | 知乎問答精選

 

A-A+

CPU 只能進行數值運算,那麼計算機是怎麼顯示出字符的?

2018年01月20日 知乎問答精選 暫無評論 閱讀 18 ℃ 次

【韓祝鵬的回答(99票)】:

怎麼顯示出字符?

你是想問:只能執行數值邏輯運算的CPU最終如何在顯示器上顯示出文字? 對吧。

廣義的「輸出」 包括很多,比如顯示器、打印機、繪圖儀、甚至寫磁盤、寫網絡,都算是輸出。

我們以如何在屏幕上顯示來舉例說明。

其實要想理解這個原理,看看單片機如何點亮LED燈、如何寫一個LCD屏幕,會更加直觀。因為現在的PC機,已經包裝了太多層了,很難一下子弄明白。我們一步步來:

一個Arduino 單片機的例子:

上面中下部那個黑長條,就是一個微型的計算機,包含了CPU及內存,輸入輸出控制等。上面中下部那個黑長條,就是一個微型的計算機,包含了CPU及內存,輸入輸出控制等。

它的代碼很簡單:它的代碼很簡單:

void setup() {

pinMode(13, OUTPUT);

digitalWrite(13, HIGH);

}

上圖中,發光二極管的正極接到第13個接口,負極接地。程序啟動時,將第13數字接口設置為輸出(OUTPUT),然後給這個接口寫入一個高電平。這樣,LED燈就亮了。

在這個單片機裡包含了一個CPU,它執行二進制的程序,根據程序去控制這些IO接口,與IO接口相連的外部設備就可以響應了。當然,這是最最簡化的一種情況,複雜的外設控制起來需要特別複雜的程序,一般會封裝成驅動程序。

能點亮一個LED,就可以點亮很多:

上圖中 16X16 共256個LED燈,你可以把它看成是一個16X16分辨率的單色顯示器。我們通常用的液晶屏幕,分辨率在1024X768甚至更高,但是原理可以認為類似。上圖中 16X16 共256個LED燈,你可以把它看成是一個16X16分辨率的單色顯示器。我們通常用的液晶屏幕,分辨率在1024X768甚至更高,但是原理可以認為類似。

在第一個例子中,一個LED燈接入了單片機上一個輸出接口裡,但是這個單片機沒有256個那麼多的輸出口怎麼辦?我們看這個圖裡,實際上上面的單片機和下面的LED板子之間的連線並不多。(只有5根,還有兩根是供電的)。cpu通過向這5根數據接口裡寫入高低電平的信號,與下面的顯示板通訊。其實就是告訴下面,第幾排第機列的LED燈是點亮還是滅掉。

像上面這個圖,會發出類似這樣的信息:

第2排第2列,點亮

第2排第3列,點亮,

。。。。

那麼我們要輸出一個文字,豈不是要寫很麻煩的程序?

這些麻煩事底層的程序幫我們做了。

例如,我們最後的程序想要輸出這個「陸」字,只要像下面這樣寫:

(write "陸")

print "陸"

printf("陸")

我們繼續看個更複雜些的例子,用Arduino驅動諾基亞5110液晶屏顯示文字,帖個帖子的地址:

arduino uno + nokia 5110

你可以看下帖子裡的程序。那個程序裡有個數組:你可以看下帖子裡的程序。那個程序裡有個數組:

static const byte ASCII[][5] =

{ ........................

{

0x7e, 0x11, 0x11, 0x11, 0x7e } // 41 A

,{

0x7f, 0x49, 0x49, 0x49, 0x36 } // 42 B

,{

0x3e, 0x41, 0x41, 0x41, 0x22 } // 43 C

。。。。。這就是每個字符對應的「樣子」,就是一個5X8的矩陣。就是字體。

其中我們只需要寫:

gotoXY(2,2);

LcdString("Albert Lee");

這樣的語句就可以了,LcdString 函數會調用LcdCharacter 函數來寫一個個字符。LcdCharacter函數會查每一個字符對應的「字體表」,得到對應的一個矩陣,這個矩陣對應到屏幕上一塊矩形區域,矩陣中是1的位置,屏幕上對應點就點亮,是0的位置,屏幕上對應點就滅。

現在我們常用的Windows或 Linux,將這些顯示文字的功能做到操作系統及驅動中了,但整體的過程與上面那個程序是類似的。

不同的編程語言,不管是編譯的還是解釋的,最終都會調用到系統提供的輔助程序,它們會把輸出的字符翻譯成一個二維的點陣,然後把這個點陣顯示到屏幕上面。

CPU不單單是數字運算,它其實包含一個叫 ALU 的部件:Arithmetic logic unit 算術與邏輯單元。所有的信息,不管是文字還是圖像、聲音,都可以轉換成二進制的數據,而處理他們需要用到計算和邏輯判斷的組合。

這裡說得很籠統也不嚴謹,如果想要深入的瞭解這方面知識,有一門專門的課程:計算機體系結構。

你現在在學SICP的話,可以先把這些疑問放下,只需要知道下面有一層一層的抽像,把你的程序從S表達式變成電子的運動。

SICP課程的精髓,就是講抽像。

標籤:-編程 -計算機科學 -韓祝鵬 -選秀


相關資源:





給我留言