shl eax, 4 mov ebp, eax mov bx, offset gdt_data mov [(descr ptr bx).base_l], ax rol eax, 16 mov [(descr ptr bx).base_m], al
shl eax, 4 mov ebp, eax mov bx, offset gdt_data mov [(descr ptr bx).base_l], ax rol eax, 16 mov [(descr ptr bx).base_m], al
xor eax, eax mov ax, cs shl eax, 4 mov bx, offset gdt_code mov [(descr ptr bx).base_l], ax rol eax, 16 mov [(descr ptr bx).base_m], al
xor eax, eax mov ax, ss shl eax, 4 mov bx, offset gdt_stack mov [(descr ptr bx).base_l], ax rol eax, 16 mov [(descr ptr bx).base_m], al
;Вычислим 32-битовый линейный адрес сегмента TSS 0 и загрузим его ;в дескриптор сегмента TSS 0 в таблице глобальных дескрипторов mov eax, ebp ; (8) Адрес начала сегмента данных add ax, offset tss_0 ; (9) Добавим смещение TSS0 mov bx, offset gdt_tss_0 ; (10) mov [(descr ptr bx).base_l], ax ; (11) rol eax, 16 ; (12) mov [(descr ptr bx).base_m], al ; (13)
;Вычислим 32-битовый линейный адрес сегмента TSS 1 и загрузим его ;в дескриптор сегмента TSS 1 в таблице глобальных дескрипторов mov eax, ebp ; (14) Адрес начала сегмента данных add ax, offset tss_1 ; (15) Добавим смещение TSS1 mov bx, offset gdt_tss_1 ; (16) mov [(descr ptr bx).base_l], ax ; (17) rol eax, 16 ; (18) mov [(descr ptr bx).base_m], al ; (19)
;Подготовка к загрузке GDTR mov [dword ptr pdescr+2], ebp mov [word ptr pdescr], gdt_size-1 lgdt [pword ptr pdescr]
; Заполним поля TSS 1, TSS 0 заполнится автоматически mov [word ptr tss_1+4Ch], 16 ; (20) CS mov [word ptr tss_1+20h], offset highmem ; (21) IP mov [word ptr tss_1+50h], 24 ; (22) SS mov [word ptr tss_1+38h], 128 ; (23) SP mov [word ptr tss_1+54h], 8 ; (24) DS mov [word ptr tss_1+48h], 32 ; (25) ES
; Запрет аппаратных прерываний и NMI cli
in al, 70h or al, 80h out 70h, al
;Подготовка к загрузке IDTR mov [word ptr pdescr], idt_size-1 xor eax, eax mov ax, offset idt add eax, ebp mov [dword ptr pdescr+2], eax lidt [pword ptr pdescr]
;Открыть линию А20 mov al, 0D1h out 64h, al mov al, 0DFh out 60h, al mov eax, CR0 or eax, 1 mov CR0, eax
db 0EAh dw offset continue dw 16 continue: mov ax, 8 mov ds, ax
|