我编写汇编代码只是为了编写一个具有蓝色背景和白色前景的字符。它可以在emu8086的模拟器中使用,但是当我在DosBox上打开它时,它不会显示背景色。
使用Emu8086:
使用DosBox:
mov ax,0012h
int 10h
mov ah,9
mov al,31h
mov bl,1fh
int 10h
答案 0 :(得分:3)
在图形视频模式下,BIOS功能09h的BL
参数仅定义前景色。始终应用于黑色背景。
下面是我对该功能功能扩展的实现。现在BL
拥有一个属性(前景色和背景色),就像在文本视频模式下一样。
仅在图形视频模式下有效
; IN (al,bl,cx) OUT ()
EnhancedWriteCharacterWithAttribute:
pusha
mov bh, 0 ;Display page 0
mov bp, bx
push ax
shr bl, 4 ;Get background color (high nibble)
mov ax, 09DBh ;ASCII DBh is full block character
int 10h ;BIOS.WriteCharacterAndAttribute
xor bx, bp ;Anticipate upcoming 'xor'
and bl, 15 ;Get foreground color (low nibble)
or bl, 128 ;Have BIOS 'xor' it
pop ax
int 10h ;BIOS.WriteCharacterAndAttribute
popa
ret
像这样使用它:
mov ax, 0012h ; BIOS.SetVideo 640x480x16
int 10h
mov al, "1" ; Character
mov bl, 1Fh ; Attribute
mov cx, 80 ; Repetition count
call EnhancedWriteCharacterWithAttribute
在CX
中提供大量重复计数的文本视频模式下,可以一次写入整个屏幕。在图形视频模式下,这是不可能的,因为BIOS将停止在屏幕的右边缘。
您可能想阅读Displaying characters with DOS or BIOS,以获取有关如何实现当前和未来目标的更多信息。