26 lines
629 B
Plaintext
26 lines
629 B
Plaintext
global _start
|
|
|
|
: syscall ( num:eax -- result:eax ) syscall ;
|
|
|
|
: exit ( status:edi -- noret ) 60 syscall ;
|
|
: bye ( -- noret ) 0 exit ;
|
|
|
|
: write ( buf:esi len:edx fd:edi -- ) 1 syscall drop ;
|
|
|
|
1 const stdout
|
|
|
|
: 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 ;
|
|
|
|
: arg0 ( rsp -- rsp ) 8 add @ ; inline
|
|
|
|
: _start ( rsp -- noret ) arg0 print-arg bye ;
|