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

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

Δημοσ.

Θέλω να γράψω ένα πρόγραμμα σε 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, αλλά μετά από λίγο κατάλαβα ότι μάλλον αυτό είναι το λιγότερο.

 

έχει κανείς καμιά ιδέα;

 

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

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

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

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

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

Σύνδεση

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

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