.text
.globl main
main:
li $t0, 0 #initialize t0
li $t1, 0 #initialize t1
jal input #call input
li $v0, 10 #exit
syscall
input:
sub $sp, $sp, 4
sw $ra, 0($sp) #store the value in $ra on the stack position 4
li $v0, 4 #prompt stuff
la $a0, prompt
syscall
li $v0, 5 #get number
syscall
move $a0, $v0 #store number
#we can keep number in a0
jal check
check:
sub $sp, $sp, 4
sw $ra, 0($sp) #store the value in $ra on the stack position 8
#bltz $a0, negative
#bgtz $a0, positive
#beqz $a0, zero
jal addnum
jal output
addnum:
sub $sp, $sp, 4
sw $ra, 0($sp) #store the value in $ra on the stack position 12
bltz $a0, negative
bgtz $a0, positive
beqz $a0, zero
negative:
add $t0, $t0, $a0
lw $ra, 0($sp)
addu $sp, $sp, 8 #go back 8 spaces, to input
jr $ra
positive:
add $t1, $t1, $a0
lw $ra, 0($sp)
addu $sp, $sp, 8 #go back 8 spaces, to input
jr $ra
zero:
lw $ra, 0($sp)
addu $sp, $sp, 8 #go back 4 spaces, to check
jr $ra
output:
li $v0, 4
la $a0, posi_sum
syscall
move $a0, $t1
li $v0, 1 #output positive sums
li $v0, 4
la $a0, nega_sum
syscall
move $a0, $t0
li $v0, 1 #output negative sum
lw $ra, 0($sp)
addu $sp, $sp, 12 #go back to main
jr $ra
.data
prompt:
.asciiz "\nInput your number: "
posi_sum:
.asciiz "\nYour positive sum is: "
nega_sum:
.asciiz "\nYour negative sum is: "
Comments