每個人!我正在提高我的匯編低級技能,并使自己成為一個簡單的引導程式。我現在做了一些例程和入口點并成功輸出一條訊息,但是,我想清除螢屏,所以在輸出我的訊息時,它是干凈的。我一直試圖使該清除的常規AX
暫存器,存盤地址的內容0xb800
,以BX
復印或MOV
荷蘭國際集團的內容AX
暫存器。像這樣:
vram equ 0xb800
xor ax, ax
mov bx, [vram]
mov bx, ax
int 10h
它成功清除了螢屏,但我遇到了問題,如圖所示,它會拉伸文本。
然后我搜索了一些答案。我沒有找到一些答案,因為搜索結果只是給了我 DOS 中斷來清除螢屏。
但是,我確實嘗試使用INT 10, AH=07h
但我不知道如何使用它。
請幫我一把謝謝!:D
uj5u.com熱心網友回復:
文本被“拉伸”,因為您設定了 40 列螢屏!你寫過:
xor ax, ax <<<< This is video mode 0, so 40x25 16-color text int 10h
用
mov 0003h
int 10h
設定 80x25 16 色文本螢屏。
vram equ 0xb800 xor ax, ax mov bx, [vram] mov bx, ax int 10h
在上面的代碼中,您似乎混合了兩種清除螢屏的方法。
設定視頻模式
BIOS 提供了多種視頻模式。有些是文本模式,有些是圖形模式。在圖形模式中,您可以處理每個像素,而在文本模式中,您可以處理彩色字符。當然,在圖形模式下,您也可以輸出彩色字符。
這是更相關模式的串列:
01h 40x25 16-color text 25 rows, 40 columns -> wide characters!
03h 80x25 16-color text 25 rows, 80 columns
07h 80x25 monochrome text 25 rows, 80 columns
10h 640x350 16-color graphics 25 rows, 80 columns
12h 640x480 16-color graphics 30 rows, 80 columns
13h 320x200 256-color graphics 25 rows, 40 columns -> wide characters!
手動清除視頻記憶體
您的等式vram equ 0xb800
表示重新生成緩沖區所在的記憶體段。值 0xB800 需要加載到段暫存器中。下一個代碼將清除(第一頁)80x25 文本螢屏:
mov ax, vram
mov es, ax
xor di, di
mov cx, 80 * 25
mov ax, 0720h ; WhiteOnBlack space character
cld
rep stosw
使用 BIOS 清除顯存
BIOS 提供了 2 個可以在活動頁面滾動視窗的函式,大部分時間是 DisplayPage 0。接下來的代碼使用函式 07h 清除(整個活動頁面)80x25 文本螢屏:
mov dx, 184Fh ; (79,24) Lowerright corner
xor cx, cx ; (0,0) Upperleft corner
mov bh, 07h ; WhiteOnBlack
mov ax, 0700h ; BIOS.ScrollWindowDown, AL=0 ClearWindow
int 10h
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/352207.html
下一篇:有沒有辦法將浮點立即分配給暫存器