Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- #zu überprüfender String
- str: .asciiz "abcdefgh, h;gfedcba!"
- #Initialisierung
- #t0 = aktuelle Adresse links
- #t1 = aktuelle Adresse rechts
- #t2 = Länge des Strings
- #s0 = aktueller Wert bei t0
- #s1 = aktueller Wert bei t1
- #v0 = (1->Palindrom, 0->Keins)
- .text
- la $t0, str
- #Länge finden:
- add $t2, $0, $0
- findend:
- #a1 = aktuelle Adresse
- #a0 = aktueller Wert
- add $a1, $t0, $t2
- lb $a0, ($a1)
- beq $a0, $0, found
- addi $t2, $t2, 1
- j findend
- found:
- addi $t2, $t2, -1
- add $t1, $t0, $t2
- addi $v0, $0, 1
- #array durchlaufen
- looparray:
- #Durchlaufabbruch:
- sub $t3, $t1, $t0 #t3 = Abstand t0, t1
- blez $t3, end
- #Leer- und Sonderzeichenskip:
- loopcheck1:
- lb $a0, ($t0)
- jal specialcheck
- add $t0, $t0, $v1
- bgtz $v1, loopcheck1
- loopcheck2:
- lb $a0, ($t1)
- jal specialcheck
- sub $t1, $t1, $v1
- bgtz $v1, loopcheck2
- #Vergleich:
- lb $s0, ($t0)
- lb $s1, ($t1)
- #Groß/Klein Konvertierung einfügen:
- add $a0, $0, $s0
- jal convert
- sub $s0, $s0, $v1
- add $a0, $0, $s1
- jal convert
- sub $s1, $s1, $v1
- bne $s0, $s1, doneincorrect
- #Zähler inkrementieren:
- addi $t0, $t0, 1
- addi $t1, $t1, -1
- j looparray
- #Ein Assymetrie wurde entdeckt
- doneincorrect:
- add $v0, $0, $0
- j end
- #Leer- und Sonderzeichencheck (Rückgabe in $v1)
- specialcheck:
- addi $a1, $a0, -47
- blez $a1, specfound
- addi $a1, $a0, -57
- blez $a1, specnotfound
- addi $a1, $a0, -64
- blez $a1, specfound
- addi $a1, $a0, -90
- blez $a1, specnotfound
- addi $a1, $a0, -96
- blez $a1, specfound
- addi $a1, $a0, -122
- blez $a1, specnotfound
- j specfound
- specfound:
- addi $v1, $0, 1
- jr $ra
- specnotfound:
- addi $v1, $0, 0
- jr $ra
- #Großklein konvertierung
- convert:
- add $v1, $0, $0
- addi $a0, $a0, -90
- blez $a0, uppercase
- addi $v1, $0, 32
- uppercase:
- jr $ra
- end:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement