Duda programación en ensamblador.

¿Algún tema de tipo informático? Este es tu subforo.

Duda programación en ensamblador.

Mensajepor radonina » 10 Nov 2013, 11:37

Buenas, me toca hacer una práctica en ensamblador que a primera vista es muy sencilla pero me ha surgido una duda.
La práctica consiste en pasarle un archivo de texto, el programa cifra el texto (sólo cifra las mayúsculas), hasta ahí bien, luego te pide que descifres el texto y compare el original con el descifrado, haciendo que en la consola aparezca un mensaje diciendo si son iguales o no.
Mi duda viene en el segundo paso, en el de descifrar. Nos es facilitada la dirección de memoria de la clave, que es un array/vector/cadena de caracteres. Para cifrarlo leemos un byte del texto original (un caracter) que, si es mayúscula, le restamos 65 (valor de A en la tabla ascii), sumamos el resultado de la resta a la dirección de la clave y el resultado lo guardamos en memoria, en la cadena cifrada.
Para descifrar he implementado este código, pero no sé dónde falla:
texto_descifrado:
la $t0,textocifrado # Guardamos en $t0 la dirección del texto cifrado
la $t1,clave # Guardamos en $t1 la dirección de la clave
la $t2,textodescifrado # Guardamos en $t2 la dirección del texto descifrado
la $t3,clave #t3<- puntero
move $t4,$zero # contador; addu $t4,$zero,$zero
lb $t5,A #t4<- 65
lb $t6,Z #t5<- 90
WHILE_descifrado: lb $t7,0($t0) # cargamos un byte del texto cifrado
beq $t7,$zero,END_WHILE_descifrado # si dicho byte es 0 el texto ha terminado
blt $t7,$t5,END_IF_descifrado # si dicho byte es menor que 65, se guarda en el texto descifrado tal cual
bgt $t7,$t6,END_IF_descifrado # si dicho byte es mayor que 90, se guarda en el texto descifrado tal cual
WHILE_buscador: lb $t8,0($t3) # cargamos el primer byte del vector clave_cifradora
addiu $t3,$t3,1 # avanzamos en dicha cadena
addiu $t4,$t4,1 # contador++
bne $t7,$t8,WHILE_buscador # si t1<>t2 se realiza otra iteración
addiu $t4,$t4,64 # contador=contador+65 para obtener la mayúscula correspondiente
sb $t4,0($t2) # guardamos dicha mayúscula en el texto descifrado
move $t3,$t1 # restauramos el puntero
move $t4,$zero # restauramos el contador
j WHILE_descifrado # nueva iteración
END_IF_descifrado: sb $t7,0($t2) # Guardamos lo que haya en t1 (exclamación, coma, espacio...) en el texto descifrado
addiu $t0,$t0,1 # avanzamos en el texto cifrado
addiu $t2,$t2,1 # avanzamos en el texto descifrado
j WHILE_descifrado # nueva iteración
END_WHILE_descifrado: sb $zero,0($t2) # Guardamos el 0 en el texto descifrado para terminar
jr $ra

Si quito el "j WHILE_descifrado # nueva iteración" que hay encima de "END_IF_descifrado" no me lo descifra pero sí me dice que no son iguales (tercer y último paso) pero si lo dejo, ni descifra ni avanza en el programa, lo he intentado depurar para ver dónde falla pero estoy algo desesperado ya.

Muchas gracias de antemano por la ayuda o a los que lo lean, saludos!


EDITO: ya he terminado la práctica, he tenido que añadir un par de líneas de código encima del J WHILE_descifrado del que hablaba antes para avanzar en las cadenas, ya está todo perfecto así que si queréis cerrar el tema genial. Gracias
Avatar de Usuario
radonina

 
Mensajes: 807
Registrado: 24 Mar 2012, 22:50
RangoClaseBattleTag
Leah
LeahMédico Brujo Nico#2457

Re: Duda programación en ensamblador.

Mensajepor DejanB » 10 Nov 2013, 15:13

Tema cerrado a petición de radonina....
Imagen
"VOY A MATAR A ROPP.....WIIIIII!!!!"
Avatar de Usuario
DejanB

 
Mensajes: 2683
Registrado: 13 Dic 2009, 13:39
Ubicación: Behind The Wheel
RangoClaseBattleTag
Externo
ExternoMago DeIanB#2353


Volver a “Informática”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

¡ENHORABUENA!
Has desbloqueado un nuevo logro