© 1997-2006 Prof. José Mª Foces Morán PCSpim: SPIM sobre Windows Ventana principal de PCSpim...

Post on 02-Feb-2016

217 views 0 download

Transcript of © 1997-2006 Prof. José Mª Foces Morán PCSpim: SPIM sobre Windows Ventana principal de PCSpim...

© 1997-2006 Prof. José Mª Foces Morán

PCSpim: SPIM sobre Windows

Ventana principal de PCSpim

Consola: permite interactuar con el programa que está siendo simulado.

DATA SEGMENT: Ver el segmento de datos del programa

simulado.

MESSAGES: Progreso de la

simulación.

REGISTERS: Ver los registros

arquitecturados de MIPS en tiempo real

TEXT SEGMENT:Ver

instrucciones en su formato binario y

ensamblador

© 1997-2006 Prof. José Mª Foces Morán

SPIM: Arquitectura

• Arquitectura de 32 bits. Los registros son de 32 bits de ancho Las direcciones de memoria Las instrucciones tienen 32 bits de ancho.

• Arquitectura Load/Store: Las operaciones con la memoria están limitadas a

cargas y almacenamientos. No hay ninguna instrucción de incremento de memoria. No hay modos indirectos. Las instrucciones emplean tres direcciones:

destino, fuente1, fuente2add t0, t1, t2

Tiene 32 registrosUno de ellos, llamado $zero, contiene un cero,

siempre. Little-endian: extremista inferior.

Esta versión de Spim, la cual, corre sobre Windows para Intel-32, es little-endian, igual que la plataforma Intel-32.

Sobre UNIX o LINUX para SPARC, por ejemplo, es big-endian.

© 1997-2006 Prof. José Mª Foces Morán

SPIM: MIPS assembly language.

• Lenguaje ensamblaje de MIPS(assembly).

Ofrece un nivel de abstracción superior al de la arquitectura.

Los programas se van escribiendo instrucción-a-instrucción, igual que en el caso anterior.

Constituye una forma más "simbólica" de escribir un programa.

Una sentencia de lenguaje de ensamblaje tiene: Etiqueta - nombres simbólicos:

Permite nombrar tanto instrucciones como datos simples y arrays.

Campo de instrucción: Nemónico de la operación (P.ej.: add). Operandos: Pueden ser etiquetas o

números. Bandera de indirecto. Campo de comentarios: ;

© 1997-2006 Prof. José Mª Foces Morán

SPIM: Registros.MIPS posee 32 registros de propósito

general: $0 a $32. El lenguaje de ensamblaje de MIPS (y también SPIM) les

asocia un nombre simbólico representativo de los convenios que se aplican al uso de

cada registro.

• REGISTROS de SPIM/MIPS. El nombre indica el propósito del registro:

$v0-$v1, el valor de retorno de una función. $a0-$a3, los argumentos 1-4 $t0-$t9, registros temporales $s0-$s7, registros temporales con garantía de que se

salvan entre llamadas a subrutinas. $gp, puntero al area global $sp, puntero de pila $fp, puntero de marco de pila $ra, dirección de retorno $k0-$k1, reservados para el kernel del SO.

• INSTRUCCIONES QUE MANEJAN REGISTROS.

Copiar el contenido de rs a rd move rd, rs

Obtener la suma de rs1 y rs2 y poner el resultado en rd

addu rd, rs1, rs2

Obtener la resta rs1- rs2, sin signo y poner resultado en rd:

subu rd, rs1, rs2

© 1997-2006 Prof. José Mª Foces Morán

SPIM: Segmentos.Los programas que simula SPIM son

programas escritos en ensamblador de MIPS y su estructura contiene al menos tres

segmentos: datos, código y pila.

• SEGMENTOS Dentro de un fichero ejecutable los datos y

los programas están separados en tres áreas :

SEGMENTO DE CODIGO:Contiene las instrucciones del programaEs de sólo lecturaEl directivo empleado para delimitar el segmento

de código en el texto fuente es: .text SEGMENTO DE DATOS:Contiene datos estáticosLectura y escrituraEl directivo empleado para delimitar el segmento

de datos en el texto fuente es: .data SEGMENTO DE PILA:Guarda información sobre los

procedimientos/subrutinas en ejecución.Guarda la dirección de retorno de proc/subrutina.Guarda las variables locales de una

proc/subrutina.

© 1997-2006 Prof. José Mª Foces Morán

SPIM: Reserva de espacio de memoria para constantes y variables.

Cadenas terminadas en ‘\0’.El directivo es .asciiz .El ejemplo siguiente crea una

cadena llamada auto-terminada en ‘\0’ llamada mi_mensajemi_mensaje .asciiz “Hola mundo!\n”

bytes, fp-simple precisión, fp-doble, words: El directivo.byte reserva espacio para datos de 8

bits. El ejemplo siguiente crea una lista de bytes cuya dirección base es mis_datos_de_8bits inicializados con los valores 45 decimal, 50 hexadecimal, etc. mis_datos_de_8bits .byte 45, 0x50, 0x10, 0

.word reserva espacio para datos de 32 bits. El ejemplo siguiente crea una lista de bytes cuya dirección base es mis_datos_de_32bits inicilaizados con los valores siguientes separados por comas.mis_datos_de_32bits .word 0x00110011, 0xFF00FF00El

.float reserva espacio para datos de punto flotante de 32 bits(simple precisión).mis_datos_de_fp32 .float 3.14E0, 1.0, -1.0

.double reserva espacio para datos de punto flotante de 64 bits (doble precisión).mis_datos_de_fp32 .double 3.140000001E-600, 1.0, -1.0

© 1997-2006 Prof. José Mª Foces Morán

SPIM: Llamadas del sistemaEl simulador Spim incluye algunas llamadas

del sistema compatibles con UNIX para imprimir datos en la ventana Console, leer datos desde Console, salir del programa,

etc.

Servicio Llamada del

sistema

Sirve para Registro para el paso de

argumentos

Resultados

Print_int 1 Imprimir un int en la consola $a0 = integer

Print_float 2 Imprimir un float en la consola

$f12= float

Print_double 3 Imprimir un double en la consola

$f12 = double

Print_string 4 Imprimir una string terminada en NULL en la consola

$a0 = dirección de memoria de la cadena terminada en ‘\ 0’

Read_int 5 Leer un int desde la consola integer (en $v0 ) Read_float 6 Leer un float desde la consola float (en $f0 ) Read_double 7 Leer un double desde la

consola double (en $f0 )

Read_string 8 Leer una string desde la consola

$a0 = buffer, $a1= longitud

Sbrk 9 Pedir memoria adicional para este programa.

$a0 = cantidad Dirección (en $v0 )

Exit 10 Abandonar la simulación de este programa.

© 1997-2006 Prof. José Mª Foces Morán

SPIM: Un programa de ejemplo. # Universidad de Leon, Dept. IEE, 1998# Estructura y Tecnolog¡a de Computadores# Maquinas Electronicas # Jose M. Foces Moran.

.data # Aqui comienza el segmento de datos

prompt1: .asciiz "Entre un entero: " # Cadena del mensaje 1 .align 2 # Alinear el dato siguiente en

# frontera de palabra.

prompt2: .asciiz "\nEntre otro entero: " # Cadena del mensaje 2 .align 2

resultado: .asciiz "\nLa suma es: " # Cadena del mensaje de resultado

.text # Comienzo del segmento de codigo

.globl main # La etiqueta main ha de ser global (se verá # desde cualquier fichero del proyecto).

main: # Creamos main, el punto de entrada a nuestro # programa desde el kernel de Spim. Esto es un # convenio que hay que respetar.

li $v0, 4 #la $a0, prompt1 # Imprimir mensaje 1 en la consolasyscall #

li $v0, 5 #syscall # Leer el primer entero desde la consolamove $s0, $v0 # Salvar el primer entero en $s0

li $v0, 4 #la $a0, prompt2 # Imprimir mensaje 2 en consolasyscall #

li $v0, 5 #syscall # Leer el segundo enteromove $s1, $v0 # Salvar el entero en $s1

add $s2, $s0, $s1 # hacer $s0 + $s1 --> $s2

li $v0, 4la $a0, resultado syscall # Imprimir mensaje del resultado en consola

li $v0,1 # Llevar el resultado a $a0move $a0, $s2 # Imprimir $a0 en consolasyscall