Programación General > ASM (Ensamblador)

 RLE en ensamblador MIPS

<< < (6/17) > >>

m0skit0:
JR sólo copia el registro indicado al registro PC. En este caso $ra. Cuando haces jal, la dirección de ejecución + 8 se guarda en el registro $ra, que sería la dirección de retorno. Es donde volvemos al hacer jr $ra.


--- Cita de: "manurodri189" ---Y otra cosa a la hora de almacenar las salidas lo deberia hacer en procesar_noiguales, no?
--- Fin de la cita ---
Yo no lo haría así. Haría otra función y la llamaría tras procesar(). Ya tienes el número de caracteres y el carácter, sólo habría que almacenar en la dirección de memoria correcta  ;)


--- Cita de: "manurodri189" ---Bueno me he dispuesto a probarlo, y me salta el siguiente error al cargar el archivo:
--- Fin de la cita ---
El PcSpim no es un programa ejemplar que digamos  :lol: Quítale los espacios tras las comas.

manurodri189:

--- Cita de: "m0skit0" ---JR sólo copia el registro indicado al registro PC. En este caso $ra. Cuando haces jal, la dirección de ejecución + 8 se guarda en el registro $ra, que sería la dirección de retorno. Es donde volvemos al hacer jr $ra.
--- Fin de la cita ---

Ok, entendido.


--- Citar ---Yo no lo haría así. Haría otra función y la llamaría tras procesar(). Ya tienes el número de caracteres y el carácter, sólo habría que almacenar en la dirección de memoria correcta  ;)
--- Fin de la cita ---

Ok vere a ver si soy capaz de hacer eso.


--- Citar ---El PcSpim no es un programa ejemplar que digamos  :lol: Quítale los espacios tras las comas.
--- Fin de la cita ---

Me he asegurado de quitar todos los espacios tras las comas, y nada, sigue dando exactamente el mismo error. Pero habia mucho mas espacios, porque el error justamente ahi?

Salu2

m0skit0:

--- Cita de: "manurodri189" ---Me he asegurado de quitar todos los espacios tras las comas, y nada, sigue dando exactamente el mismo error
--- Fin de la cita ---
Cierto, mein fault! Es add y no addiu

manurodri189:
Ok, he cambiado esto:


--- Código: ASM ---procesar:     addiu $v0, $zero, $zero   # Inicializamos valores de retorno     addiu $v1, $zero, $a1     addiu $t1, $zero, $zero   # Contador de caracteres iguales consecutivos 
por esto:


--- Código: ASM ---procesar:     add $v0, $zero, $zero   # Inicializamos valores de retorno     add $v1, $zero, $a1     add $t1, $zero, $zero   # Contador de caracteres iguales consecutivos 
Ya que en los 3 me daba el mismo error.

Ahora ejecuto el programa con la cadena "aabb" y se vuelve loco.



Salu2

m0skit0:
Error mío otra vez... Si es que... Hay que usar lb y no lw puesto que trabajamos con bytes (caracteres). Perdona. Además hay más cambios, se ve que estaba empanao...


--- Código: Text ---.dataEntrance: .space 80encode1: .space 40encode2: .space 40decode: .space 80msg1: .asciiz "Please insert the String: "msg2: .asciiz " "msg3: .asciiz "n String encode like: "msg4: .asciiz "n String decode like: ".text.globl main ## Main#main:    ori $v0,$zero,4    la $a0,msg1    syscall #Almacenar el String en la matriz# Número de syscall    ori $v0,$zero,8# $a0 = buffer para guardar la cadena    la $a0,Entrance# $a1 = tamaño a leer    ori $a1,$zero,80    syscall #Imprimir la matriz# Número de syscall    ori $v0,$zero,4# $a0 = buffer a imprimir    la $a0,Entrance    syscall ## Codificar#start:    la $s0, Entrance  sig_carac:    lbu $t0, 0($s0)    beq $t0, $zero, fin   # Si es el carácter de final de cadena, ya terminamos    add $a0,$zero,$t0     # Pasando el primer parámetro a la función procesar()    jal procesar          # Si no, llamamos a la función procesar()    addiu $a1,$s0,1       # Pasando el segundo parámetro a la función procesar()    beq $zero,$zero,sig_carac  # Siguiente carácter diferente    ori $s0, $zero, $v1        # Actualizamos el puntero con el valor devuelto ## Exit#fin:    ori $v0,$zero,10   # Terminamos con exit    syscall ## Procesar (habría que poner un nombre más explicativo :)## Recibe un carácter y el puntero a una cadena# Cuenta cuántos caracteres iguales al pasado consecutivos hay en la cadena# Devuelve en $v0 el número de caracteres iguales# y en $v1 el puntero al primer carácter diferente encontradoprocesar:    addiu $v0, $zero, $zero   # Inicializamos valores de retorno    addiu $v1, $zero, $a1    addiu $t1, $zero, $zero   # Contador de caracteres iguales consecutivosprocesar_iguales:    lbu $t0, 0($a1)              # Cargamos el siguiente carácter a comparar    bne $a0, $t0, procesar_noiguales  # Si no son iguales, terminamos    addiu $a1, $a1, 1           # Apuntamos al siguiente carácter        beq $zero, $zero, procesar_iguales    addiu $t1, $t1, 1             # Si son iguales, aumentamos el contador en uno procesar_noiguales:    add $v0, $v0, $t1   # Ponemos los valores de retorno    add $v1, $v1, $t1# Volvemos de la función    jr $ra    nop 

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa