Я решил написать свой собственный загрузчик.Влияние CLI на видеопамять
Мне удалось установить видеорежим на 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
Обратите внимание на прописанную инструкцию cli. Когда я удаляю точку с запятой и только точку с запятой, «А» больше не печатается. Я не понимаю, как очистка флага IF может иметь побочный эффект, влияющий на то, что находится в памяти. Если бы кто-то мог пролить свет на это, это было бы здорово.
О, и для чего это стоит, команды, которые я использую для запуска загрузчика
nasm -o bl.bin bl.asm
qemu -fda bl.bin
Я получил пылали где-то еще, и читать столько, сколько я мог. Кто-то упомянул настройку стека, но я не понимаю, что это имеет отношение к моей проблеме.
Справка действительно оценена!
Вы уверены, что это не так? С неповрежденным CLI отображается «A», а с CLI прокомментировано, что «A» не отображается? –
Нет, это так. – oadams