Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- array_size: .word 8
- array: .space 32
- enter: .asciiz "Enter an integer:\n"
- bound1: .asciiz "Enter an integer for a bound:\n"
- bound2: .asciiz "Enter an integer for another bound:\n"
- sumText: .asciiz "The sum is: "
- arrayPrint: .asciiz "The array contains the following:\n"
- newline: .asciiz "\n"
- .text
- .globl main
- main:
- li $a0, 0
- lw $s1, array_size
- la $s2, array
- j enterIntegers
- enterIntegers:
- beq $s0, $s1, enterBound #exit loop if $s0 = $s1
- la $a0, enter #load Enter an integer:
- li $v0, 4 #printString()
- syscall
- li $v0, 5 #input integer
- syscall
- sll $t2, $s0, 2
- add $t3, $s2, $t2
- sw $v0, 0($t3) #store in array
- addi $s0, $s0, 1 #index += 1
- j enterIntegers
- enterBound:
- la $a0, bound1
- li $v0, 4
- syscall
- li $v0, 5
- syscall
- move $v0, $s3
- la $a0, bound2
- li $v0, 4
- syscall
- li $v0, 5
- syscall
- move $v0, $s4
- slt $s5, $s3, $s4 # is num1 < num2?
- bgtz $s5, callSumBetween # then just perform sumBetween( )
- move $s3, $t0 # otherwise swap num1 and num2
- move $s4, $s3 # before calling
- move $t0, $s3
- callSumBetween:
- j sumBetween1 # sumBetween( num1, num2 )
- #s0 = i
- #s5 = sum
- #s3 = min
- #s4 = max
- #s1 = length
- sumBetween1:
- li $s5, 0
- li $s0, 0
- j while1
- while1:
- blt $s0, $s1, sumBetween1If1
- bge $s0, $s1, while1End
- j while1End
- sumBetween1If1:
- li $t2, 0
- li $t3, 0
- li $t4, 0
- sll $t2, $s0, 2
- add $t3, $s2, $t2
- lw $t4, 0($t3)
- ble $s3, $t4, sumBetween1If2
- addi $s0, $s0, 1
- j while1
- sumBetween1If2:
- li $t2, 0
- li $t3, 0
- li $t4, 0
- sll $t2, $s0, 2
- add $t3, $s2, $t2
- lw $s6, 0($t3)
- bge $s3, $t4, sumBetween1If3
- addi $s0, $s0, 1
- j while1
- sumBetween1If3:
- add $s5, $s5, $s6
- addi $s0, $s0, 1
- j while1
- while1End:
- move $v0, $s5
- lw $ra, 0($sp)
- addi $sp, $sp, 4
- move $ra, $s7
- j continue
- continue:
- la $a0, sumText
- li $v0, 4
- syscall
- move $s5, $a0
- li $v0, 1
- syscall
- la $a0, newline
- li $v0, 4
- syscall
- li $s0, 0
- la $a0, arrayPrint
- li $v0, 4
- syscall
- j whileLoop
- whileLoop:
- beq $s0, $s1, Exit
- li $t2, 0
- li $t3, 0
- li $t4, 0
- sll $t2, $s0, 2
- add $t3, $s2, $t2
- lw $t4, 0($t3)
- move $t4, $a0
- li $v0, 1
- syscall
- la $a0, newline
- li $v0, 4
- syscall
- addi $s0, $s0, 1
- j whileLoop
- Exit:
- jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement