剛好以前寫過一個顯示系統,不過用的是較早的電腦,但對輸入和顯示的原理還可以作解釋的。首先明確大的步驟,分三步:從鍵盤向主機傳輸訊號,主機進行處理,主機把處理好的訊號間接輸出到顯示器。第一步沒問題。第二步看情況。第三步有些變化。下面一一描述。第三步的變化在於,顯示器的模式有兩種,文字模式和影象模式。宣告一下,以下內容只針對老的電腦。鍵盤按下或放開時,傳入主機的是鍵位訊號,會觸發作業系統的鍵盤處理中斷,中斷服務程式把鍵位訊號解釋成按鍵的情況,比如按下的是abc,還是大寫的ABC,或者是多個鍵同時按下,比如組合鍵,或者是鍵盤的放開。一般的文字輸入就會放記憶體中的快取區,等待使用者程式的讀取。下面只假設輸入的是要顯示的abc。使用者程式向作業系統請求讀取輸入字母(或者作業系統向用戶程式傳送字母,哪種方式要看作業系統型別),讀出/獲取字母abc的ascii碼,使用者程式向介面輸出abc的ascii碼。注意,作業系統有顯示服務程式,使用者只要把abc的ascii碼給它就行了。顯示服務程式怎麼做呢?它負責定位,顯示設定等。先假設當前顯示模式是最簡單的文字模式,標準的是25行80列,每一格為16x8點陣。這種模式也就是剛開機時的顯示模式,或者是bios設定介面的顯示模式。作業系統的顯示服務程式,就是要把你的abc顯示到當前位置,步驟和原理如下。首先要解釋一下原理,老式顯示方式,是把視訊記憶體對映到記憶體地址的,比如地址範圍ff000000到ff7fffff的記憶體代表視訊記憶體(注意,這個地址是我亂寫的,意思一下,後面的地址都是亂寫的,只是作為解釋的例子),其中文字模式的快取需要一個螢幕的字元數,大概是80x25=2000個字元,ff000000到ff001a00的地址存放這2000個字元(再次說明,地址亂寫的),其中兩個位元組對應一個ascii碼,低位元組存放97(a的ascii碼值),高位元組存放屬性值,比如01代表紅色字,02代表藍色字,21代表蘭低白字,還有代表反色的,等等(屬性值也是亂編的,意思明白就行)。每個記憶體地址對應螢幕的某個位置,有規律可以計算。當作業系統的文字輸出服務程式把abc的ascii碼寫入顯示地址後,由於是共用地址,其實已經寫到了顯示裝備上了,比如顯示卡。接著是顯示器的事情了。顯示裝備不斷掃描顯示儲存區,遇到了97,就是a了,它會去讀字模,也就是a字的點陣,控制系統會根據字元屬性和字模點陣控制顯示裝置顯示出文字(不同種類的顯示器顯示方式也不同,液晶、映象管等),如果是映象管,主機在寫入字元時,還要呼叫小段彙編程式,等待掃描同步,讀取的是一個顯示裝置的狀態暫存器。後來,顯示裝置的字模是可以被批次替換的,你可以把自己設計的字模整批替換到裡面去,這樣可以在文字狀態顯示出繽紛圖案,就像開機一瞬間出現的顯示卡商標,當然,由於只包含了ascii碼錶的字元量,數量有限,不可能出現2000個不同字元。再一個制約,就是8以字元為單位的,解析度是80x25的色塊而已,但有些人發現,好像不是色塊啊,比如有曲線,那是把曲線分割成不同字模拼湊起來的,就像html5以前的網頁上的圓角一樣,用gif拼湊的。另外,還有暫存器是控制分頁的,可以把不同的記憶體塊作為當前顯示內容。好了,那麼其他顯示模式呢?比如win桌面,那是影象(圖形)模式,以點為單位,對應顯示記憶體的地址。單色1bit對應一個畫素,16色就是4bit對應一個畫素了,24位真彩色,32位彩色,自己算去。只要算出當前位置對應的記憶體地址,直接把字元點陣寫入相應的地址就行了。最初的中文dos系統就是把模式呼叫服務程式給改了,把文字模式改為了圖形模式,顯示用的字模全由CPU處理,字模開始是存在磁碟上的,運算量大增,顯示速度慢。現在也一樣,字模有作業系統提供。當然,現在顯示卡的功能大增,什麼的驅動,渲染,3d,沒有專業接觸根本不可能知道細節,我也只用過其中的高效能計算,不顯示的哪種。以上僅是比較原始較早的簡單過程,高階電腦肯定有所變化,注意甄別機制。
剛好以前寫過一個顯示系統,不過用的是較早的電腦,但對輸入和顯示的原理還可以作解釋的。首先明確大的步驟,分三步:從鍵盤向主機傳輸訊號,主機進行處理,主機把處理好的訊號間接輸出到顯示器。第一步沒問題。第二步看情況。第三步有些變化。下面一一描述。第三步的變化在於,顯示器的模式有兩種,文字模式和影象模式。宣告一下,以下內容只針對老的電腦。鍵盤按下或放開時,傳入主機的是鍵位訊號,會觸發作業系統的鍵盤處理中斷,中斷服務程式把鍵位訊號解釋成按鍵的情況,比如按下的是abc,還是大寫的ABC,或者是多個鍵同時按下,比如組合鍵,或者是鍵盤的放開。一般的文字輸入就會放記憶體中的快取區,等待使用者程式的讀取。下面只假設輸入的是要顯示的abc。使用者程式向作業系統請求讀取輸入字母(或者作業系統向用戶程式傳送字母,哪種方式要看作業系統型別),讀出/獲取字母abc的ascii碼,使用者程式向介面輸出abc的ascii碼。注意,作業系統有顯示服務程式,使用者只要把abc的ascii碼給它就行了。顯示服務程式怎麼做呢?它負責定位,顯示設定等。先假設當前顯示模式是最簡單的文字模式,標準的是25行80列,每一格為16x8點陣。這種模式也就是剛開機時的顯示模式,或者是bios設定介面的顯示模式。作業系統的顯示服務程式,就是要把你的abc顯示到當前位置,步驟和原理如下。首先要解釋一下原理,老式顯示方式,是把視訊記憶體對映到記憶體地址的,比如地址範圍ff000000到ff7fffff的記憶體代表視訊記憶體(注意,這個地址是我亂寫的,意思一下,後面的地址都是亂寫的,只是作為解釋的例子),其中文字模式的快取需要一個螢幕的字元數,大概是80x25=2000個字元,ff000000到ff001a00的地址存放這2000個字元(再次說明,地址亂寫的),其中兩個位元組對應一個ascii碼,低位元組存放97(a的ascii碼值),高位元組存放屬性值,比如01代表紅色字,02代表藍色字,21代表蘭低白字,還有代表反色的,等等(屬性值也是亂編的,意思明白就行)。每個記憶體地址對應螢幕的某個位置,有規律可以計算。當作業系統的文字輸出服務程式把abc的ascii碼寫入顯示地址後,由於是共用地址,其實已經寫到了顯示裝備上了,比如顯示卡。接著是顯示器的事情了。顯示裝備不斷掃描顯示儲存區,遇到了97,就是a了,它會去讀字模,也就是a字的點陣,控制系統會根據字元屬性和字模點陣控制顯示裝置顯示出文字(不同種類的顯示器顯示方式也不同,液晶、映象管等),如果是映象管,主機在寫入字元時,還要呼叫小段彙編程式,等待掃描同步,讀取的是一個顯示裝置的狀態暫存器。後來,顯示裝置的字模是可以被批次替換的,你可以把自己設計的字模整批替換到裡面去,這樣可以在文字狀態顯示出繽紛圖案,就像開機一瞬間出現的顯示卡商標,當然,由於只包含了ascii碼錶的字元量,數量有限,不可能出現2000個不同字元。再一個制約,就是8以字元為單位的,解析度是80x25的色塊而已,但有些人發現,好像不是色塊啊,比如有曲線,那是把曲線分割成不同字模拼湊起來的,就像html5以前的網頁上的圓角一樣,用gif拼湊的。另外,還有暫存器是控制分頁的,可以把不同的記憶體塊作為當前顯示內容。好了,那麼其他顯示模式呢?比如win桌面,那是影象(圖形)模式,以點為單位,對應顯示記憶體的地址。單色1bit對應一個畫素,16色就是4bit對應一個畫素了,24位真彩色,32位彩色,自己算去。只要算出當前位置對應的記憶體地址,直接把字元點陣寫入相應的地址就行了。最初的中文dos系統就是把模式呼叫服務程式給改了,把文字模式改為了圖形模式,顯示用的字模全由CPU處理,字模開始是存在磁碟上的,運算量大增,顯示速度慢。現在也一樣,字模有作業系統提供。當然,現在顯示卡的功能大增,什麼的驅動,渲染,3d,沒有專業接觸根本不可能知道細節,我也只用過其中的高效能計算,不顯示的哪種。以上僅是比較原始較早的簡單過程,高階電腦肯定有所變化,注意甄別機制。