Assembly 使用x86程序集更改背景色和前景色

Assembly 使用x86程序集更改背景色和前景色,assembly,x86,dos,x86-16,qemu,Assembly,X86,Dos,X86 16,Qemu,我正在尝试使用x86程序集更改屏幕的背景色和前景色,但它不起作用: mov ax,0 mov al,11101100b int 10h ret 据我所知,代码是正确的。我做错什么了吗?我以前尝试过以下代码: mov ax, 0600h mov bh, 11110000b mov cx, 0000h mov dx, 1010h int 10h 但它在屏幕的一角形成了一个白色的小矩形,并覆盖了一些文本 这个问题相当模糊。你想用一种颜色画整个屏幕吗 中断10没有屏幕当前颜色/背景的概念。它能够输出

我正在尝试使用x86程序集更改屏幕的背景色和前景色,但它不起作用:

mov ax,0
mov al,11101100b
int 10h
ret
据我所知,代码是正确的。我做错什么了吗?我以前尝试过以下代码:

mov ax, 0600h
mov bh, 11110000b
mov cx, 0000h
mov dx, 1010h
int 10h

但它在屏幕的一角形成了一个白色的小矩形,并覆盖了一些文本

这个问题相当模糊。你想用一种颜色画整个屏幕吗

中断10没有屏幕当前颜色/背景的概念。它能够输出具有给定背景和颜色的单个字符(功能AH=9);如果按屏幕行和列循环使用,可以用颜色填充整个屏幕


作为记录,在文本模式下,直接读取/写入帧缓冲区(0xb800:0000)要比使用中断10h容易得多。

这个问题相当模糊。你想用一种颜色画整个屏幕吗

中断10没有屏幕当前颜色/背景的概念。它能够输出具有给定背景和颜色的单个字符(功能AH=9);如果按屏幕行和列循环使用,可以用颜色填充整个屏幕


作为记录,在文本模式下,直接读取/写入帧缓冲区(0xb800:0000)比使用中断10h容易得多。

您首先尝试的代码运行良好,并且有很好的文档记录

…矩形显示在文本顶部

这可能是因为您没有设置正确的窗口大小。默认情况下,视频模式设置为模式3,即80x25

为了确保这一点,您可以自己设置:

MOV AH,00h      ; Set video mode
MOV AL,03h      ; Mode 3 (Color text)
INT 10H
我对您以前使用的代码做了一些更改,我将尝试解释这些更改:

MOV AX, 0600h        ; AH=06(scroll up window), AL=00(entire window)
MOV BH, 00010111b    ; left nibble for background (blue), right nibble for foreground (light gray)
MOV CX, 0000h        ; CH=00(top), CL=00(left)
MOV DX, 1010h        ; DH=19(bottom), DL=50(right)
INT 10h

如上所示,DH和DL定义了右下角。我们的窗口大小是80x25,因此我们必须将DH设置为19h(十进制为25),将DL设置为50h(十进制为80)。

您首先尝试的代码运行良好,并且有很好的文档记录

…矩形显示在文本顶部

这可能是因为您没有设置正确的窗口大小。默认情况下,视频模式设置为模式3,即80x25

为了确保这一点,您可以自己设置:

MOV AH,00h      ; Set video mode
MOV AL,03h      ; Mode 3 (Color text)
INT 10H
我对您以前使用的代码做了一些更改,我将尝试解释这些更改:

MOV AX, 0600h        ; AH=06(scroll up window), AL=00(entire window)
MOV BH, 00010111b    ; left nibble for background (blue), right nibble for foreground (light gray)
MOV CX, 0000h        ; CH=00(top), CL=00(left)
MOV DX, 1010h        ; DH=19(bottom), DL=50(right)
INT 10h


如上所示,DH和DL定义了右下角。我们的窗口大小是80x25,所以我们必须将DH设置为19h(十进制为25),将DL设置为50h(十进制为80)。

什么操作系统等?这是16位DOS还是什么?
int10h,ah=0
用于设置视频模式。我不知道你为什么认为它可以设置前景色/背景色。@PaulR:我是通过QEMU运行代码的。@interjay:我遵循了这里提到的方法:@theblixguy你链接的页面上的示例有很好的文档记录,并准确地描述了每一行所做的事情。您在第一个示例中尝试的代码与该代码明显不同。你确定你知道你在做什么吗?什么操作系统等?这是16位DOS还是什么?
int10h,ah=0
用于设置视频模式。我不知道你为什么认为它可以设置前景色/背景色。@PaulR:我是通过QEMU运行代码的。@interjay:我遵循了这里提到的方法:@theblixguy你链接的页面上的示例有很好的文档记录,并准确地描述了每一行所做的事情。您在第一个示例中尝试的代码与该代码明显不同。你确定你知道你在做什么吗?是的!我希望整个屏幕为蓝色,文本为白色。然后,用空格字符和属性字节17H滑动整个屏幕。需要我详细说明整个循环吗?嗯,我不知道如何才能做到。你真的确定汇编语言是这个项目的正确语言吗?除非您必须这样做,否则您不会在汇编中编写代码;这不是那种情况。还是这是一个课堂作业?我只是想对此发表评论。这不是一个让学生让其他人做代码的地方。自己研究并尝试,询问是否需要帮助,但不要费心问完整的代码。是的!我希望整个屏幕为蓝色,文本为白色。然后,用空格字符和属性字节17H滑动整个屏幕。需要我详细说明整个循环吗?嗯,我不知道如何才能做到。你真的确定汇编语言是这个项目的正确语言吗?除非您必须这样做,否则您不会在汇编中编写代码;这不是那种情况。还是这是一个课堂作业?我只是想对此发表评论。这不是一个让学生让其他人做代码的地方。自己研究并尝试,询问是否需要帮助,但不要费心问完整的代码。