1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
; 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
|