Programación General > ASM (Ensamblador)
RLE en ensamblador MIPS
manurodri189:
Perdona? no hombre, te estoy muy agradecido, no me pidas perdón encima coño :lol:
Ahora me tengo que ir luego le hecho un ojo y me pongo con la función esa a ver que sale.
Salu2
manurodri189:
Me da este error:
Supongo que habrá que usar or en vez de ori, no? ya que ori es para un valor inmediato y estamos usando registros, no es asi?
Y si lo cambio, al ejecutar sale esto:
Salu2
m0skit0:
--- Cita de: "manurodri189" ---Supongo que habrá que usar or en vez de ori, no? ya que ori es para un valor inmediato y estamos usando registros, no es asi?
--- Fin de la cita ---
Cierto <_<
¿Lo has ejecutado paso a paso? Mira a ver cuándo te da ese error. A ver si lo pruebo esta tarde...
manurodri189:
Ehhhh, estoy aprendiendo verdad? xDDDDD
Lo acabo de ejecutar paso a paso, y me salta justo aqui:
Salu2
m0skit0:
Pues tío, yo lo he ejecutado en MARS y no me salta nada de eso, de hecho funciona como debería. Y el error que me pones es del manejador de excepciones del PCSPIM <_<
Vuelvo a poner el código por si he cambiado algo :P
--- 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 or $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: add $v0, $zero, $zero # Inicializamos valores de retorno add $v1, $zero, $a1 add $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 Y si quieres prueba el MARS, que personalmente prefiero al PCSPIM, porque tiene una interfaz más intuitiva y más legible, se puede volcar la memoria, etc... : http://courses.missouristate.edu/KenVol ... wnload.htm
Eso sí, es un JAR (fistro! xD) y necesitarás una máquina virtual Java para que tire.
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa