Estoy tratando de pedirle al usuario la longitud de una cadena, asignar espacio para esa cadena, luego imprimirla en reversa.Invertir una cadena en el conjunto MIPS
Porque la vida de mí, no puedo entender por qué esto no está funcionando ..
Sample Output:
(spim) run
Please enter an integer:
7
string
(spim)
Ahora la longitud de la "cadena" debe ser de 6 ¿verdad? + el carácter de terminación nulo que debería ser 7. ¿Alguien puede ver dónde me estoy equivocando con mi aproximación?
.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
has necesitado paso a paso a través de la código en el depurador? Parece que asumes que la dirección de la cadena en '$ a0' no se tocó después de que devuelve syscall 8, ¿estás seguro de que ese es el caso? – user786653
El simulador [MARS MIPS] (http://courses.missouristate.edu/KenVollmar/MARS/) funciona de maravilla para la depuración de ensamblaje – Msonic