如何将颜色属性更改为黑底白字
how to change the color attribute to white-on- black
我想用 ah, 9h 在屏幕上写一条消息。但是当我清洁屏幕时,文本属性将文本更改为黑底黑字。我应该将清洁屏幕过程更改为哪个值。所以文字会可见吗?谢谢。
DATASEG
message db 'GAME OVER$'
cleanscreen 过程。 :
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
寄存器保存错误
push cx bx
...
pop cx bx
ret
栈是后进先出结构(LastInFirstOut);最后进入堆栈的东西,必须最先离开。在您的代码中,BX
寄存器最后被推送,因此它必须首先使用 pop bx cx
.
之类的代码关闭
如果堆栈是你还不适应的东西,我建议使用另一种写法:
push cx
push bx
...
pop bx
pop cx
ret
使用角色属性
您使用的文本屏幕为其显示的每个字符存储 3 条信息。
对于显存中的每个字,低字节将包含字符的ASCII码,而高字节将存储字符的f前景低半字节的颜色和高半字节字符的 b背景颜色。
bbbbffffAAAAAAAAh
像mov [WORD ptr es:bx],00
这样使用WORD
标签的指令,将清除所有3条信息,产生一个BlackOnBlack space字符。请注意,写 00
绝不意味着 byte,写 0000
也不意味着 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 spaces (0720h),请使用:
xor bx, bx
clean:
mov [WORD ptr es:bx], 0720h ; ASCII & attribute fields
add bx, 2
loop clean
对于 BrightWhiteOnBlack 使用 0F20h。
你使用 mov word ptr es:[bx] 的地方,0 最好使用 0f20h ... 0F 表示黑底白字,20h 是 space 字符
我想用 ah, 9h 在屏幕上写一条消息。但是当我清洁屏幕时,文本属性将文本更改为黑底黑字。我应该将清洁屏幕过程更改为哪个值。所以文字会可见吗?谢谢。
DATASEG
message db 'GAME OVER$'
cleanscreen 过程。 :
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
寄存器保存错误
push cx bx ... pop cx bx ret
栈是后进先出结构(LastInFirstOut);最后进入堆栈的东西,必须最先离开。在您的代码中,BX
寄存器最后被推送,因此它必须首先使用 pop bx cx
.
之类的代码关闭
如果堆栈是你还不适应的东西,我建议使用另一种写法:
push cx
push bx
...
pop bx
pop cx
ret
使用角色属性
您使用的文本屏幕为其显示的每个字符存储 3 条信息。
对于显存中的每个字,低字节将包含字符的ASCII码,而高字节将存储字符的f前景低半字节的颜色和高半字节字符的 b背景颜色。
bbbbffffAAAAAAAAh
像mov [WORD ptr es:bx],00
这样使用WORD
标签的指令,将清除所有3条信息,产生一个BlackOnBlack space字符。请注意,写 00
绝不意味着 byte,写 0000
也不意味着 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 spaces (0720h),请使用:
xor bx, bx
clean:
mov [WORD ptr es:bx], 0720h ; ASCII & attribute fields
add bx, 2
loop clean
对于 BrightWhiteOnBlack 使用 0F20h。
你使用 mov word ptr es:[bx] 的地方,0 最好使用 0f20h ... 0F 表示黑底白字,20h 是 space 字符