在汇编语言中使用RGB颜色

时间:2011-09-24 13:29:42

标签: c++ assembly

我正在使用C ++中x86处理器的汇编语言从以下代码绘制屏幕上的像素。我不想使用C ++中的任何函数或方法,因为我将此代码用于引导加载程序。这是代码:

/**********************************
 * Mainvainsoft 2011.             *
 * Writen By: Farid-ur-Rahman     *
 * On: 24 Sep At: 1:34 AM.        *
 **********************************/
 #include <conio.h>
 void main ()
 {
 // Setting Video mode to 256 colours at 320 X 200
 _asm {
 mov ah , 0x00 // Setting Video mode or Clear Screen
 mov al , 0x13 // Setting Video mode to 256 Color Mode
 int        0x10 // Call the Registor

 mov ah , 0x0c // Plot the Pixel
 mov al , 4    // Color
 mov cx , 160  // X-Axis
 mov dx , 100  // Y-Axis
 int        0x10 // Call the Registor
}
getch();     // Wait for the key press
}

我想使用RGB颜色显示在像素上。

2 个答案:

答案 0 :(得分:4)

模式13h使用具有256个18位RGB(每个6位)条目的调色板。因此,您可以将示例条目4设置为所需的RGB颜色,并使用颜色4绘制像素图。

有关如何设置调色板条目的示例,请参阅here。设置视频模式后,您可以执行以下操作:

// Set entry 4
mov dx, 0x3c8
mov al, 4
out dx, al

inc dx
mov al, Red 
out dx, al
mov al, Green
out dx, al
mov al, Blue
out dx, al

// draw pixel

答案 1 :(得分:1)

在您正在使用的视频模式VGA mode 0x13中,帧缓冲区的每个字节都指向调色板。因此,如果您有24位RGB颜色信息,则无法将其直接写入像素,因为像素只包含调色板索引。

当然,您可以将quantize颜色添加到调色板中,但这可能非常复杂。