Mars

3,057 views

Published on

Presentaicon sobre MARS su uso y las directivas para utilizar este IDE de programacion y simulador de la arquitectura MIPS

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,057
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
45
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Mars

  1. 1. MARS (MIPS Assembler and Rutine Simulator )
  2. 2. Programación en MIPS <ul><li>MIPS( Microprocessor without Interlocked Pipeline Stages ) </li></ul><ul><li>MARS es un entorno de desarrollo integrado (IDE) ligero para programar en lenguaje ensamblador MIPS, destinados a la educación. </li></ul><ul><li>Camino típico: </li></ul><ul><ul><li>Ensamblador de MIPS. Traduce instrucciones de lenguaje ensamblador a lenguaje de máquina. </li></ul></ul><ul><ul><li>Probar el código en un simulador de MIPS. </li></ul></ul><ul><ul><li>Correr el código objeto en un sistema MIPS real. </li></ul></ul>
  3. 3. Programación en MIPS <ul><li>Sistemas para Windows: </li></ul><ul><ul><li>MARS. Desarrollado en Missouri State University. http://courses.missouristate.edu/KenVollmar/MARS/ </li></ul></ul><ul><li>El sistema ofrece: </li></ul><ul><ul><li>Interface gráfica de usuario. </li></ul></ul><ul><ul><li>Ensamblador extendido con seudo-instrucciones. </li></ul></ul><ul><ul><li>Simulador de una arquitectura MIPS. </li></ul></ul>
  4. 4. HISTORIA <ul><li>MARS 1.0 fue lanzado en enero de 2005 y difundido durante una presentación de afiches en SIGCSE 2005. </li></ul><ul><li>MARS 2.0 fue lanzado en septiembre de 2005. Se incorporaron modificaciones de importancia tanto a la interfaz gráfica como al ensamblador, registros de punto flotante y las instrucciones más relevantes. </li></ul><ul><li>MARS 3.0 fue lanzado en agosto de 2006, su importancia radica en una gran expansión del conjunto de instrucciones MIPS-32. </li></ul><ul><li>En enero 2010, fue lanzada la versión 3.8. Tiene como novedad dos nuevas herramientas aportadas por Ingo Kofler de la Universidad de Klagenfurt en Austria. </li></ul>
  5. 5. MARS <ul><li>MARS tiene algunas ventajas: </li></ul><ul><ul><li>Configurable. </li></ul></ul><ul><ul><li>Herramientas. Por ejemplo para visualizar los accesos a memoria y un simulador de un caché de datos. </li></ul></ul><ul><ul><li>No requiere instalación (privilegios de administrador). </li></ul></ul><ul><li>MARS tiene algunas desventajas: </li></ul><ul><ul><li>Al depender de la máquina virtual de Java algunos estudiantes tienen problemas de instalación en su respectivo Sistema Operativo. </li></ul></ul><ul><ul><li>La aplicación está disponible sólo en inglés. </li></ul></ul>
  6. 6. Uso de la memoria <ul><li>Por convención, los sistemas basados en MIPS dividen la memoria en 3 segmentos: </li></ul><ul><li>Segmento de texto ( text segment ). </li></ul><ul><li>Segmento de datos ( data segment ). </li></ul><ul><li>Segmento de pila ( stack segment ). </li></ul>
  7. 7. Segmento de texto <ul><li>El segmento de texto, a partir de la dirección 400000 16 , es donde se guarda el código del programa. </li></ul><ul><li>En los programas, el segmento de texto se marca por medio de la instrucción .text . </li></ul>
  8. 8. Segmento de datos <ul><li>El segmento de datos ( data segment ), a partir de la dirección 10000000 16 , es donde se guardan los datos. Se indica por medio de la instrucción .data . </li></ul><ul><li>A su vez, el segmento de datos consta de dos partes: </li></ul><ul><ul><li>Datos estáticos. Contiene variables de tamaño fijo y que necesitan ser accesados durante todo el programa. Por ejemplo, variables globales. </li></ul></ul><ul><ul><li>Datos dinámicos. Contiene variables que se crean durante el programa. Por ejemplo, espacio asignado con malloc en C, u objetos creados en Java. </li></ul></ul>
  9. 9. Segmento de pila <ul><li>El segmento de pila ( stack segment ), a partir de la dirección 7FFFFFFC 16 , es donde se guardan los stack frames. </li></ul>
  10. 10. Uso de la memoria Reservado Datos estáticos Datos dinámicos Segmento de texto Segmento de datos Segmento de pila 400000 16 10000000 16 7FFFFFFC 16
  11. 11. Acceso a la memoria <ul><li>Por convención, los sistemas MIPS dedican el registro $gp como apuntador a los datos estáticos. </li></ul><ul><li>Asignándole a $gp la dirección 10008000 16 y usando constantes de 16 bits con signo, el programa puede accesar los primeros 64KB del segmento de datos (direcciones 10000000 16 a 10010000 16 ). </li></ul><ul><li>Por ejemplo, la instrucción: </li></ul><ul><li>lw $v0, 0x8000($gp) </li></ul><ul><li>Carga la palabra que comienza en 10000000 16 . </li></ul>
  12. 12. Llamadas a sistema <ul><li>SPIM y MARS ofrecen servicios tipo sistema operativo a través de la instrucción syscall . </li></ul><ul><li>Los servicios permiten leer del teclado, escribir a la consola y manejar archivos del sistema. </li></ul><ul><li>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. </li></ul>
  13. 13. Hola mundo en MIPS <ul><li>.data </li></ul><ul><li>str: </li></ul><ul><li>.asciiz “ Hola mundo” </li></ul><ul><li>.text </li></ul><ul><li>main: li $v0, 4 # llamada al sistema para print_str </li></ul><ul><li>la $a0, str # dirección del string a imprimir </li></ul><ul><li>syscall # imprime el string </li></ul><ul><li>li $v0, 10 # llamada al sistema para terminar </li></ul><ul><li>syscall # termina </li></ul>
  14. 14. Llamadas al sistema Servicio Código Argumentos Resultado print _int 1 $a0 = integer print_float 2 $f12 = float print_double 3 $f12 = float print_string 4 $a0 = string read _int 5 integer (en $v0) read_float 6 float (en $v0) read_double 7 double (en $v0) read_string 8 $a0 = buffer, $a1 = tamaño sbrk 9 $a0 = cantidad direcci ón (en $v0) exit 10 print_char 11 $a0 = char read_char 12 char (en $v0) open 13 $a0 = nombre del archivo (string), $a1 = banderas, $a2 = modo handle (en $a0) read 14 $a0 = handle, $a1 = buffer, $a2 = tama ño num. de caracteres leídos (en $a0) write 15 $a0 = handle, $a1 = buffer, $a2 = tama ño num. de caracteres escritos (en $a0) close 16 $a0 = handle exit2 17 $a0 = result
  15. 15. Lenguaje ensamblador <ul><li>Comentarios con gato (#) o punto y coma (;). </li></ul><ul><li>Los identificadores pueden tener letras, números, puntos (.) y guiones bajos (_). No pueden comenzar con número. </li></ul><ul><li>Los opcodes son palabras reservadas. </li></ul><ul><li>Las etiquetas terminan con dos puntos (:). </li></ul><ul><li>.data </li></ul><ul><li>item: .word 1 </li></ul><ul><ul><ul><li>.text </li></ul></ul></ul><ul><li>.globl main # Debe ser global </li></ul><ul><li>main: lw $t0, item </li></ul>
  16. 16. Lenguaje ensamblador <ul><li>Los números están en base 10 por default. La base 16 se indica con 0x. </li></ul><ul><li>Los strings se encierran con comillas dobles (“”). </li></ul><ul><li>Caracteres especiales en strings como en C </li></ul><ul><ul><li>Nueva línea n </li></ul></ul><ul><ul><li>Tabulador t </li></ul></ul><ul><ul><li>Comilla “ </li></ul></ul>
  17. 17. Directivas del ensamblador <ul><li>.align n – Alinea el dato a 2 n bytes. Con n=0 se suspende la alineación hasta el siguiente .data. </li></ul><ul><li>.ascii str – Almacena un string en memoria, pero no lo termina en nulo. </li></ul><ul><li>.asciiz str - Almacena un string en memoria y lo termina en nulo. </li></ul><ul><li>.byte b 1 …b n – Almacena los valores en bytes consecutivos de memoria. </li></ul>
  18. 18. Directivas del ensamblador <ul><li>.data [dir] – Define el comienzo del segmento de datos. Si el argumento opcional dir está presente, el segmento comienza en esa dirección. </li></ul><ul><li>.double d 1 ,…, d n – Almacena los valores reales de doble precisión en localidades consecutivas de memoria. </li></ul><ul><li>.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. </li></ul><ul><li>.float f 1 ,…, f n – Almacena los valores reales de precisión sencilla en localidades consecutivas de memoria. </li></ul>
  19. 19. Directivas del ensamblador <ul><li>.globl sym – Declara que sym es global y puede ser accesado desde otros archivos. </li></ul><ul><li>.half h 1 ,…, h n – Almacena los datos de 16 bits en medias palabras consecutivas de memoria. </li></ul><ul><li>.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. </li></ul><ul><li>.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. </li></ul>
  20. 20. Directivas del ensamblador <ul><li>.space n – Reserva n bytes de espacio en el segmento actual. En SPIM debe ser el segmento de datos. </li></ul><ul><li>.text [dir] – Define el comienzo del segmento de código. Si el argumento opcional dir está presente, el segmento comienza en esa dirección. </li></ul><ul><li>.word w 1 ,…, w n – Almacena los datos de 32 bits en palabras consecutivas de memoria. </li></ul>

×