c4tt3l Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 Θέλω να γράψω ένα πρόγραμμα σε μιπς που να παίρνει από τον χρήστη μια συμβολοσειρά και να την επιστρέφει ανάποδα π.χ. 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 δεν δέχεται συμβολικά ονόματα. τι φάση;
gon1332 Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 Στην αρχή του string δε θα βρεις ποτέ το '\0'. "Τυχαίνει" όμως η ASCII τιμή του '\0' να είναι το 0. Εσύ θες να τερματίσεις το loop όταν ο μετρητής σου δείξει 0 και όχι '\0'. Όταν αναφέρεσαι στο '\0' αναφέρεσαι σε αυτό σα στοιχείο του πίνακα χαρακτήρων.
c4tt3l Δημοσ. 8 Νοεμβρίου 2016 Μέλος Δημοσ. 8 Νοεμβρίου 2016 Στην αρχή του string δε θα βρεις ποτέ το '\0'. "Τυχαίνει" όμως η ASCII τιμή του '\0' να είναι το 0. Εσύ θες να τερματίσεις το loop όταν ο μετρητής σου δείξει 0 και όχι '\0'. Όταν αναφέρεσαι στο '\0' αναφέρεσαι σε αυτό σα στοιχείο του πίνακα χαρακτήρων. το κατάλαβα μετά από λίγο μόνος μου και ξεχάστηκα να βάλω update στο ποστ. σε ευχαριστω
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα