无法在特定的x,y坐标中绘制像素

时间:2020-05-25 21:57:35

标签: assembly x86 kernel protected-mode

我终于在保护模式下使用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 $

我说得对吗?

0 个答案:

没有答案