.code16gcc .globl _start _start: /* Make sure stack pointer is normalized */ movzwl %sp,%esp /* Zero .bss */ movw $__bss_start,%di xorl %eax,%eax movw $(_end+3),%cx subw %di,%cx shrw $2,%cx cld rep ; stosl /* Normalize the command line. At startup 0x80 = length and the command line starts at 0x81, but with whitespace */ movl $0x81,%esi movzbw (0x80),%bx movb $0,(%bx,%si) /* Null-terminate the string */ 1: lodsb dec %al /* Stop on null */ cmp $31,%al /* Whitespace? */ jbe 1b dec %si /* Unskip first character */ /* Invoke _cstart */ pushl %esi /* Pointer to command line */ calll _cstart /* Terminate program (with error code in %al) */ movb $0x4c,%ah int $0x21 hlt