© 1997-2006 Prof. José Mª Foces Morán PCSpim: SPIM sobre Windows Ventana principal de PCSpim...
-
Upload
josefina-raymundo -
Category
Documents
-
view
217 -
download
0
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