rendered paste body;tak jak poprzednio BIOS nasz bootsektor zaladowal pod 0x7C00
[org 0x7C00]
; w tybie rzeczywistym uzywamy 16 bitowego kodu
[BITS 16]
start:
; ustawiamy stos dla trybu rzeczywistego
mov ax, 0x1000
mov ss, ax
xor esp, esp
; inicjujemy tryb wideo 80x25 (tekstowy)
xor ah, ah
mov al, 3
int 0x10
; ladujemy jadro pod adres 0x1000
xor ah, ah
int 0x10
mov ah, 2
mov al, 10
xor ch, ch
mov cl, 2
mov dh, 0
mov bx, 0x1000
mov es, bx
mov bx, 0
int 0x13
gdt:
; NULL Descriptor
dd 0
dd 0
; kod, baza: 0, limit: 4GB, DPL: 0
dw 0xFFFF ; mlodsze slowo limitu
dw 0 ; mlodsze slowo bazy
db 0 ; wlodszy bajt starszego slowa bazy
db 10011010b ; kod / exec-read
db 11001111b ; flagi i 4 bity limitu
db 0 ; najstarszy bajt bazy
; dane (odczyt/zapis), baza: 0, limit: 4GB, DPL: 0
dw 0xFFFF
dw 0
db 0
db 10010010b
db 11001111b
db 0
gdt_end:
; naglowek
gdt_descr:
dw gdt_end - gdt - 1 ; rozmiar gdt
dd gdt ; adres pierwszego deskryptora
lgdt [gdt_descr]
mov eax, cr0
or eax, 1
mov cr0, eax
mov ax, 0x10 ; deksryptor danych (8 * 2 = 16 = 0x10)
mov ss, ax
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
jmp 0x08:start32 ; uzywamy segmentu kodu z GDT
[BITS 32]
start32:
jmp 0x08:0x10000
times 510-($-$$) db 0
db 55h
db 0AAh