1 / 19

Programación en MIPS

Programación en MIPS. Programación en MIPS. Camino típico: Ensamblador de MIPS. Traduce instrucciones de lenguaje ensamblador a lenguaje de máquina. Probar el código en un simulador de MIPS. Correr el código objeto en un sistema MIPS real. Programación en MIPS. Dos sistemas para Windows:

zeal
Download Presentation

Programación en MIPS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programación en MIPS

  2. Programación en MIPS • Camino típico: • Ensamblador de MIPS. Traduce instrucciones de lenguaje ensamblador a lenguaje de máquina. • Probar el código en un simulador de MIPS. • Correr el código objeto en un sistema MIPS real. Arquitectura de Computadoras

  3. Programación en MIPS • Dos sistemas para Windows: • MARS. Desarrollado en Missouri State University. http://courses.missouristate.edu/KenVollmar/MARS/ • SPIM. Desarrollado en la Universidad de Wisconsin. http://www.cs.wisc.edu/~larus/spim.html • Ambos sistemas ofrecen: • Interface gráfica de usuario. • Ensamblador extendido con seudo-instrucciones. • Simulador de una arquitectura MIPS. Arquitectura de Computadoras

  4. MARS • MARS tiene algunas ventajas: • Configurable. • Herramientas. Por ejemplo para visualizar los accesos a memoria y un simulador de un caché de datos. • No requiere instalación (privilegios de administrador). Arquitectura de Computadoras

  5. Uso de la memoria • Por convención, los sistemas basados en MIPS dividen la memoria en 3 segmentos: • Segmento de texto (text segment). • Segmento de datos (data segment). • Segmento de pila (stack segment). Arquitectura de Computadoras

  6. Segmento de texto • El segmento de texto, a partir de la dirección 40000016, es donde se guarda el código del programa. En los programas, el segmento de texto se marca por medio de la instrucción .text. Arquitectura de Computadoras

  7. Segmento de datos • El segmento de datos (data segment), a partir de la dirección 1000000016, es donde se guardan los datos. Se indica por medio de la instrucción .data. A su vez, el segmento de datos consta de dos partes: • Datos estáticos. Contiene variables de tamaño fijo y que necesitan ser accesados durante todo el programa. Por ejemplo, variables globales. • Datos dinámicos. Contiene variables que se crean durante el programa. Por ejemplo, espacio asignado con malloc en C, u objetos creados en Java. Arquitectura de Computadoras

  8. Segmento de pila • El segmento de pila (stack segment), a partir de la dirección 7FFFFFFC16, es donde se guardan los stack frames. Arquitectura de Computadoras

  9. 7FFFFFFC16 Segmento de pila Datos dinámicos Segmento de datos Datos estáticos 1000000016 Segmento de texto 40000016 Reservado Uso de la memoria Arquitectura de Computadoras

  10. Acceso a la memoria • Por convención, los sistemas MIPS dedican el registro $gp como apuntador a los datos estáticos. • Asignándole a $gp la dirección 1000800016 y usando constantes de 16 bits con signo, el programa puede accesar los primeros 64KB del segmento de datos (direcciones 1000000016 a 1001000016). • Por ejemplo, la instrucción: lw $v0, 0x8000($gp) Carga la palabra que comienza en 1000000016. Arquitectura de Computadoras

  11. Llamadas a sistema • SPIM y MARS ofrecen servicios tipo sistema operativo a través de la instrucción syscall. • Los servicios permiten leer del teclado, escribir a la consola y manejar archivos del sistema. • Para pedir un servicio, el programa carga el número de servicio en $v0 y los argumentos en $a0-$a3. Los servicios que regresan un valor lo hacen en $v0. Arquitectura de Computadoras

  12. Hola mundo en MIPS .data str: .asciiz “Hola mundo” .text main: li $v0, 4 # llamada al sistema para print_str la $a0, str # dirección del string a imprimir syscall # imprime el string li $v0, 10 # llamada al sistema para terminar syscall # termina Arquitectura de Computadoras

  13. Llamadas al sistema Arquitectura de Computadoras

  14. Lenguaje ensamblador • Comentarios con gato (#) o punto y coma (;). • Los identificadores pueden tener letras, números, puntos (.) y guiones bajos (_). No pueden comenzar con número. • Los opcodes son palabras reservadas. • Las etiquetas terminan con dos puntos (:). .data item: .word 1 .text .globl main # Debe ser global main: lw $t0, item Arquitectura de Computadoras

  15. Lenguaje ensamblador • Los números están en base 10 por default. La base 16 se indica con 0x. • Los strings se encierran con comillas dobles (“”). • Caracteres especiales en strings como en C • Nueva línea \n • Tabulador \t • Comilla \“ Arquitectura de Computadoras

  16. Directivas del ensamblador • .align n – Alinea el dato a 2n bytes. Con n=0 se suspende la alineación hasta el siguiente .data. • .ascii str – Almacena un string en memoria, pero no lo termina en nulo. • .asciiz str - Almacena un string en memoria y lo termina en nulo. • .byte b1…bn – Almacena los valores en bytes consecutivos de memoria. Arquitectura de Computadoras

  17. Directivas del ensamblador • .data [dir] – Define el comienzo del segmento de datos. Si el argumento opcional dir está presente, el segmento comienza en esa dirección. • .double d1,…, dn – Almacena los valores reales de doble precisión en localidades consecutivas de memoria. • .extern sym size – Declara que el dato almacenado en sym tiene tamaño size y es global. El dato está guardado en el segmento de datos. • .float f1,…, fn – Almacena los valores reales de precisión sencilla en localidades consecutivas de memoria. Arquitectura de Computadoras

  18. Directivas del ensamblador • .globl sym – Declara que sym es global y puede ser accesado desde otros archivos. • .half h1,…, hn – Almacena los datos de 16 bits en medias palabras consecutivas de memoria. • .kdata [dir] – Define el comienzo del segmento de datos del kernel. Si el argumento opcional dir está presente, el segmento comienza en esa dirección. • .ktext [dir] – Define el comienzo del segmento de código del kernel. Si el argumento opcional dir está presente, el segmento comienza en esa dirección. Arquitectura de Computadoras

  19. Directivas del ensamblador • .space n – Reserva n bytes de espacio en el segmento actual. En SPIM debe ser el segmento de datos. • .text [dir] – Define el comienzo del segmento de código. Si el argumento opcional dir está presente, el segmento comienza en esa dirección. • .word w1,…, wn – Almacena los datos de 32 bits en palabras consecutivas de memoria. Arquitectura de Computadoras

More Related