我正在使用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颜色显示在像素上。
答案 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颜色添加到调色板中,但这可能非常复杂。