我想用啊,9h在螢屏上寫一條訊息。但是當我清理螢屏時,文本屬性將文本更改為黑底黑字。我應該將清潔螢屏程序更改為哪個值。所以文本將可見?謝謝。
DATASEG
message db 'GAME OVER$'
清潔螢屏程序。:
push cx bx
mov cx,2000d
mov bx,0
clean:
mov [WORD ptr es:bx],00 ; the value that should be changed
add bx, 2
loop clean
pop cx bx
ret
endp cleanscreen
“主要”中的呼叫:
call cleanscreen
mov dx, offset message
mov ah,9h
int 21h
uj5u.com熱心網友回復:
暫存器保存錯誤
push cx bx ... pop cx bx ret
堆疊是一個后進先出結構(LastInFirstOut);最后入堆疊的,必須先取出。在您的代碼中,BX暫存器最后被推送,因此它必須首先使用pop bx cx.
如果堆疊是您還不習慣的東西,我建議使用另一種撰寫方式:
push cx
push bx
...
pop bx
pop cx
ret
使用字符屬性
您使用的文本螢屏為它顯示的每個字符存盤 3 條資訊。
對于視頻存盤器中的每個字,低位元組將包含字符的A SCII 代碼,高位元組將在低半位元組中記錄字符的前景色,在高半位元組中記錄字符的背景顏色。
bbbbffffAAAAAAAAh
mov [WORD ptr es:bx],00像這樣使用標簽的指令WORD,將清除所有 3 條資訊,產生一個 BlackOnBlack 空格字符。請注意,寫作00絕不意味著byte,也不意味著 write0000意味著word。操作的大小由提及byte ptr或定義word ptr。
在我對類似問題的回答下方的評論中,您建議自己一種無需觸摸顏色屬性即可清潔螢屏的方法:
xor bx, bx
clean:
mov [BYTE ptr es:bx],00 ; Only the ASCII field
add bx, 2
loop clean
為了將螢屏顏色更改為 WhiteOnBlack (07h) 并保留現有文本,我們可以使用:
mov bx, 1
clean:
mov [BYTE ptr es:bx], 07h ; Only the attribute field
add bx, 2
loop clean
并且要將螢屏完全恢復到 WhiteOnBlack 空間 (0720h),請使用:
xor bx, bx
clean:
mov [WORD ptr es:bx], 0720h ; ASCII & attribute fields
add bx, 2
loop clean
對于 BrightWhiteOnBlack,使用 0F20h。
uj5u.com熱心網友回復:
您在哪里使用 mov word ptr es:[bx], 0 最好使用 0f20h ... 0F 表示黑底白字, 20h 是空格字符
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/411267.html
標籤:
