如何将颜色属性更改为"白上黑"



我想用啊,9h在屏幕上写一条消息。但是当我清理屏幕时,文本属性会将文本更改为黑底黑。我应该将clean screen进程更改为哪个值。那么文本将是可见的?谢谢

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    

在";"main":

call cleanscreen
mov dx, offset message
mov ah,9h
int 21h

寄存器保存错误

push cx bx
...
pop cx bx
ret

堆栈是LIFO结构(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空格字符。请注意,写00并不意味着字节,写0000也不意味着单词。通过提及byte ptrword 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。

在使用mov单词ptr es:[bx]的地方,0最好使用0f20h。。。0F表示黑底白字,20h表示空格字符

最新更新