org 0x7c00 xor ax, ax jmp 0:start start: mov di, 0x7c00 mov ds, ax ; Setup stack to grow down from our start address mov ss, ax mov sp, di ; Store interrupt opcode on stack mov ax, 0x13CD ; opcode for int 13h push ax ; QWORD block number push ss ; 0 push ss ; 0 push ss ; 0 mov ax, 63 ; fill in the starting sector of the FAT partition push ax ; DWORD target address push ss ; segment 0 push di ; offset 0x7c00 ; WORD block count mov ax, 1 push ax ; BYTE zero ; BYTE 0x10 bytes for read packet mov ax, 0x10 push ax ; Setup SI for int13 mov si, sp ; Jump into stack where int 13h invocation is mov ah, 0x42 jmp 0:0x7bfe ; Interrupt will return into new bootsector times (446 - ($-$$)) db 0