Estoy usando algo como SPIMS o MARS con funciones de syscall.Accediendo a un carácter en una cadena
que estoy leyendo en una cadena (y funciona porque puedo imprimirlo) de la siguiente manera:
li $v0, 8
la $a0, string
li $a1, 256
syscall
Sin embargo, estoy teniendo problemas para acceder a un único carácter de la cadena. Así que si quiero acceder al primer carácter e imprimirlo, estoy tratando esto:
la $t0, string
lb $a0, ($t0)
li $v0, 4
sys call
Si intento algo como esto:
la $a0, string
li $v0, 4
syscall
Esto muestra toda la cadena como puntos de cadena en el cadena completa
Si intento algo como:
la $a0, string
lb $a0, ($t0)
li $v0, 4
syscall
Me da un error de salto. Aunque no entiendo por qué, ¿no es un carácter un byte largo y esto simplemente carga el primer byte de la cadena en $ a0?
Gracias
IMO siempre debe restablecer los valores de los registros antes de ejecutar LI. Nunca se sabe lo que podría tener la mitad de la palabra superior. – m0skit0
'LI' es un pseudo-op que el ensamblador normalmente expande a' ORI $ rd, $ zero, low16bits' seguido de 'LUI $ rd, hi16bits'. Los 32 bits completos del registro de destino se configuran correctamente después de una instrucción 'LI', por lo que no es necesario reiniciar manualmente el registro antes de un' LI'. – markgz
Definitivamente tienes razón – m0skit0