?? page263.html
字號:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第9章 圖形顯示</title>
</head>
<body>
<style type="text/css">
body {
background-color: #c0c0c0;
}
table {
background-color: #c0c0c0;
line-height: 24px;
}
</style>
<!導航條>
<p><a href="content1.html">目錄</a> <a href="page262.html">上一頁</a> <a href="page264.html">下一頁</a> <a href="page269.html">下一章</a></p>
<table border=0 align="center" width=800 frame="box" rules="none">
<!標尺行>
<tr>
<td width=3%></td><td width=6%></td><td width=1%></td> <!左側空白>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=1%></td><td width=6%></td><td width=3%></td> <!右側空白>
</tr>
<!頁眉行>
<tr height=60 valign="bottom">
<td></td><td></td><td></td>
<td colspan=6><img src="icons/flag.gif"></td><td colspan=4></td><td colspan=6 align="right">第9章 圖形顯示</td> <!章節名>
<td></td><td>-263-</td><td></td> <!頁碼>
</tr>
<!頁眉線>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!正文>
<font face="宋體" lang="ZH-CN" size=3>
<tr height=20><td colspan=22></td></tr> <!頂部空白>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
比較慢,不利于編制快速的圖形程序。要想編制出高速的圖形程序,我們還是需要直接對視頻緩沖存儲器進行操作,這就是本章第二節所要討論的內容。
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18><font face="黑體"><a name="92">9.2 直接寫屏</a></font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
在第六章里我們已經說過,屏幕上顯示的內容與視頻緩沖存儲器內的數據具有單一的對應關系。在字符模式下屏幕上某個位置顯示出的一個字符與視頻緩存內特定地址存放的ASCII碼與屬性字節是相對應的。修改視頻緩存中某個字節的內容,屏幕上相應位置的字符就會隨之改變,或者變成其它字符,也可能改變了顏色。<br>
圖形模式下也是這樣,但在圖形模式下這種對應關系"細化"了,不再是"字符--字節"之間的對應關系,而是變成"點--位"之間相對應。近一步說,是屏幕上的一個點與視頻緩存中某個字節的某幾個位相對應。<br>
為了搞清點與位之間的對應關系,我們還是要把DEBUG請出來。首先,我們先編個小程序將顯示模式設置為CGA模式4:
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=12>
鍵入G命令后屏幕被置成圖形模式,此時我們即可修改視頻緩沖區了,還記得我們前面討論過的"E"命令嗎?<br>
在開始改變視頻緩沖區之前,我們需要先將屏幕上亂糟糟的文字清除掉,免得影響觀察。方法比較"土",連續按住回車鍵不放,屏幕上的文字自然會"滾"出屏幕。而且此時光標也到了屏幕最低端。<br>
CGA模式4所需的顯示緩存段地址同樣是0B800H,這和文本模式相同。現在我們將顯示緩存中第一個字節修改為"0AAH":
</td>
<td colspan=6>
C:\ASM\>DEBUG[Enter]<br>
-a100[Enter]<br>
0E6A:0100 mov ax,0004<br>
0E6A:0103 int 10<br>
0E6A:0105 int 20<br>
0E6A:0107<br>
-g=100
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
-EB800:0 AA[Enter]<br>
打一個空格之后注意觀察屏幕左上角,看到有一道彩色的短橫線嗎?<br>
如果我們連續地修改顯示緩存,就會看到這條短橫線不斷伸長,當然,我們無法使它最終延長到屏幕右側,因為隨著屏幕的滾動這條短線將被推到屏幕之外。看來若要在屏幕上畫出較長的線來還要想別的方法。<br>
好在我們的老朋友"DEBUG"還是很體諒人的,它提供了一個專用于"填充內存塊"的命令--F(Fill)。這個命令的使用方法如下:<br>
<font face="楷體_GB2312">
F<內存地址> <填充的字節數> <所填入的數據><br>
</font>
現在我們再次將屏幕清理干凈,并使用"F"命令將顯示緩沖區前50H個字節填成"0AAH":<br>
-FB800:0 4F AA[Enter]<br>
于是屏幕最頂端出現了一條直線。當然,我們可以多填充一些字節,將剛才鍵入的命令做些變化,把命令中的4F變成50,看看有什么不同之處。<br>
-FB800:0 50 AA[Enter]<br>
區別還是有的:這條直線長了一些,而且長出的這一段在下面的一行最左端。由此看來顯示緩沖區中每50H個字節對應著屏幕上的一個整行。<br>
前面我們已經討論過,在CGA模式4下屏幕水平方向上可以顯示320個點,而一行又恰好對應了顯示緩沖區中80個字節,所以可以算出顯示緩沖區內每一個字節對應了屏幕上的4個點。
</td>
<td></td><td></td> <!右邊距>
</tr>
</font>
<!頁腳線>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!頁腳>
<tr height=60 valign="top">
<td></td><td></td>
<td colspan=9><i>Copyright © 2004-2005 <a href="mailto:webmaster@nucstorm.com">Chunk Lee</a></i></td>
<td colspan=9 align="right"><i><a href="http://www.nucstorm.com" target="_top">www.nucstorm.com</a></i></td>
<td></td><td></td>
</tr>
</table>
<!導航條>
<p align="right"><a href="content1.html">目錄</a> <a href="page262.html">上一頁</a> <a href="page264.html">下一頁</a> <a href="page269.html">下一章</a></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -