##write a program that finds the sum of numbers entered by the user. Use a sentinel driven loop, where the sentinel is 0, to enter the numbers. ##Output how many numbers were entered, remember the 0 is not "a number" ##Output the average of the numbers, to 3 decimal places. No floating point instructions allowed ##be sure the code is well commented, I will not grade any uncommented program. ##You have 2 submissions, for this project, I will look at the last file submitted. ##name your file lastnameProject1.Asm or it will not be graded. (example, my file would be lichtenthalProject1.Asm) ##variables to use: t0 = store user number input, t1= counter of entries, t2 = non-decimal integer division storage, t3 = storage of remainder 1, t4 = storage of remainder 2, t5 = storage of remainder 3, t6 = total sum of the numbers input #we are going to prompt the user to input numbers until they enter 0. every time they do, we increment t1 by 1. at the termination, we divide t0 by t1 and get some integer, storing it in t2 #then we do a modulo operation on that, storing it in t3. then we modulo t3, put the value into t4, and then modul0 t4, storing it in t5, giving us a value with 3 decimal places #s1-s3 stores our remainder stuff .globl main .text main: #this is going to be our 0 sentinel/exit condition li $s0, 0 li $t1, 0 li $t6, 0 li $s7, 10 loop: li $v0, 4 #string output la $a0, number_entry syscall li $v0, 5 #prep for user input syscall move $t0, $v0 #store in $t0 add $t6, $t6, $t0 #take the value in $t0, add it to the value already in $t6, and store in $t6 beqz $t0, leave #exit if the user input 0 addi $t1, $t1, 1 #increment the counter entry by 1 jal loop #go back to the loop leave: li $v0, 4 #string output la $a0, sum_of_all_numbers syscall move $a0, $t6 #output the total sum of all numbers li $v0, 1 syscall li $v0, 4 #string output la $a0, iterations syscall move $a0, $t1 #output the total sum of all numbers li $v0, 1 syscall li $v0, 4 #string output la $a0, spacing syscall blez $t1, error #if we didn't input any numbers at all, the conter would be 0, and it could do a "divide by 0" error, so we'll warn people #arithmetic block div $t2, $t6, $t1 #integer division result and storage in t2 #you never really think HOW decimals work until you have to, huh? #(remainder x 10)/divisor rem $t3, $t6, $t1 #we get the remainder of the equation mul $s1, $t3, $s7 #multiply the remainder by 10 div $t3, $s1, $t1 #divide the result by the original divisor rem $t4, $s1, $t1 #same mul $s2, $t4, $s7 div $t4, $s2, $t1 rem $t5, $s2, $t1 #same mul $s3, $t5, $s7 div $t5, $s3, $t1 li $v0, 4 #string output la $a0, average syscall move $a0, $t2 #output the integer-part li $v0, 1 syscall li $v0, 4 #output the string that's just a period la $a0, period syscall move $a0, $t3 #output the .X decimal-part li $v0, 1 syscall move $a0, $t4 #output the .0X decimal-part li $v0, 1 syscall move $a0, $t5 #output the .00X decimal-part li $v0, 1 syscall li $v0, 10 #terminate the program syscall #go do it error: li $v0, 4 #output an error message la $a0, no_zero li $v0, 10 #terminate the program syscall #go do it .data number_entry: .asciiz "Please input your numbers, 0 terminates: \n" iterations: .asciiz "\nTotal number of numbers entered: " sum_of_all_numbers: .asciiz "\nThe sum of all the numbers is: " period: .asciiz "." no_zero: .asciiz "Cannot divide by 0, restart program.\n" spacing: .asciiz "\n\n" average: .ascii "\nThe average is: "