Реферат: The Real Hello World
.byte 0
)
Пока еще у нас жив BIOS, запомним позицию курсора и сохраним ее в известном месте ( 0000:0x8000 ). Ядро позже заберет все данные и будет их использовать для вывода на экран победного сообщения.
save_cursor:
mov ah,#0x03 ; читаем текущую позицию курсора
xor bh,bh
int 0x10
seg cs
mov [0x8000],dx ;сохраняем в специальном тайнике
Теперь внимание, запрещаем прерывания (нечего отвлекаться во время такой работы) и загружаем таблицу дескрипторов
cli
lgdt GDT_DESCRIPTOR ; загружаем описатель таблицы дескрипторов.
У нас таблица дескрипторов состоит из трех описателей: Нулевой (всегда должен присутствовать), сегмента кода и сегмента данных
.align 4
.word 0
GDT_DESCRIPTOR: .word 3 * 8 - 1 ; размер таблицы
дескрипторов
.long 0x600 + GDT ; местоположение
таблицы дескрипторов
.align 2
GDT:
.long 0, 0 ; Номер 0: пустой
дескриптор
.word 0xFFFF, 0 ; Номер 8:
дескриптор кода
.byte 0, CODE_ARB, 0xC0, 0
.word 0xFFFF, 0 ; Номер 0x10:
дескриптор данных
.byte 0, DATA_ARB, 0xCF, 0