Всем доброго дня!
Вот читаю в книге:
Цитата:
Теперь приведем расширенный формат этой же функции соответствующий VBE версии 2.0:
На входе:
AH = 4Fh
AL = 00h
ES:DI = Указатель на буфер размером 512 байт. Первые четыре байта буфера должны содержать строку "VBE2". В буфер записывается различная информация о видеоадаптере SVGA и реализации VBE
На выходе:
AL = 4Fh
AH = 0 - успешное завершение, 1 - ошибка
Примечание:
Значения остальных регистров сохраняются
И решил попробовать:
Код:
use16
org 0x7C00
boot__code16:
mov AX,CS
mov DS,AX
mov ES,AX
mov FS,AX
mov GS,AX
mov SS,AX
mov AX,boot_stack16_start
mov SP,AX
mov [0x7A00],byte 'V'
mov [0x7A01],byte 'B'
mov [0x7A02],byte 'E'
mov [0x7A03],byte '2'
mov AH,0x4F
mov AL,0x00
mov DI,0x7A00
int 0x10
cmp AH,1
jz label1
jmp label2
label1:
hlt
label2:
mov AH,0x4F
mov AL,0x01
mov CX,0100000100010010b
mov DI,0x7A00
int 0x10
mov AH,0x4F
mov AL,0x02
mov BX,0100000100010010b
int 0x10
mov AH,0x02
mov AL,18 ; Количество читаемых секторов
mov CL,2 ; Сектор
mov CH,0 ; Цилиндр
mov DH,0 ; Головка
mov DL,0 ; Диск
mov BX,boot__continuation
int 0x13
jmp boot__continuation
boot__data16:
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
boot__stack16:
db 0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0
boot_stack16_start:
db 0,0,0,0,0,0,0,0
rb 510-($-$$)
db 0x55,0xAA
boot__continuation:
include "Preparing.asm"
rb 1023-($-$$)
db 0x00
Запускаю
Bochs и вижу:
Не понял ничего. Тогда решил в режиме отладки зайти. Ввёл точку останова:
Цитата:
lb 0x7C00
И запустил на выполнение -
Continue. Пришло время, и он остановился на моей контрольной точке:
Тут я стал шаг за шагом (
F11) смотреть что происходит. Проверил внёс ли он сигнатуру
VBE2:
Тут он справился. Далее я дошёл уже до прерывания
0x10 и поставил контрольную точку, чтобы остановиться после кода прерывания:
И решил продолжить путешествие -
Continue. Но почему-то у меня больно долго был тёмный экран:
Тогда я решил прервать выполнение -
Break и увидел:
Почему же он тогда там завис и не дошёл до моей контрольной точки?