.code16 #ifndef REGPARM # error "This file assumes -mregparm=3 -DREGPARM=3" #endif .section ".init","ax" .globl _start .type _start,@function _start: # Align the stack and make sure the high half is zero andl $0xfff8,%esp # Clear the .bss cld xorl %eax,%eax movw $__bss_start,%di movw $_end+3,%cx subw %di,%cx shrw $2,%cx rep ; stosl # Compute argc and argv (assumes REGPARM) xorl %edx,%edx movzbw 0x80,%bx movb %dl,0x81(%bx) # Zero-terminate string movb $0x81,%dl pushl %eax # Make space for argv movl %esp,%eax calll __parse_argv pushl %eax # argc # Initialize malloc calll __init_memory_arena # Now call main... (NOTE: gcc forces main to be regparm 0) popl %eax # argc popl %edx # argv calll main # Here %eax is the exit code, fall through into exit .size _start,.-_start .globl exit .type exit,@function exit: # Exit code already in %eax movb $0x4c,%ah # Terminate program int $0x21 1: hlt jmp 1b .size exit,.-exit