匯編手記之微機顯示輸出
顯示輸出。
顯示器通過顯示適配卡與系統(tǒng)連接,顯示適配卡是顯示器與微機系統(tǒng)的接口。
由于在微機系統(tǒng)中處理的是二進制模擬量,這些信號量不能直接用以控制屏幕顯示。這時,就需要通過一個接口,經(jīng)過轉(zhuǎn)換模擬量,運算放大…再用以控制屏幕顯示。
所謂接口,通俗的理解是一個起緩沖與協(xié)調(diào)作用的電路模塊。緩沖對應運算速度的差異,協(xié)調(diào)則用以消除不同量之間的轉(zhuǎn)換問題。
早期的顯示適配卡是CGA和EGA。目前較高級的顯示適配卡是VGA與TVGA。它們都支持兩種顯示方式:文字和圖形顯示方式。而每種顯示方式又含有不同的顯示模式。
目前我只了解一些在匯編環(huán)境下的文字顯示方式,圖形顯示方式太復雜,而且,文字顯示方式也是“美國電子計算機協(xié)會”的標準,對于中文的顯示,暫不論。
文本顯示方式是指以字符(string)為單位的顯示方式。字符包括:A~Z,a~z,0~9。還有一些普通符號:?%¥?!取R约耙恍┨厥夥?,如菱形塊和矩興塊。
文本顯示方式采用0~3號顯示模式,每種顯示模式每屏可顯示的字符數(shù)以及可使用的顏色數(shù)目不同。常用的是3號顯示模式,此模式之下,顯示器屏幕被劃分為80列25行。容易算出,3號顯示模式下,每屏可顯示:25X80=2000個字符。
匯編程序的寫屏,就是通過行,列為坐標確定屏幕上的位置的。在3號模式中,左上角,左下角,右上角,右下角的坐標為:(0,0),(24,0),(0,79),(24,79).
在屏幕上顯示一個字符,需要兩個字節(jié)。八位二進制數(shù)為一字節(jié)(1byte),那么,我們在屏幕上看到的一個字符,實際上是由十六個二進制數(shù)0或1構成的。而在匯編語言中,數(shù)據(jù)的默認位數(shù)為:十六位。屏幕顯示字符的規(guī)則是:一字節(jié)為字符代碼,一字節(jié)為字符屬性。由兩字節(jié)組成一個十六進制數(shù)控制屏顯字符。A~Z,a~z,0~9…以及鍵盤上的控制字符,運算符號的字符代碼和掃描碼可在百度鍵入“ASCLL碼與掃描碼表”查詢。
字符屬性是指字符顯示時的特性。在單色顯示時,屬性定義了閃爍,反相和高亮等顯示特性;在彩色顯示則多定義了前景色和背景色。一字節(jié)的字符屬性是這樣定義的:D7,D6,D5,D4,D3,D2,D1,D0=BL,R,G,B,I,R,G,B。
其中D7~D0為八位二進制數(shù)0或1。
R,G,B為三色:red,grass,blue.(紅,綠,藍)。
BL表示閃爍。當BL位,即D7,為0時表示前景字符不閃爍。為1時表示前景字符閃爍。
I表示亮度:當I ,即D3,為0時,表示前景字符為一般強度;為1時,表示前景字符為高亮度。亮度和閃爍只用于前景。
簡言之:位D4~D6組合8種背景色;D0~D3組合16種前景色,BL與I定義前景的閃爍和強度。
例如我要在(0,0)坐標顯示一字符,它的字符屬性為:背景色黑色,前景色藍色。那么,字符屬性字節(jié)就是:00000001。具體的意義是:00000001=BL,R,G,B,I,R,G,B。二進制數(shù)00000001換為十六進制數(shù)是:01H。
同理,黑底紅字:00000100=04H。白底紅閃爍字:11110100=0F4H。
就筆者了解,在編程中,無論何種顏色都是通過對“三原色”(紅,綠,藍)的設置調(diào)出來的。JAVA.C…等編程語言的調(diào)色規(guī)則可在百度查詢。
評論