Ayuda Ensamblador

yimorz

Hola necesito ayuda urgente porfavor, tengo que hacer un par de programas en ensamblador (MIPS) y no tng zorra idea de que hacer. Me pondre a entera disposición de la persona que sea capaz de ayudarme

a)Búsqueda del menor y del mayor elemento de un vector

Me dan medio código hecho, pero yo soy muy subnormal y no se que hacer

El programa pide un fichero de texto (lista con números del 0 al 9) y tiene que coger el mayor y el menor elemento y generar un archivo con los dos números. Lo que tengo del código es esto

################################################

Declaracion de variables y tiras de caracteres

################################################

.data

BUFFER: .space 65536 # Buffer de entrada (65536 Bytes = 64 KBytes) donde se almacena el vector de entrada
TAMANO: .space 4 # Tamaño del buffer de entrada
RESULT: .word 0x20302039 # Vector donde se almacena el menor y el mayor elemento del vector de entrada

Inicializado con: 9, espacio, 0, espacio (valores iniciales del menor y mayor)

.globl BUFFER # Se declara la variable como global para que pueda ser accedida desde otros ficheros
.globl TAMANO # Se declara la variable como global para que pueda ser accedida desde otros ficheros
.globl RESULT # Se declara la variable como global para que pueda ser accedida desde otros ficheros

################################################

Codigo del programa

################################################

.text

jal leer_fichero # Introduccion de datos, apertura y lectura de ficheros

start:
##########################################################################

AQUI COMIENZA EL CODIGO A RELLENAR POR EL ALUMNO

En cada iteracion, se deben cargar los valores menor y mayor de

memoria, de las posiciones 0 y 2 del vector RESULT. Asimismo, estas

posiciones se tienen que ir actualizando, pero solo si es necesario

Por defecto: menor = 9 y mayor = 0, para realizar las comparaciones

AQUI TERMINA EL CODIGO A RELLENAR POR EL ALUMNO

##########################################################################

fin:
jal escribir_fichero # Escritura en el fichero de salida y cierre de ficheros

exit:
li $v0, 10 # Carga un 10 en $v0 para finalizar la ejecucion
syscall # Llamada al sistema para finalizar la ejecucion

Se lo que se tendria que hacer, pero no se como, junto a este fichero hay otro(subrutina) pero en ese no hay que modificar nada, esta todo dado

De verdad que es urgente si alguien me pudiese ayudar, gracias de antemano

trinytron

http://www.4coders.com/index.php?cat=9&modulo=contenido&op=listar&tipo=c quizá te ayude

Hardy

Yo no dí mucho de ensamblador la verdad, pero con lo que dí lo haría de la siguiente manera:

  • Lo que haría es almacenar el buffer en un registro.

  • Luego accedo al primer elemento del buffer.

  • Comparo con el menor, si lo mejora actualizo Result.

  • Si no, salto a comparar con el mayor.

  • Si lo mejora, actualizo Result.

  • Si no lo mejora, incremento el registro para en la siguiente iteración acceder al segundo elemento

  • Comparar una variable contador con TAM para saber si dejo de iterar, y así saltar a fin.

Espero que esto te ayude ;)

yimorz

#3

eso es lo que intento hacer, el problema esque no se como actualizar RESULT, lo estoy intentando de mil formas y siempre me da un error

gracias de todos modos

golon

el tema está en que Ensamblador no tiene if, tendrás que hacerlo todo a base de mascarás (andi y el bit que quieres comparar a 1) y luego hacer beq's o bne's con $0 para que vaya a la etiqueta que quieras. Al final con 4 o 5 instrucciones se puede hacer casi todo.

EtherMaN

la verdad es que ya no me acuerdo mucho de ensamblador pero la solución esta utilizando las funciones de beq beq (branch if equal, saltar si igual) o bne (branch if no equal, saltar si distinto) que comenta #5 para poder hacer las comparaciones.

Con esto y el uso de etiquetas no tendrás problemas

Usuarios habituales

  • EtherMaN
  • golon
  • yimorz
  • Hardy
  • trinytron