El pasado día 13/09/10 y con motivo del comienzo de este nuevo curso comenzamos la asignatura de Organización de computadores. Ya adaptados a los nuevos planes de estudio, cual fue nuestra sorpresa cuando nos comunicaron que todas las prácticas serán realizadas con un procesador MIPS.
Para aquellos que nunca han oído hablar de esta familia de procesadores deciros que MIPS (siglas de Microprocessor without Interlocked Pipeline Stages) se conoce a toda una familia de microprocesadores de arquitecturaRISC desarrollados por MIPS Technologies.
Los diseños del MIPS son utilizados en la línea de productos informáticos de SGI; en muchos sistemas embebidos; en dispositivos para Windows CE; routersCisco; y videoconsolas como la Nintendo 64 o las Sony PlayStation, PlayStation 2 y PlayStation portable.
Debido a que los diseñadores crearon un conjunto de instrucciones tan claro, los cursos sobre arquitectura de computadores en universidades y escuelas técnicas a menudo se basan en la arquitectura MIPS. El diseño de la familia de CPU's MIPS influiría de manera importante en otras arquitecturas RISCposteriores como los DEC Alpha.
Para la realización de las prácticas estamos usando un simulador llamado Simula3MS, desarrollado por la universidad de la Coruña, el cual me recuerda a nuestro querido compañero de batalla OllyDbg.
Por último os dejo un ejemplo sencillo del uso de este simulador, lo único que hace es contar el número de caracteres de una cadena y almacenarlo en memoria.
#Segmento de datos
.data
#.ascii str --> Almacena la cadena str en memoria, ya la termina con el caracter nulo.
cadena: .asciiz "Esto es una prueba "
longitud: .word 0
.text
.globl main
main:
#cargo en $t3 la cadena.
la $t3,cadena
#cargo en $t5 longitud y despues su valor.
la $t5, longitud
lb $t5, 0($t5)
bucle:
lb $t4, 0($t3) # carácter primero de t3
beq $t4,$zero,fin # si es NULL bifurcar a fin
addi $t5,$t5,1 # sumamos uno al contador
addi $t3,$t3,1 # apuntamos al siguiente carácter
j bucle # repetimos
# aquí se llega cuando se encuentra el NULL
fin:
la $t1, longitud #Almacenamos el resultado en la direccion de longitud.
sb $t5, 0($t1) #Almacena el byte de $t5 en la direccion de $t1+0 que es la de longitud
nop