add recursion test, add noops for branch delay slots

This commit is contained in:
Freya Murphy 2024-10-01 18:22:10 -04:00
parent 16ebc059d9
commit 091c684bf1
Signed by: freya
GPG key ID: 744AB800E383AE52
12 changed files with 51 additions and 2 deletions

View file

@ -23,6 +23,7 @@ _start:
# call main
jal main
nop
# exit
move $a0, $v0

View file

@ -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

View file

@ -15,3 +15,4 @@ main:
# return
li $v0, 0
jr $ra
nop

View file

@ -24,3 +24,4 @@ main:
# return 1
li $v0, 0
jr $ra
nop

41
test/masm/recursion.asm Normal file
View file

@ -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

View file

@ -13,3 +13,4 @@ main:
# return
li $v0, 0
jr $ra
nop

View file

@ -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

0
test/out/recursion Normal file
View file

View file

@ -0,0 +1 @@
15

View file

@ -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