Execute the given program in MARS and answer the following short questions. .text main: li $a0,5 jal func1 li $v0,1 syscall j func3 func1: addiu $sp, $sp, -8 sw $ra, 4($sp) sw $a0, 0($sp) addi $a0,$a0,5 jal func2 lw $a0, 0($sp) lw $ra, 4($sp) jr $ra func2: addi $a0,$a0,5 jr $ra func3: li $v0,10 syscall
Execute the given
.text
main:
li $a0,5
jal func1
li $v0,1
syscall
j func3
func1:
addiu $sp, $sp, -8
sw $ra, 4($sp)
sw $a0, 0($sp)
addi $a0,$a0,5
jal func2
lw $a0, 0($sp)
lw $ra, 4($sp)
jr $ra
func2:
addi $a0,$a0,5
jr $ra
func3:
li $v0,10
syscall
-----------------
i. What do we need to decrement $sp by 8 in the instruction addiu $sp,$sp,-8?
ii. What is the value of $a0 at the end of func2? At the end of program, the value of $a0 is 5
(printed on screen). Why?
iii. func1 is supposed to free-up stack before it returns back to the caller. Write down the
instruction we must use to free-up stack.
iv. The program will not terminate properly if we remove the instruction lw $ra, 4($sp). Why?
v. Make changes in this program to use jalr instead of jal. Write down your changes here.
Step by step
Solved in 2 steps