2012-10-10 14 views

回答

1

我可能能夠部分地從我記憶中的早期本科生那裏得到幫助。

在DOS中,地址0xB8000000(0xB800:0作爲段:偏移在註釋中正確地指出)是文本模式的視頻存儲器(0xA8000000在於用於圖形)的起始地址。寫入該區域的任何東西都直接複製到vga卡。現在屏幕上的每個字符都由兩個字節組成。第一個字節是ascii字符,第二個字符是顏色。

因此,您有效地在16位c中使用遠指針(因爲常規的近指針不會),併爲其分配上述地址。然後假設您的屏幕尺寸(25 * 80)或其他* 2是填充屏幕的單字節地址的總數。

我記得使用上面寫了相當於一個平凡的printf函數。

回到你的問題,你必須編寫代碼,循環遍歷從上面的地址到屏幕尺寸的所有偶數地址。偶數地址,因爲奇數代表顏色。在那裏它檢查分配的字符是否是有效的ascii並且根據需要增加或減少,例如, 'A'+ 32會讓你'a'等等。

問題依然存在上面的程序是這樣做的。我相信你可以在dos.h中有一些中斷或類似的東西,每當任何屏幕字符被改變時觸發。但是這部分在我的記憶中並不是很清楚。

看看是否適合你。

+0

'0xB8000000'有太多的零,它是錯誤或混淆。實模式地址是0xB800:0(段:偏移量)。它對應的物理地址是'0xB8000'。 –

+0

實際上寫它的起源是記住賦值char far * p = 0xB8000000L;遠指針是四個字節,所以地址被指定爲平面32位的等效值。雖然我同意概念0xB800:0在文字上更好。我會編輯 - 謝謝 – fayyazkl