CLI влияет на видеопамять - PullRequest
0 голосов
/ 02 июня 2010

Я решил написать свой собственный загрузчик.

Мне удалось установить режим видео на 3 (хотя qemu уже устанавливает его на 3 уже), а затем вывести «A» в первый символ первой строки на экране, непосредственно изменяя видеопамять.

[org 0x7C00] ;Address BIOS loads the bootloader into
[bits 16]

;Set video mode to mode 3
mov al, 0x03
mov ah, 0x00
int 0x10

mov ax, 0xB800
mov es, ax
mov bx, 0
mov [es:bx], byte 65
mov [es:bx+1], byte 0x0F

;cli

JMP $       ;Infinite loop, hang it here.

times 510 - ($ - $$) db 0   ;Fill the rest of sector with 0
dw 0xAA55         ;Add boot signature at the end of bootloader

Обратите внимание на закомментированную инструкцию. Когда я удаляю точку с запятой и только точку с запятой, буква «А» больше не печатается. Я не понимаю, как очистка флага IF может иметь побочный эффект, влияющий на то, что находится в памяти. Если бы кто-то мог пролить свет на это, это было бы здорово.

Да и за что, команды, которые я использую для запуска загрузчика

nasm -o bl.bin bl.asm
qemu -fda bl.bin

Я получил пламя где-то еще и прочитал столько, сколько мог. Кто-то упомянул настройку стека, но я не понимаю, насколько это актуально для моей проблемы.

Помощь очень ценится!

1 Ответ

0 голосов
/ 03 июня 2010

Зависит от оборудования видеокарты! Некоторые видеокарты не поддерживают напрямую все видео режимы, а только имитируют. Таким образом, посредством прерываний внутренняя часть кода отвечает за копирование этой памяти каждые несколько мс в память графической карты. При отключении прерываний вы также отключаете обновление внутренней видеопамяти на графической карте. Инструкция CLI отключает все программные прерывания, поэтому присутствуют только аппаратные инструкции, поэтому BIOS не будет работать правильно. Вы можете использовать инструкцию CLI только для синхронизации чтения или записи в память или порты ввода-вывода. Чтобы быть уверенным в моем ответе, перед выполнением инструкции CLI вы можете сделать небольшую паузу примерно на 6 мс, после чего появится символ.

...