Search code examples
assemblymipsmips32

MIPS subroutine passing parameters by reference


I have this MIPS code that do some adds using subroutines parameters passed by value

    .data # Data zone
dato1: .word 1
dato2: .word 3
dato3: .word 5
dato4: .word 4
res1: .space 4
res2: .space 4
    .text # Code Zone
    # main Code
main: lw $a0, dato1($0)
lw $a1, dato2($0)
firstcall: jal suma
sw $v0, res1($0)
lw $a0, dato3($0)
lw $a1, dato4($0)
secondcall: jal suma
sw $v0, res2($0)
j fin #End

suma: add $v0, $a0, $a1
jr $ra

fin:
li $v0, 10
syscall

But now I need to "translate it" so the sobroutine uses parameters by reference.

Any ideas?


Solution

  • Ok, fixed. I thought la standed for "load array", but it's load address.

    So the new code is

        .data # Data zone
    dato1: .word 1
    dato2: .word 3
    dato3: .word 5
    dato4: .word 4
    res1: .space 4
    res2: .space 4
        .text # Code zone
        # Main program
    main:
    la $a0, dato1
    la $a1, dato2
    la $a3, res1
    
    firstcall: jal suma
    la $a0, dato3
    la $a1, dato4
    la $a3, res2
    secondcall: jal suma
    j fin 
    suma:
    lw $a0, 0($a0)
    lw $a1, 0($a1)
    add $v0, $a0, $a1
    sw $v0, 0($a2)
    jr $ra
    
    fin:
    li $v0, 10
    syscall
    

    Now this should work.