global _start : syscall ( num:eax -- result:eax | rcx ) syscall ; : exit ( status:edi -- noret ) 60 syscall ; : bye ( -- noret ) 0 exit ; : die ( err:eax -- noret ) neg exit ; : unwrap ( result:eax -- value:eax ) dup 0 cmp ' die xl ; : ordie ( result -- ) unwrap drop ; 1 const stdout : write ( buf:esi len:edx fd:edi -- ) 1 syscall ordie ; : print ( buf len -- ) stdout write ; : newline ( -- ) s" \n" print ; : println ( buf len -- ) print newline ; : find0 ( start:rsi -- end:rsi ) lodsb 0 cmp latest xne ; : cstrlen ( str:rdi -- len:rsi ) dup find0 swap sub dec ; : cstr>str ( cstr:rdx -- str:rsi len:rdx ) dup cstrlen xchg ; : print-arg ( arg -- ) cstr>str println ; : _start ( rsp -- noret ) dup @ swap : print-args ( argc:rcx argv:rsp -- noret ) 8 add @ print-arg latest loop bye ;