Silver_Smoulder icon

[ASM] [Almost Functional] Functions Calling Functions

Silver_Smoulder | PRO | 11/20/19 03:15:31 PM UTC | 0 ⭐ | 454 👁️ | Never ⏰ | []
text |

1.45 KB

|

None

|

0 👍

/

0 👎

.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