; jewelforth ;; MACROS {{{ %macro pspush 1 lea r14, [r14-8] mov qword [r14], r15 mov r15, %1 %endmacro %macro pspop 1 mov %1, r15 mov r15, qword [r14] lea r14, [r14+8] %endmacro ;;; dictionary macros {{{ %define mac_latest 0 ; updated through defdict %macro defdict 3 ; name asm-label flags %strlen slen %1 global lfa_%2 lfa_%2: dq mac_latest %define mac_latest lfa_%2 ffa_%2: db %3 ; FFA nfa_%2: dw slen ; NFA db %1 %endmacro %macro defword 3 defdict %1, %2, %3 %2: %endmacro %macro defconst 4 ; ... value defdict %1, %2, %3 %define %2 %4 pspush qword %4 ret %endmacro %macro defvar 4 ; ... default-value %2: dq %4 defdict %1, %2, %3 pspush qword %2 ret %endmacro %assign smudge_mask 0x1 %assign immemdiate_mask 0x2 ;;; }}} ;; syscall %assign __NR_read 0 %assign __NR_write 1 %assign __NR_brk 12 %assign __NR_exit 60 ;; }}} section .bss wstack_b: resq 2047 wstack: resq 1 section .text global _start _start: ; init mov r14, wstack xor r15, r15 mov rdi, 0 mov rax, __NR_exit syscall