#Name: VSlobodovP1.asm #1) Prompt user for sentinel value #2) Store sentinel in t0. #3) Begin loop. #a) prompt user for integer value #b) store it in t3 #skip this step, as the program instructions ask us not to save the number. we can just keep it in v0 until we're done with it #c) If t3>0 add 1 to s0, if t2<0 add 1 to s1, if t2 = 0 add 1 to s2. #d) If t3>0 add it to t1, if t3<0 add it to t2. We can combine this with 3c. #e) Set t3 = 0. #f) go back to the start of the loop #g) exit the loop if sentinel is entered #4) Output #a) Output sums #b) Output counters #c) Comparison and ouput phases # i) Compare positive and negative, if positive go to ii, else go to iii # ii) compare positive and zeroes, output # iii) compare negative and zeroes, output #5) Terminate .text .globl main main: prompt: #prompt user for the sentinel value and store li $v0, 4 la $a0, prompt_sentinel syscall li $v0, 5 syscall #see 1 move $t0, $v0 #see 2 #initialize our values li $s0, 0 li $s1, 0 li $s2, 0 li $t1, 0 li $t2, 0 loop: li $v0, 4 la $a0, prompt_integer syscall li $v0, 5 syscall #see 3a beq $v0, $t0, output #see 3g bgtz $v0, adds0 bltz $v0, adds1 beqz $v0, adds2 #see 3c adds0: add $s0, $s0, 1 #see 3c add $t1, $t1, $v0 #see 3d li $t3, 0 #see 3e j loop #see 3f adds1: add $s1, $s1, 1 #see 3c add $t2, $t2, $v0 #see 3d li $t3, 0 #see 3e j loop #see 3f adds2: add $s2, $s2, 1 #see 3c, 3d unnecessary, snce adding 0 is superfluous li $t3, 0 #see 3e j loop #see 3f output: li $v0, 4 la $a0, output_sums_posi syscall move $a0, $t1 li $v0, 1 syscall #see 4a li $v0, 4 la $a0, output_sums_nega syscall move $a0, $t2 li $v0, 1 syscall #see 4a li $v0, 4 la $a0, output_counter_posi syscall move $a0, $s0 li $v0, 1 syscall #see 4b li $v0, 4 la $a0, output_counter_nega syscall move $a0, $s1 li $v0, 1 syscall #see 4b li $v0, 4 la $a0, output_counter_zero syscall move $a0, $s2 li $v0, 1 syscall #see 4b #testing phase 4c bgt $s0, $s1, output_ii j output_iii #see 4ci output_ii: bgt $s0, $s2, output_posi j output_zero#see 4cii output_iii: bgt $s1, $s2, output_nega j output_zero #see 4ciii #output phase 4c output_posi: li $v0, 4 la $a0, posi_big syscall j exit output_nega: li $v0, 4 la $a0, nega_big syscall j exit output_zero: li $v0, 4 la $a0, zero_big syscall j exit exit: li $v0, 4 la $a0, terminate syscall li $v0, 10 syscall #see 5 .data prompt_sentinel: .asciiz "Please input the sentinel for this program: " prompt_integer: .asciiz "Please input your integer: " output_sums_posi: .asciiz "\nThe sum of the positive numbers is: " output_sums_nega: .asciiz "\nThe sum of the negative numbers is: " output_counter_posi: .asciiz "\nThe number of positive numbers entered is " output_counter_nega: .asciiz ", the number of negative numbers entered is " output_counter_zero: .asciiz ", and the number of zeroes entered is " posi_big: .asciiz ".\nThe majority of the numbers entered were positive." nega_big: .asciiz "\nThe majority of the numbers entered were negative." zero_big: .asciiz "\nThe majority of the numbers entered were zeroes." terminate: .asciiz "\nThe program is now closing. Have a nice day."