我终于在保护模式下使用VESA BIOS扩展程序在屏幕上绘制了一个像素。但是我在将其放置在其他位置时遇到问题(例如,我希望它位于x = 100,y = 50)。
根据{{3}},我们使用以下C代码绘制像素:
metricbeat-*
我尝试将其编写为汇编语言,因此结果如下所示:
void pixel_16RGB (unsigned short color, unsigned short x, unsigned short y) {
unsigned short* fb = (unsigned short*) _modeInfo.physBasePtr;
unsigned short offset = x + y * (_modeInfo.bytesPerScanLine / 2);
fb [offset] = color;
}
我预计坐标(100,50)中会出现一个蓝色像素,但我在随机位置只看到一个红色像素。
我认为这部分是错误的:
;first part
mov si, word[ModeInfoBlock + 10h]
mov edx, 0
lea eax, [si]
mov ecx, 2
div ecx
mov ecx, 100
mul ecx
add eax, 50
;second part
mov edx, dword[ModeInfoBlock + 28h]
add edx, eax
mov ebx, 0x3296fa
mov [edx], ebx
jmp $
我说得对吗?