summaryrefslogtreecommitdiff
path: root/test/masm/recursion.asm
blob: 38982e1f4ae4e07e7d721a00776b38e6751a298f (plain)
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
# Copyright (c) 2024 Freya Murphy

# file: recursion.asm
# test: should recurse sum n..0 numbers

.text
.align 2
.globl main

main:
	# init $a0
	li	$a0, 5

sum:
	# save stack
	addiu	$sp, $sp, -8
	sw	$ra, 0($sp)
	sw	$s0, 4($sp)

	# load n from a0
	move	$s0, $a0

	# skip if n is zero
	li	$v0, 0
	beq	$s0, $zero, add
	nop
	jal	sum
	addi	$a0, $s0, -1

add:
	# n = n + returned
	add	$v0, $s0, $v0

	# restore stack
	lw	$ra, 0($sp)
	lw	$s0, 4($sp)
	addiu	$sp, $sp, 8

	# return
	jr	$ra
	nop