Assembly 如何在蓝色屏幕上打印文本?

Assembly 如何在蓝色屏幕上打印文本?,assembly,x86,Assembly,X86,我有一个问题。如何在蓝色屏幕上打印文本 start: mov ax, 07C0h add ax, 288 mov ss, ax mov sp, 4096 mov ax, 07C0h mov ds, ax ;------------------------------------------------- mov ah, 09h mov cx, 1000h

我有一个问题。如何在蓝色屏幕上打印文本

start:
        mov ax, 07C0h
        add ax, 288
        mov ss, ax
        mov sp, 4096
        mov ax, 07C0h
        mov ds, ax
;-------------------------------------------------
        mov ah, 09h
        mov cx, 1000h
        mov al, 20h
        mov bl, 17h
        mov si, text_string
        int 10h
        jmp $
        text_string db 'This is my Operating System!', 0
print_string:
        mov ah, 0Eh
.repeat:
        lodsb
        cmp al, 0
        je .done
        int 10h
        jmp .repeat
.done:
        ret
        times 510-($-$$) db 0
        dw 0xAA55           
这是我的密码。我写了
mov-si,text\u-string
,但它不起作用。请帮帮我。

您的打印字符串例程使用BIOS电传打字功能在屏幕上输入字符。不幸的是,在处理文本模式屏幕时,此函数不会以任何特定颜色输出

由于您的目标是在蓝色屏幕上打印字符,因此首先确保屏幕实际上是蓝色的

        mov dx, 184Fh   ; lower right (79,24)
        xor cx, cx      ; upper left (0,0)
        mov bh, 1Fh     ; brightwhite on blue
        mov ax, 0600h   ; clear screen
        int 10h
此后,您可以调用使用BIOS电传打字功能的打印字符串例程:

        mov  si, text_string
        call print_string
        jmp  $

        text_string db 'This is my Operating System!', 0

print_string:
        mov  ah, 0Eh
        jmp  .first
.print: int  10h
.first: lodsb
        test al, al
        jnz  .print
        ret

47
2F
,它是绿色而不是蓝色,而且你甚至不调用你的
print\u字符串。这也不会在蓝色屏幕上打印文本。您是想清除整个屏幕的蓝色,还是想用蓝色背景单独打印字符?@MichaelPetch属性17h将生成WhiteOnBlue,与您刚才所写的相反!哦,对不起。我已编辑。接受答案已将您的问题标记为已回答。不要在标题中添加“closed”或“solved”之类的内容。可能值得注意的是,与普通的透明屏幕不同,这不会将光标设置在屏幕的左上角(对于该行为,您必须在之后调用int 10/ah=2)。另一方面,这还假设当前的文本模式屏幕大小为80x25。您可以从BDA读取大小,方法如下:
push ds
mov ds,cx
mov dh,[484h]
mov dl,[44ah]
dec dl
mov bh,1Fh
mov ax,0600h
int10h
pop-ds