Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Θέλω να γράψω ένα πρόγραμμα σε μιπς που να παίρνει από τον χρήστη μια συμβολοσειρά και να την επιστρέφει ανάποδα

 

π.χ.

 

test

.

.

.

 

tset

 

Έτσι έγραψα αυτό το πράμα:

.data
str: .space 15

.text
.globl main
main:

li    $v0, 8    
la    $a0, str
la    $a1, 15
syscall

add    $t0, $zero, $zero    #i

readingloop:

        lb    $a0, str($t0)    
        
        beq    $a0, '\0', readingexit      

        addiu    $t0, $t0, 1          #i++
        
j readingloop
readingexit:


reversingloop:
        subiu    $t0, $t0, 1          #i--
        
        li    $v0, 11       
        lb    $a0, str($t0)    
        syscall
        
        beq    $t0, '\0', reversingexit       
j reversingloop
reversingexit:

li    $v0, 10
syscall

το οποίο μεν δουλεύει, αλλά δεν θα έπρεπε να δουλεύει, λόγω της λάθος εντολής

beq    $t0, '\0', reversingexit

γιατί ουσιαστικά λέει στο πρόγραμμα να περάσει στον τερματισμό της λούπας αν ο μετρητής γίνει ίσος με τον χαρακτήρα που σημαίνει το τέλος μια συμβολοσειράς '\0'.

 

νόμιζα πως πρέπει να αντικαταστήσω το '\0' με το str, αλλά μου βγάζει σφάλμα γιατί μάλλον η beq δεν δέχεται συμβολικά ονόματα.

 

τι φάση;

 

Δημοσ.

:D

 

Στην αρχή του string δε θα βρεις ποτέ το '\0'. "Τυχαίνει" όμως η ASCII τιμή του '\0' να είναι το 0. Εσύ θες να τερματίσεις το loop όταν ο μετρητής σου δείξει 0 και όχι '\0'.

 

Όταν αναφέρεσαι στο '\0' αναφέρεσαι σε αυτό σα στοιχείο του πίνακα χαρακτήρων.

Δημοσ.

:D

 

Στην αρχή του string δε θα βρεις ποτέ το '\0'. "Τυχαίνει" όμως η ASCII τιμή του '\0' να είναι το 0. Εσύ θες να τερματίσεις το loop όταν ο μετρητής σου δείξει 0 και όχι '\0'.

 

Όταν αναφέρεσαι στο '\0' αναφέρεσαι σε αυτό σα στοιχείο του πίνακα χαρακτήρων.

το κατάλαβα μετά από λίγο μόνος μου και ξεχάστηκα να βάλω update στο ποστ. σε ευχαριστω :D

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...