Sesión 2

Usando las directivas del ensamblador del MIPS y las llamadas al sistema en XSPIM


2.1 Objetivo General

Estudiar y entender el uso tanto de las directivas del ensamblador del MIPS como de las llamadas al sistema provistas por XSPIM.

2.2 Objetivos específicos

Al terminar esta sesión de laboratorio:

Seguramente notaste en el programa simple.s de la sesión anterior, algunas palabras como .data, .globl o .asciiz. Las palabras, como estas, que comienzan en punto (".") se llaman directivas del ensamblador (o seudocódigos de operación) y sirven para decirle al ensamblador cómo traducir un programa, pero no producen instrucciones de máquina.

De la documentación de SPIM, encuentra la parte donde se refiere a las directivas del ensamblador del MIPS que XSPIM entiende. Existen de hehco muchas más directivas, pero no las consideramos a lo largo de estas sesiones de laboratorio.

2.4 Llamadas al sistema en XSPIM

XSPIM provee un pequeño número de servicios parecidos a los del sistema operativo a través de la llamada del systema syscall. Para solicitar un servicio del sistema en un programa, se carga el código del servicio en el registro $v0. Los registros donde se colocan los argumentos de cada servicio, al igual que aquellos donde se reciben sus valores de retorno, dependen de cada servicio, como se muestra en la tabla 1.

Servicio Código Argumentos Resultados
print_int 1 $a0 = integer  
print_float 2 $f12 = float  
print_double 3 $f12 = double  
print_string 4 $a0 = string  
read_int 5   integer (in $v0)
read_float 6   float (in $f0)
read_double 7   double (in $f0)
read_string 8 $a0 = buffer, $a1 = length  
sbrk 9 $a0 = amount address (in $v0)
exit 10    
Tabla 1

Ejecuta el programa syscall.s en XSPIM. Observa el uso de las directivas del ensamblador y el procedimiento para hacer uso de los servicios del sistema.

2.5 Preguntas de revisión
  1. Todo programa en ensamblador del XSPIM (o por lo menos todo programa utilizado en XSPIM) debe tener definido el símbolo .globl main a partir de cuya dirección comenzará a ejecutarse. ¿Qué directiva del ensamblador debe utilizarse siempre que se declara dicho símbolo?
  2. ¿Qué directivas deben anteceder siempre a un grupo de instrucciones en un programa en ensamblador del MIPS?
  3. En la arquitectura MIPS, cada palabra (word) de memoria se forma con 32 bits. Si en cierta porción de un programa se encuentra el código
    .data
    .byte 3 #byte b
    .word 5 #palabra w
    ¿En qué byte de la memoria, respecto a la localidad donde se almacena el byte b, se comienza a almacenar la palabra w al ejecutarse el programa?
  4. En términos de la pregunta anterior, ¿Cómo debe modificarse el segmento de código para que la palabra w se comienze a almacenar en el byte "siguiente" de la memoria? El significado de "siguiente" depende de si el sistema es big- o little-endian.
  5. Tomando como modelo el programa syscalls.s, escribe la versión en ensamblador del MIPS del ya tradicional programa que imprime la frase Hola mundo. Guarda el programa en el archivo hola.s.
    Cuando una sesión de laboratorio se requiera realizar un programa y/o reporte, éste deberá entregarse por e-mail. El mensaje electrónico deberá contener un archivo .tar.z o .tgz( o en su defecto .zip) con los programas incluidos y/o el reporte de la sesión (si es necesario). Al expandir el archivo tgz, deberá contener un directorio llamado con el login de tu cuenta, luego un subdirectorio llamado como la sesión (por ejemplo sesion1, o sesion2), finalmente, los programas y/o reportes a entregar. Los reportes deberán ser enviados en formato postcrip (ps) o en archivo PDF, cualquier otro formato no será recibido. Y algo muy importante, los programas y/o reportes deberán de entregarse en la fecha indicada, no se recibirán después.

Volver a la Introducción