Assembly 在DOS操作系统中,如何在图形模式下给屏幕上色?

Assembly 在DOS操作系统中,如何在图形模式下给屏幕上色?,assembly,graphics,int,dos,Assembly,Graphics,Int,Dos,在DOS操作系统的图形模式下的大学项目中,我需要清除屏幕(用一种颜色将其全部着色),是否有人知道这方面的INTERAPT是什么,以及我需要在寄存器中放置什么?在哪个寄存器中输入我想要的屏幕颜色?非常感谢帮手们 这是我的代码(在汇编中):如果有人能帮助我理解为什么向上和向下箭头向右和向左移动,以及为什么我的出口正在为我编写deternmind代码0,我会喜欢的!: 我假设您正在使用VGA模式(或者可以切换到VGA)。 关于不同的模式有一个很好的解释。 简单地说,您可以切换到几种显示模式,图形或文本

在DOS操作系统的图形模式下的大学项目中,我需要清除屏幕(用一种颜色将其全部着色),是否有人知道这方面的INTERAPT是什么,以及我需要在寄存器中放置什么?在哪个寄存器中输入我想要的屏幕颜色?非常感谢帮手们

这是我的代码(在汇编中):如果有人能帮助我理解为什么向上和向下箭头向右和向左移动,以及为什么我的出口正在为我编写deternmind代码0,我会喜欢的!:


我假设您正在使用VGA模式(或者可以切换到VGA)。 关于不同的模式有一个很好的解释。 简单地说,您可以切换到几种显示模式,图形或文本。 对于所有传统模式,包括VGA,您可以通过中断和dispaly交互,但这相当笨拙。更好的选择是使用DMA(直接内存访问)。它是一个内存地址间隔,直接映射到显示内存。因此,通过向内存写入一个字节,您可以更改字符/像素/像素(取决于确切的模式)。 最简单的方法是切换到VGA 16色,并在显示器上写入一个常量字节。 您可以找到有关使用DMA与监视器交互的信息,以及此模式的调色板

示例代码(请参见第页):

为完整起见,此模式的调色板:

0 - black
1 - blue
2 - green
3 - cyan
4 - red
5 - magenta
6 - brown
7 - light gray
8 - gray
9 - light blue
10 - light green
11 - light cyan
12 - light red
13 - light magenta
14 - yellow
15 - white

我会直接更新视频内存来操作屏幕上的位,但是如果您以后需要在项目中添加更多内容,您可以使用非常慢的方法使用BIOS查看我在MS-DOS 320x200x8bit模式下的一款非常老的游戏的源代码(与您使用的相同),包括菜单(文本模式)、精灵、,同时控制(3名玩家),文件访问。所有在微型模型(高达64KB的*.com可执行文件)中,您可以为您建议的每种方式发布一些示例代码吗?链接中有示例代码。我将附加一个。有时链接不可用。在这里张贴代码保留您的想法。
mov ax, 13h ; AH=0 (Change video mode), AL=13h (VGA mode, 16 colors, 320x200)
int 10h ; Video BIOS interrupt, switching to VGA
mov ax, 0A000h ; The offset to video mapped memory
mov es, ax ; We load it to ES through AX, becouse immediate operation is not allowed on ES
mov ax, 0 ; 0 will put it in top left corner. To put it in top right corner load with 320, in the middle of the screen 32160 = 320*100 + 160.
mov di, ax ; load Destination Index register with ax value (the coords to put the pixel)
mov al, 7 ; Grey color.
mov cx, 64000 ; 6400 = 320 * 200 pixels
rep stosb ; paint the whole screen with grey
0 - black
1 - blue
2 - green
3 - cyan
4 - red
5 - magenta
6 - brown
7 - light gray
8 - gray
9 - light blue
10 - light green
11 - light cyan
12 - light red
13 - light magenta
14 - yellow
15 - white