NOTE TO EXPERTS: PLEASE DON\'T ATTEMPT THIS QUESTION IF YOU ARE NOT EXPERT AT MI
ID: 3588425 • Letter: N
Question
NOTE TO EXPERTS: PLEASE DON'T ATTEMPT THIS QUESTION IF YOU ARE NOT EXPERT AT MIPS ASSEMBLY LANGUAGE AND PLEASE DON'T POST AN ANSWER YOUR CODE DOESN'T RUN AND PROVIDE THE REQUESTED RESULT.
Write a MIPS assembly language program that repeatedly prompts the user for a ZIP code, calculates the sum of all digits then prints out the result. If the input is 0 then the program stops.
The sum calculation part must be written in 2 versions: recursive and non-recursive and the results are stored in two memory locations A and B, respectively. The output should be something that shows both calculations:
The sum of all digits using the recursive function is xxxxxx, using the non-recursive function is yyyyy. xxxxxx is taken from memory location A and yyyyy is from memory location B. Obviously, both numbers must be the same.
Explanation / Answer
.text #calculates sum of digits recursively SumDigits: sub $sp, $sp, 12 #alloocate 12B on stack sw $ra 0($sp) #save return address sw $a0, 4($sp) #save argument beq $a0, $0, exit_sumdigits #when there is no more digits return 0 rem $t0, $a0, 10 #get last digit sw $t0, 8($sp) #save it on stack div $a0, $a0, 10 #divide argument by 10 jal SumDigits #repeat procedure lw $t0, 8($sp) #read digit from stack add $v0, $v0, $t0 #add digit to previous result lw $ra, 0($sp) #load return address addi $sp, $sp, 12 #free stack jr $ra #return exit_sumdigits: li $v0, 0 #there are no more digits, return 0 lw $ra, 0($sp) #load return address addi $sp, $sp, 12 #free stack jr $ra #return main: li $a0, 75080 #load number in $a0 jal SumDigits #call SumDigits move $a0, $v0 #set a0 = result of SumDigits li $v0, 1 #set $v0 for print int system call syscall li $v0, 10 #set $v0 for exit system call syscall .data
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.