52ef7872f0
simple conditionals
140 lines
1.7 KiB
Plaintext
140 lines
1.7 KiB
Plaintext
|
|
// GENERATED BY DSA-C COMPILER
|
|
// Generated at 2026-01-31 01:39:55
|
|
|
|
// Imports
|
|
include maths: "./lib/maths/core.dsa"
|
|
include print: "lib/io/print.dsa"
|
|
|
|
// Globals & Reserved Memory
|
|
|
|
|
|
// Entry Point
|
|
dw stack: 0x10000
|
|
db message: "Process Exited with code:"
|
|
_init:
|
|
ldw stack, bpr
|
|
mov bpr, spr
|
|
push zero
|
|
call main
|
|
call print::print_newline
|
|
lwi message, rg0
|
|
push rg0
|
|
call print::print
|
|
pop zero
|
|
call print::print_hex_word
|
|
pop zero
|
|
hlt
|
|
|
|
|
|
// Function return boilerplate
|
|
_ret:
|
|
mov bpr, spr
|
|
pop bpr
|
|
return
|
|
|
|
|
|
factorial:
|
|
push bpr
|
|
mov spr, bpr
|
|
|
|
ldw bpr, rg0, 8
|
|
lli 1, rg1
|
|
cmp rg0, rg1
|
|
lli 0, rg2
|
|
jgt _cmp_end_1
|
|
lli 1, rg2
|
|
_cmp_end_1:
|
|
cmp rg2, zero
|
|
jeq _else_3
|
|
_then_2:
|
|
lli 1, rg1
|
|
stw rg1, bpr, 8
|
|
jmp _ret
|
|
jmp _end_4
|
|
_else_3:
|
|
nop
|
|
_end_4:
|
|
push rg0
|
|
lli 1, rg1
|
|
sub rg0, rg1, rg2
|
|
push rg2
|
|
call factorial
|
|
pop rg1
|
|
pop rg0
|
|
push rg1
|
|
push rg0
|
|
call maths::multiply
|
|
pop rg2
|
|
pop zero
|
|
stw rg2, bpr, 8
|
|
jmp _ret
|
|
|
|
add_:
|
|
push bpr
|
|
mov spr, bpr
|
|
|
|
ldw bpr, rg0, 8
|
|
ldw bpr, rg1, 12
|
|
add rg0, rg1, rg2
|
|
stw rg2, bpr, 8
|
|
jmp _ret
|
|
|
|
greater:
|
|
push bpr
|
|
mov spr, bpr
|
|
|
|
ldw bpr, rg0, 8
|
|
ldw bpr, rg1, 12
|
|
add rg0, rg0, rg2
|
|
add rg1, rg1, rg3
|
|
cmp rg2, rg3
|
|
lli 0, rg4
|
|
jle _cmp_end_5
|
|
lli 1, rg4
|
|
_cmp_end_5:
|
|
cmp rg4, zero
|
|
jeq _else_7
|
|
_then_6:
|
|
stw rg0, bpr, 8
|
|
jmp _ret
|
|
jmp _end_8
|
|
_else_7:
|
|
add rg1, rg0, rg2
|
|
stw rg2, bpr, 8
|
|
jmp _ret
|
|
_end_8:
|
|
jmp _ret
|
|
|
|
main:
|
|
push bpr
|
|
mov spr, bpr
|
|
|
|
lli 5, rg0
|
|
push rg0
|
|
lli 5, rg1
|
|
push rg1
|
|
call add_
|
|
pop rg2
|
|
pop zero
|
|
push rg2
|
|
lli 5, rg0
|
|
push rg0
|
|
call greater
|
|
pop rg1
|
|
pop zero
|
|
push rg1
|
|
call print::print_num
|
|
pop rg0
|
|
lli 5, rg0
|
|
push rg0
|
|
call factorial
|
|
pop rg1
|
|
push rg1
|
|
call print::print_num
|
|
pop rg0
|
|
lli 0, rg0
|
|
stw rg0, bpr, 8
|
|
jmp _ret
|
|
|