Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- varA: .word 42
- str1: .asciiz "\n"
- .text
- .globl main
- main:
- subu $sp, $sp, 32 #
- sw $ra, 28($sp) # save return address
- sw $fp, 24($sp) # save previous frame pointer (ebp)
- sw $s0, 20($sp) # preserve $s0
- sw $s1, 16($sp) # preserve $s1
- lw $s0, varA # load varA value into $s0
- addi $s1, $0, 31 # $s1 holds the constant 31
- # Before Calling
- add $a0, $0, $s0 # varA is an argv
- jal MYADD # jump & link
- # Return from MYADD
- add $s1, $0, $v0 # $s1 holds returned value
- li $v0, 1 # syscall "integer"
- add $a0, $0, $s1 # put sum in syscall
- syscall
- li $v0, 4 # syscall "print_string"
- la $a0, str1 # put str1 in syscalll
- syscall
- li $v0, 1 # syscall "integer"
- add $a0, $0, $s0 # put varA in syscall
- syscall
- lw $s1, 16($sp) # restore s1
- lw $s0, 20($sp) # restore s0
- lw $fp, 24($sp) # restore old frame pointer
- lw $ra, 28($sp) # restore return address
- jr $ra
- MYADD:
- subu $sp, $sp, 32 #
- sw $ra, 28($sp) # save return address
- sw $fp, 24($sp) # save previous frame pointer (ebp)
- sw $s0, 20($sp) # preserve $s0, varA = 42
- sw $s1, 16($sp) # preserve $s1, sum = 31
- li $s1, 1 # t = 1
- add $s0, $a0, $s1 # x = x + t (use $s0 to store sum)
- add $v0, $0, $s0 # add x to result register
- lw $s1, 16($sp) # restore s1
- lw $s0, 20($sp) # restore s0
- lw $fp, 24($sp) # restore old frame pointer
- lw $ra, 28($sp) # restore return address
- j $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement