c4tt3l Δημοσ. 14 Νοεμβρίου 2016 Δημοσ. 14 Νοεμβρίου 2016 Θέλω να γράψω ένα πρόγραμμα σε MIPS που να δέχεται μια συμβολοσειρά και να επιστρέφει αν αυτή είναι παλινδρομική (αν διαβάζεται από μπρος και από πίσω το ίδιο, τυπου wow, radar κ.ο.κ.) αλλά η φάση είναι τρελό λουκιπα. Εγώ έφτασα μέχρι εδώ: .data str: .space 20 isntpal: .asciiz "it is not palindromic!" ispal: .asciiz "it is palindromic!" .text .globl main main: add $t0, $zero, $zero #t0 = i counter add $t1, $zero, $zero #t1 = j counter for length of the string li $v0, 8 #gets(str) la $a0, str la $a1, 20 syscall length: lb $s0, str($t0) beq $s0, '\0', NEXTCHECK add $t0, $t0, 1 #i++ to scan all the characters of the string j length NEXTCHECK: add $t1, $t0, $zero add $t0, $zero, $zero #cleaning the t0 register from the length loop add $t4, $s0, $t1 #t4 = str + length - 1 sub $t4, $t4, 1 pal: lb $s0, str($t0) #str[i] lb $s1, str($t4) #str[str + length - 1] slt $t3, $t0, $t1 #for(i=0; i<length; i++) beq $t3, $zero, EXIT add $t0, $t0, 1 #i++ bne $s0, $s1, ELSE #if (str[i] != str[length + i - 1]) li $v0, 4 #else printf("It is not palindromic"); la $a0, isntpal syscall j EXIT ELSE: li $v0, 4 #printf("It is palindromic"); la $a0, ispal syscall j EXIT add $s0, $s0, 1 #apo to proto xarakthra ws th mesh pros ta de3ia sub $s1, $s1, 1 #apo to teleytaio xarakthra ws th mesh pros ta aristera j pal EXIT: li $v0, 10 syscall όπου στη λούπα length βρίσκω το μήκος της συμβολοσειράς και στη λούπα pal ελέγχω ζεύγη χαρακτήρων ως την μέση του string. Ή περίπου αυτό. Γιατί μου βγάζει σε οτιδήποτε του βάλω "it is palindromic!". νόμιζα ότι έκανα πατάτα με τα label ΕΧΙΤ και ELSE, αλλά μετά από λίγο κατάλαβα ότι μάλλον αυτό είναι το λιγότερο. έχει κανείς καμιά ιδέα;
kaliakman Δημοσ. 14 Νοεμβρίου 2016 Δημοσ. 14 Νοεμβρίου 2016 Γιατί δεν το κάνεις χρησιμοποιώντας την στοίβα? ίσως σου φανεί πιο εύκολο.
c4tt3l Δημοσ. 14 Νοεμβρίου 2016 Μέλος Δημοσ. 14 Νοεμβρίου 2016 Ίσως όχι τόσο εύκολο γιατί δεν έχω καλύψει ακόμα την ύλη της στοίβας
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα