Невозможно построить пиксель в координатах c x, y - PullRequest
0 голосов
/ 26 мая 2020

Мне наконец удалось нарисовать пиксель на экране с помощью VESA B IOS Extensions в защищенном режиме. Но у меня возникла проблема с размещением его в другом положении (например, я хочу, чтобы он был в x = 100, y = 50).

Согласно http://www.brokenthorn.com/Resources/OSDevVid2.html, мы построить пиксели, используя этот код C:

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;
}

Я попытался записать его в сборке, поэтому результат выглядит так:

;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 $

Я ожидал синий пиксель отображается в координатах (100, 50), но я вижу только красный в случайном месте.

Думаю, я ошибаюсь в этой части:

add edx, eax

Я прав?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...