Главная

Как работают ОС ?


“Hello World” Boot Loader:


Шаг № 1 код.
 
BITS 16                     
jmp main                    
nop                         
main:   
    mov ax, 07C0h           
    add ax, 288             
    mov ss, ax
    mov sp, 4096
    mov ax, 07C0h           
    mov ds, ax              
    call PrintHelloWorld    
    jmp .InfiniteLoop
    .InfiniteLoop:          
        jmp .InfiniteLoop   

HelloWorld      db  "Hello World. This is from the bootloader", 0x0d, 0x0a, 0x00
PrintHelloWorld:            
    mov si, HelloWorld      
    call PrintStr           
    ret
PrintStr:                   
    push ax                 
    mov ah, 0Eh             
    .loop:
        lodsb               
        cmp al, 0x00        
        je .done
        int 10h             
        jmp .loop
    .done:
        pop  ax              
        ret 
times 510-($-$$) db 0       
dw 0xAA55 ;запись в конец 0x55 и 0xAA .



Шаг № 2  компиляция.
 
nasm -f bin -o hello_world_bootloader.bin hello_world_bootloader.asm


Шаг № 3  создание образа и запись туда кода загрузчика.
 
dd if=/dev/zero of=hello_world_bootloader.img bs=512 count=2880

dd status=noxfer conv=notrunc if=hello_world_bootloader.bin of=hello_world_bootloader.img


Шаг № 4  запуск.
// для 32-битной версии 
qemu-system-i386 hello_world_bootloader.bin


// для 64-битной версии
qemu-system-x86_64 hello_world_bootloader.bin