bits 16 org $7c00 cli push cs pop ds mov [regax],ax mov [regbx],bx mov [regcx],cx mov [regdx],dx mov [regsi],si mov [regdi],di mov [regsp],sp mov [regbp],bp mov [regcs],cs mov [regds],ds mov [reges],es mov [regss],ss lahf mov [regcc],ah push cs pop ss mov sp,$7c00 sti mov si,$7c00 mov di,$7e00 push word (code_start+512) ; push return address mov cx,256 rep movsw ret ; subtle form of goto code_start: mov ah,0 ; reset disk system mov dl,$81 int $13 mov ax,$0201 ; read disk, one sector mov bx,$7c00 ; overwrite us mov cx,1 mov dx,$81 int $13 mov ah,[regcc+512] sahf cli mov ax,[regax+512] mov bx,[regbx+512] mov cx,[regcx+512] mov dx,[regdx+512] mov dl,$81 mov si,[regsi+512] mov di,[regdi+512] mov bp,[regbp+512] mov sp,[regsp+512] mov ds,[regds+512] mov es,[reges+512] mov ss,[regss+512] db $0EA dw $7c00 dw $0000 regax dw 0 regbx dw 0 regcx dw 0 regdx dw 0 regsi dw 0 regdi dw 0 regsp dw 0 regbp dw 0 regcs dw 0 regds dw 0 reges dw 0 regss dw 0 regcc dw 0 code_end equ $ resb 332 db $55,$0AA end