I am learning the assembly language. I wrote a simple bootloader. After testing it out, it didn't work. Here is my code:
[bits 16]
[org 0x7c00]
jmp start
data:
wolf_wel_msg db 'Welcome to Bootloader!!!',0x0D,0x0A,0
wolf_kernel_load db 'Loading kernel....',0x0D,0x0A,0
wolf_error_msg db 'Kernel.bin not found!',0x0D,0x0A,0
wolf_error_msg1 db 'Press any key to restart..',0
start:
mov si, wolf_wel_msg
call wolf_print
mov si, wolf_kernel_load
call wolf_print
pushf
stc
mov ah,00
mov dl,00
int 13h
read_sector:
mov ax, 0x0
mov es, ax
xor bx, bx
mov ah, 02
mov al, 01
mov ch, 01
mov cl, 02
mov dh, 00
mov dl, 00
int 13h
jc wolf_error
popf
jmp 0x0:0x1000
cli
hlt
wolf_error:
mov si, wolf_error_msg
call wolf_print
mov si, wolf_error_msg1
call wolf_print
mov ah,00
int 16h
xor ax,ax
int 19h
wolf_print:
lodsb
or al,al
jz exit
mov ah,0x0e
int 10h
jmp wolf_print
exit:
ret
times 510-($-$$) db 0
dw 0xAA55
This code is placed in the first sector of the USB using this command:
dd if=f:\boot.bin of=\\.\d: bs=512 count=1
A simple program is loaded in the second sector of the USB using this command:
dd if=f:\hello.bin of=\\.\d: bs=512 seek=1 count=1
This is the code for the program loaded into the second sector:
[bits 16]
[org 0x1000]
jmp start
data:
msg db 'Hello',0
start:
mov si, msg
jmp print
cli
hlt
print:
lodsb
or al, al
jz exit
mov ah,0x0e
int 10h
jmp print
exit:
ret
Why is my boot loader not working? Have I done something wrong? Any suggestions?