diff options
| author | hachem <im@hachem.wtf> | 2026-08-31 03:22:54 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-08-31 03:22:54 +0200 |
| commit | 81e960be2953a9953fd89c42cc6f71ce6ff54c85 (patch) | |
| tree | fb60fbe35871cf83ccba75efe13d01b382034240 /examples/fibonacci.hdass | |
| parent | ce9f0d32c33333161cf9a5c2b7446d80fa0f13b5 (diff) | |
feat: add diagnostics module with source-anchored caret errors
Diffstat (limited to 'examples/fibonacci.hdass')
| -rw-r--r-- | examples/fibonacci.hdass | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/examples/fibonacci.hdass b/examples/fibonacci.hdass new file mode 100644 index 0000000..95a59c8 --- /dev/null +++ b/examples/fibonacci.hdass @@ -0,0 +1,62 @@ +[entry: main] + +const SYS_WRITE = 1 +const SYS_EXIT = 60 + +const STDOUT = 1 + +data newline = "\n" + +proc print_number(value: rdi) +{ + stack buffer[32] + + rax = value + rbx = 10 + rsi = buffer+31 + +convert: + rdx = 0 + rax /= rbx + rdx += '0' + + ^byte rsi = rdx + rsi -= 1 + + if rax != 0 + goto convert + rsi += 1 + + rax = SYS_WRITE + rdi = STDOUT + rdx = buffer+32-rsi + syscall + + rax = SYS_WRITE + rdi = STDOUT + rsi = newline + rdx = newline.len + syscall +} + +proc main +{ + r12 = 0 + r13 = 1 + r15 = 10 // syscall clobbers rcx/r11, so keep the counter in r15 + +loop: + print_number(r12) + + rax = r12 + r12 = r13 + r13 += rax + + r15 -= 1 + if r15 != 0 + goto loop + + rax = SYS_EXIT + rdi = 0 + syscall +} |
