0 Replies - 963 Views - Last Post: 15 November 2010 - 12:51 AM

#1 gniku2  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 1
  • Joined: 15-November 10

Mips Programming

Posted 15 November 2010 - 12:51 AM

Write a MIPS program that performs the following:
• Prompt a user to enter N positive integers, (0< N ≤ 100).
• Display the N integers in ascending order
• For each integer in the output list display also the sum of its digits


**I can't seem to get the program to stop when 0 is entered and add the sum of the digits entered.**

**My Solution**

.data 
array:  .space 40   
prompt: .asciiz "Enter a number: "  
spacee: .asciiz " " 
output: .asciiz "The numbers are: " 
.text 
 
main: 
 li $t1,10         #load 10 into $t1 
 la $a1,array      #load a pointer to array into $a1 
 
loop: 
 addi $t1,$t1,-1   #subtract 1 from $t1, save to $t1 
 li $v0,4          #load 4 into $v0 (print string) 
 la $a0,prompt     #load prompt text into $a 
 syscall           #display prompt 
 li $v0,5          #load 5 into $v0 (read integer) 
 syscall           #prompt for input 
 sw $v0,0($a1)     #store input int to array 
 addi $a1,$a1,4    #add 4 to $a1, save to $a1 
 bnez $t1,loop     #if $t1 isn't zero,goto loop 
 li $t1,9          #if $t1 is zero, load 9 into $t1 
 li $t2,9          #and load 9 into $t2 
 la $a1,array      #load array pointer into $a1 
 
loop1: 
 beqz $t2,here     #if $t2 is zero, goto here 
 addi $t2,$t2,-1   #subtract 1 from $t2, save to $t2 
 lw $t5,0($a1)     #load an input int into $t5 
 lw $t6,4($a1)     #load the next one into $t6 
 addi $a1,$a1,4    #add 4 to $a1, save to $a1 
 ble $t5,$t6,loop1 #if $t5 <= $t6, goto loop1 
 sw $t5,0($a1)     #else, store $t5 in $a1 
 sw $t6,-4($a1)     #and store $t6 in $a1-4 (swapping them) 
 bnez $t2,loop1    #if $t2 is not zero, to go loop1 
 
here: 
 la $a1,array      #load array into $a1 
 addi $t1,$t1,-1   #subtract 1 from $t1, save to $t1 
 add $t2,$t2,$t1   #add $t2 to $t1, save to $t2 
 bnez $t1,loop1    #if $t1 isn't zero, goto loop1 
 li $v0,4          #load 4 into $v0 (print string) 
 la $a0,output     #load 'the numbers are' into $a0 
 syscall           #display message to screen 
 la $a1,array      #load array pointer into $a1 
 li $t1,10         #load 10 into $t1 
 
loop2: 
 li $v0,1          #load 1 into $v0 (print int) 
 lw $a0,0($a1)     #load $a1 into $a0 
 syscall           #print first number to screen 
 li $v0,4          #load 4 into $v1 (print string) 
 la $a0,spacee     #load ' ' into $a0 
 syscall           #print ' ' to screen 
 addi $a1,$a1,4    #add 4 to $a1, save to $a1 
 addi $t1,$t1,-1   #subtract 1 from $t1, save to $t1 
 bnez $t1,loop2    #if $t1 isn't zero, goto loop2 


 
 li $v0,10              #exit 
 
 syscall


This post has been edited by macosxnerd101: 15 November 2010 - 05:11 AM
Reason for edit:: Please use code tags.


Is This A Good Question/Topic? 0
  • +

Page 1 of 1