diff --git a/lib/runtime.asm b/lib/runtime.asm index 974fbe1..4422045 100644 --- a/lib/runtime.asm +++ b/lib/runtime.asm @@ -23,6 +23,7 @@ _start: # call main jal main + nop # exit move $a0, $v0 diff --git a/test/masm/fncall.asm b/test/masm/fncall.asm index 96d1ba2..39455ab 100644 --- a/test/masm/fncall.asm +++ b/test/masm/fncall.asm @@ -11,6 +11,7 @@ result: move $t0, $a0 move $v0, $t0 jr $ra + nop main: # save ra on stack @@ -20,6 +21,7 @@ main: # set return to 17 li $a0, 17 jal result + nop # pop ra from stack lw $ra, 0($sp) @@ -27,3 +29,4 @@ main: # return result jr $ra + nop diff --git a/test/masm/div.asm b/test/masm/fpe.asm similarity index 97% rename from test/masm/div.asm rename to test/masm/fpe.asm index b9b4f3f..a3725d5 100644 --- a/test/masm/div.asm +++ b/test/masm/fpe.asm @@ -15,3 +15,4 @@ main: # return li $v0, 0 jr $ra + nop diff --git a/test/masm/hello.asm b/test/masm/hello.asm index 2d64ae5..3819b2a 100644 --- a/test/masm/hello.asm +++ b/test/masm/hello.asm @@ -24,3 +24,4 @@ main: # return 1 li $v0, 0 jr $ra + nop diff --git a/test/masm/recursion.asm b/test/masm/recursion.asm new file mode 100644 index 0000000..38982e1 --- /dev/null +++ b/test/masm/recursion.asm @@ -0,0 +1,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 diff --git a/test/masm/fault.asm b/test/masm/segv.asm similarity index 97% rename from test/masm/fault.asm rename to test/masm/segv.asm index df700cf..4102bc2 100644 --- a/test/masm/fault.asm +++ b/test/masm/segv.asm @@ -13,3 +13,4 @@ main: # return li $v0, 0 jr $ra + nop diff --git a/test/out/div b/test/out/fpe similarity index 89% rename from test/out/div rename to test/out/fpe index 94b9ab8..e6aeb31 100644 --- a/test/out/div +++ b/test/out/fpe @@ -12,4 +12,4 @@ $v1: 0x00000000 $t3: 0x00000000 $s3: 0x00000000 $k1: 0x00000000 $a0: 0x00000000 $t4: 0x00000000 $s4: 0x00000000 $gp: 0x00000000 $a1: 0x00000000 $t5: 0x00000000 $s5: 0x00000000 $sp: 0x10001000 $a2: 0x00000000 $t6: 0x00000000 $s6: 0x00000000 $fp: 0x00000000 -$a3: 0x00000000 $t7: 0x00000000 $s7: 0x00000000 $ra: 0x0040001c +$a3: 0x00000000 $t7: 0x00000000 $s7: 0x00000000 $ra: 0x00400024 diff --git a/test/out/div.status b/test/out/fpe.status similarity index 100% rename from test/out/div.status rename to test/out/fpe.status diff --git a/test/out/recursion b/test/out/recursion new file mode 100644 index 0000000..e69de29 diff --git a/test/out/recursion.status b/test/out/recursion.status new file mode 100644 index 0000000..60d3b2f --- /dev/null +++ b/test/out/recursion.status @@ -0,0 +1 @@ +15 diff --git a/test/out/fault b/test/out/segv similarity index 90% rename from test/out/fault rename to test/out/segv index 938bb46..1796539 100644 --- a/test/out/fault +++ b/test/out/segv @@ -12,4 +12,4 @@ $v1: 0x00000000 $t3: 0x00000000 $s3: 0x00000000 $k1: 0x00000000 $a0: 0x00000000 $t4: 0x00000000 $s4: 0x00000000 $gp: 0x00000000 $a1: 0x00000000 $t5: 0x00000000 $s5: 0x00000000 $sp: 0x10001000 $a2: 0x00000000 $t6: 0x00000000 $s6: 0x00000000 $fp: 0x00000000 -$a3: 0x00000000 $t7: 0x00000000 $s7: 0x00000000 $ra: 0x00400018 +$a3: 0x00000000 $t7: 0x00000000 $s7: 0x00000000 $ra: 0x00400020 diff --git a/test/out/fault.status b/test/out/segv.status similarity index 100% rename from test/out/fault.status rename to test/out/segv.status