В вашем файле boot.asm у вас есть:
get_vesa_info:
mov ax, 0x4f00
mov [es:di], vbe_info_structure
int 0x10
ret
Третья строка должна быть заменена на
mov di, vbe_info_structure
Объяснение: как сейчас, он пытается записатьконстанта vbe_info_structure по адресу, на который указывает es: di (который в вашем случае не определен).Вместо этого вам нужно загрузить адрес vbe_info_structure в di и, таким образом, передать его в процедуру int 0x10.
Кстати, int 0x10 выполняет несколько функций.Чтобы сказать ему, какой из них вы хотите вызвать, вы передаете «код функции» в регистр топора.Думайте о коде функции как о названии функции (в сборке нет имен, только цифры и адреса).
Кроме того, вам необходимо правильно настроить es.Либо сделайте
push ds
pop es
, предполагая, что ds уже указывает на section.data, либо с помощью директивы ассемблера (assume es section.data
? - не уверен насчет этого, я давно не использовалассемблер).Или, может быть, так:
mov ax, @section.data
mov es, ax
, что, конечно, следует сделать перед загрузкой 0x4f00 в топор.