[MIPS] Odwracanie ciągu znaków
Z pAmIÄTnIkA nIeGrZeCzNeGo AnIoĹkA
Chciałbym napisać program asemblerze MIPS (dla SPIM), który będzie "przepuszczał" tylko znaki 0 - 9, a - f i A - F oraz będzie odwracał powstały ciąg znaków (tzn. zamiana miejscami pierwszego znaku z ostatnim, drugie z przedostatnim itd.). Napisany przeze mnie program poprawnie "przepuszcza znaki", ale nie odwraca ciągu:Kod:
.globl main
.data
s1: .asciiz "01amFH"
.text
main:
la $a0, s1
jal stricnv
move $a0, $v0
li $v0, 4
syscall
li $v0, 10
syscall
stricnv:
move $v0, $a0
move $t0, $a0
chloop:
lb $t1, ($a0)
beqz $t1, exit
blt $t1, '0', skip
ble $t1, '9', store
blt $t1, 'A', skip
ble $t1, 'F', store
blt $t1, 'a', skip
bgt $t1, 'f', skip
store:
sb $t1, ($t0)
addi $t0, $t0, 1
skip:
addi $a0, $a0, 1
j chloop
exit:
sb $zero, ($t0)
move $a0, $v0
addi $t0, $t0, -1
loop:
lb $t1, ($a0)
beqz $t1, end
lb $t2, ($t0)
sb $t1, ($t0)
sb $t2, ($a0)
addi $a0, $a0, 1
addi $t0, $t0, -1
j loop
end:
jr $ra
Ciąg próbuje odwrócić po etykiecie loop. Dlaczego program wyświetla nie odwrócony ciąg? Co zrobić, aby został wyświetlony w konsoli odwrócony ciąg znaków?