[bits 16] [org 0x7c00] ; Use the boot drive number passed to us by BIOS in register DL start: xor ax,ax ; We want a segment of 0 for DS for this question mov ds,ax ; Set AX to appropriate segment value for your situation mov es,ax ; In this case we'll default to ES=DS mov bx,0x8000 ; Stack segment can be any usable memory mov ss,bx ; This places it with the top of the stack @ 0x80000. mov sp,ax ; Set SP=0 so the bottom of stack will be @ 0x8FFFF cld ; Set the direction flag to be positive direction mov si, wolf_wel_msg call wolf_print mov si, wolf_kernel_load call wolf_print pushf stc mov ah,00 int 13h read_sector: mov ax, 0x0 mov es, ax ; ES = 0 mov bx, 0x1000 ; BX = 0x1000. ES:BX=0x0:0x1000 ; ES:BX = starting address to read sector(s) into mov ah, 02 ; Int 13h/AH=2 = Read Sectors From Drive mov al, 01 ; Sectors to read = 1 mov ch, 00 ; CH=Cylinder. Second sector of disk ; is at Cylinder 0 not 1 mov cl, 02 ; Sector to read = 2 mov dh, 00 ; Head to read = 0 ; DL hasn't been destroyed by our bootloader code and still ; contains boot drive # passed to our bootloader by the BIOS 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 ; Moved the data before the boot signature but after the code wolf_wel_msg db 'Welcome to this publication...',0x0D,0x0A,0 wolf_kernel_load db 'Loading program',0x0D,0x0A,0 wolf_error_msg db 'Program not found!',0x0D,0x0A,0 wolf_error_msg1 db 'Press any key to restart..',0 times 510-($-$$) db 0 dw 0xAA55