View Single Post
Old Feb 8th, 2005, 9:36 PM   #1
tsgrimey
Newbie
 
Join Date: Feb 2005
Location: CT
Posts: 3
Rep Power: 0 tsgrimey is on a distinguished road
SPIM Assembly Programming Simulation Problem

I'm trying to get this small program to work properly, but having problems. All its suppose to do is read in a string from a user, then output to console with the characters reversed. I also must mention that I can only change the code between "now reverse code here"...and..."not beyond here". Anyone know how to solve this?


# reverse --- Read and echo a reversed copy of it to the console

            .data
line:       .space 80
reversed_line: .space 80
prompt:     .asciiz "Enter a line to be echoed.\n"
nl:         .asciiz "\n"

            .text
            .globl main
main:       

            li $v0, 4         # Syscall code for print string.
            la $a0, prompt    # Starting address of string.
            syscall

            li $v0, 8         # Syscall code for read string.
            la $a0, line      # Starting address of buffer.
            li $a1, 80        # Length of buffer.
            syscall

            li $v0, 4
            la $a0, nl
            syscall

            li $v0, 4
            la $a0, line
            syscall


            # now reverse it your code should go here
            
	    la   $s2, reversed_line
            addi $s2, $s2, 79       # end of str2
            addi $t1, $zero, 0      # null
            sb   $t1, 0($s2)
            addi $s2, $s2, -1
            lb   $t2, nl            # newline
            sb   $t2, 0($s2)

            la   $s1, line

loop:
            lb   $t1, 0($s1)        # read char from str1
            beq  $t1, $t2, done     # '\n' - end of str1 ?

            addi $s2, $s2, -1       # update str2 pointer
            sb   $t1, 0($s2)        # write to str2

            addi $s1, $s1, 1        # update str1 pointer
            j    loop
        
done:   

	    # and not beyond here  


            # now print the reversed string  
         
            li $v0, 4 
	    la $a0, reversed_line    
	    syscall


            li $v0, 4
            la $a0, nl
            syscall

	    j main

            li $v0, 10        # Syscall code for exit.
            syscall

Last edited by tsgrimey; Feb 8th, 2005 at 9:38 PM.
tsgrimey is offline   Reply With Quote