L'inversion d'une chaîne de caractères en MIPS de l'Assemblée
Je suis en train de demander à l'utilisateur la longueur d'une chaîne, d'allouer de l'espace pour que la chaîne de caractères, puis de l'imprimer dans le sens inverse.
Pour la vie de moi, je ne peux pas comprendre pourquoi cela ne fonctionne pas..
Sample Output:
(spim) run
Please enter an integer:
7
string
(spim)
Maintenant la longueur de la chaîne "string" devrait être de 6 à droite? + le caractère null de la fin, qui devrait permettre de 7. Quelqu'un peut endroit où je vais mal avec mon approche?
.data
nl: .asciiz "\n"
inputPrompt: .asciiz "Please enter an integer:\n"
theString: .space 32
theInteger: .word 1
.text
main:
la $a0, inputPrompt #load address a0 with prompt
li $v0, 4 #load system call, print string into v0
syscall
li $v0, 5 #load system call, read int into v0
syscall
sw $v0, theInteger #store saved int into $t0
li $v0, 8 #load system call, read string with mem address
la $a0, theString #load address of reserved string space
lw $a1, theInteger #load address of saved int length for string
syscall
lw $t0, theInteger
add $a1,$zero,$t0 #pass lenght of string
jal stringreverse #reverse the string
stringreverse:
add $t0,$a0,$zero #starting address
add $t1,$zero,$zero #i = 0
addi $t2,$a1,-1 #j = length-1
loop:
add $t3,$t0,$t1
lb $t4,0($t3) #the lb string[i]
add $t5,$t0,$t2
lb $t6,0($t5) #the lb string[j]
sb $t4,0($t5) #string[j] = string[i]
sb $t6,0($t3) #string[i] = string[j]
addi $t1,$t1,1 #i++
addi $t2,$t2,-1 #j--
slt $t6,$t2,$t1
beqz $t6,loop
exit:
li $v1, 4 #system call to print reversed string
la $a2, 0($a1)
syscall
li $v0, 10
syscall # Exit program
Avez-vous essayé de marcher à travers le code dans le débogueur? Il semble que vous assumez l'adresse de la chaîne dans
Le MARS MIPS simulateur fonctionne des merveilles pour le débogage de l'assemblée
$a0
est laissé intact après syscall 8 retours, êtes-vous sûr que ce soit le cas?Le MARS MIPS simulateur fonctionne des merveilles pour le débogage de l'assemblée
OriginalL'auteur | 2011-11-19
Vous devez vous connecter pour publier un commentaire.
il y avait une petite erreur dans l'indexation...et au lieu de ré écrit sur le dessus de l'ancienne, j'ai utilisé un nouvel espace mémoire appelée inverse...
OriginalL'auteur Erdem E.