martes, 28 de febrero de 2012

[CÓMPUTO INTEGRADO] Arquitectura MIPS y simulador SPIM

Aquí van algunas cosas sobre la arquitectura MIPS:

Primero que nada, 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; routers Cisco; y videoconsolas como la Nintendo 64 o las Sony PlayStation, PlayStation 2 y PlayStation Portable.

Existe un simulador MIPS R2000/R3000 totalmente libre llamado SPIM compatible con varios sistemas operativos ideado para el aprendizaje de la programación en ensamblador MIPS y de los conceptos generales del ensamblador.

Un emulador MIPS más completo pertenece al proyecto GXemul, el cual no sólo emula las diferentes versiones de los microprocesadores MIPS III y superiores, sino también sistemas enteros que utilicen esos procesadores.

Por ejemplo, GXemul puede emular tanto una DECstation con un procesador MIPS R4400 como un SGI O2 con CPU MIPS R10000, entre otros, así como también diferentes framebuffers y controladoras SCSI.

El software QEMU es capaz de emular también, entre muchas otras, la arquitectura MIPS y MIPSel, así como ejecutar GNU/Linux en la máquina emulada.

Hablando de MIPS, este posee ciertas características:
  • Los procesadores MIPS generalmente fueron de 32 bits, a excepción de los más actuales.
  • Su arquitectura es RISC (Reduced Instruction Set Computer)
  • Tiene 32 registros de 32 bits.
Juegos de registros:
  • $zero tiene cableado el valor numérico cero.
  • Los registros $a0, $a1, $a2 y $a3 se utilizan para pasar parámetros a subrutinas.
  • $v0 y $v1 se utilizan para devolver valores de subrutinas.
  • El registro $ra contiene la dirección de retorno y se utiliza para volver después de una llamada a subrutina.
  • Los registros $s0, $s1, $s2, $s3, $s4, $s5, $s6 y $s7 son registros salvados. 
  • Los registros $t0, $t1, $t2, $t3, $t4, $t5, $t6, $t7, $t8 y $t9 son registros temporales.
  • El registro $gp contiene el puntero global.
  • El registro $sp contiene el puntero de pila.
  • El registro $fp contiene el puntero de marco de pila.
  • El registro $at está reservado para el uso por el ensamblador y no debe ser usado por los programadores.
  • Los registros $k0 y $k1 están reservados para su uso por el núcleo del sistema operativo
Existen 3 registros especiales de 32 bits:
  • pc es el registro contador de programa que almacena la dirección de la siguiente instrucción a ejecutar.
  • hi y lo almacenan el resultado de operaciones de multiplicación o división que generan resultados de 64 bits:
    • hi almacena la parte alta del registro
    • lo almacena la parte baja del registro
Directivas MIPS:

.data Los elementos siguientes se almacenan en segmento de datos.
.text Los elementos siguientes se almacenan en segmento de código (texto).
.ascii "tira de caracteres" Almacena cadena de caracteres NO terminada en caractér nulo.
.asciiz "tira de caracteres" Almacena cadena de caracteres terminada en caracter nulo.
.byte 1, 2, 3 Almacena bytes en memoria, consecutivamente.
.half 300, 301, 302 Almacena medias palabras en memoria, consecutivamente.
.word 80000, 80001 Almacena palabras en memoria, consecutivamente.
. float 1.23, 2.23 Almacena valores flotantes en memoria, consecutivamente.
.double 3.0e21 Almacena dobles en memoria, consecutivamente.
.space 10 Reserva un espacio de 10 bytes e el segmento actual.
.extern etiqueta n Declara que etiqueta es global de tamaño n
.globl etiqueta Declara etiqueta como global
.align n Alínea el siguiente dato en un límite de 2^n

Tipos de instrucciones: 
  • Aritméticas y lógicas
    • addRd,R1,R2 #add,addi,addu,addiu – Comparación
    • seq Rd, R1, R2 # seq, sge, sgt, sle, slt, slti, ...
  • Carga y almacenamiento
    • la Rd label # la, lb, lbu, lh, lw (Carga)
    • swRolabel #sb,sh,sw(Almacenamiento)
  • Salto condicional e incondicional
    • beqR1,R2,label #beqz,bge,bgt,ble,...
  • Manejo excepciones / interrupciones
    • rfe,nop,breakn,syscall.
Codigos de llamadas a sistema:



    1 comentario: