ArqComp p7

Anuncio
PRÁCTICAS DE
ARQUITECTURA DE
COMPUTADORES
PRACTICA 7
Repaso del Lenguaje
Ensamblador
CURSO 2005-2006
Arquitectura de Computadores.
Práctica 7: Repaso del lenguaje Ensamblador
1
PRÁCTICA 7
• ASPECTO TRATADO:
¾ Uso de la herramienta de simulación del procesador MIPS
R2000.
¾ Programación en ensamblador.
¾ Depuración y ejecución de programas
• MATERIAL NECESARIO:
¾ Ordenador con Windows 9X.
¾ Simulador MIPS del disca.
¾ Disquete de 1,44 Kb. Para guardar los datos.
¾ Conjunto de instrucciones MIPS
• CONCEPTOS NECESARIOS:
¾ Conocimiento mínimo del Windows 9X.
• DESCRIPCIÓN:
¾ Introducción a la programación con ensamblador MIPS.
• TIEMPO DE REALIZACIÓN:
¾ 1 sesión de 1,5 horas
Arquitectura de Computadores.
Práctica 7: Repaso del lenguaje Ensamblador
2
Realización de la práctica.
1. Iniciar Windows 95.
-
Para entrar en Windows 95 una vez encendido el equipo del aula de
informática, realizar las siguientes acciones:
-
-
Encender el ordenador y contestar NO a la pregunta de Re-instalación de
Windows98. En caso de que el ordenador no arrancara correctamente se
puede re-instalar W98, pero esto puede tardar bastante (10 min.).
Cuando aparezca una pantalla de Windows que nos pida nombre de usuario,
escribir “usuario” y no introducir ninguna contraseña. Es importante
puesto que si no lo hacemos, no podremos acceder a los recursos de la
red y realizar todos los ejercicios de la práctica.
La segunda vez que nos pida la contraseña, pulsamos Cancelar.
2. Instalación de la aplicación SIMMIPS
2.1.
Búsqueda de la aplicación.
Para comprobar si el simulador esta ya instalado en el equipo,
comprobar si existe en el escritorio el icono con el nombre
SIMMPS.EXE. En caso de que exista, arrancar la aplicación para
comprobar que efectivamente ya esta instalado. Si el programa se
ejecuta correctamente, entonces aparece algo parecido a:
Entonces
ya
está
instalado y se puede
trabajar con el.
En
caso
contrario,
tendréis que instalar la
aplicación.
Arquitectura de Computadores.
Práctica 7: Repaso del lenguaje Ensamblador
3
2.2.
Instalación de la aplicación.
Para instalar el SIMMIPS debemos buscar un programa .bat que se llama
MIPS.bat. Este se encuentra en el servidor Delfos, en el directorio \sys\Apl\Disca
(Unidad F). Para buscarlo podéis seguir los siguientes pasos (no son los únicos,
existen otras muchas posibilidades):
1. Abrir MiPC (doble click).
2. Abrir F:, que debe de ser una conexión de red que pondrá Apl en \\Delfos\sys.
3. Abrir una carpeta que se llama Disca.
4. Ejecutar el programa MIPS.bat.
Una vez hecho esto, el programa se copiara a vuestro disco duro local y se creará
un icono en el escritorio para poder arrancarlo.
Y una vez finalizado, ya tendremos el programa instalado y podemos arrancarlo
con el mismo procedimiento visto en el apartado anterior (icono SIMMIPS).
En caso de no tener la conexión de red F: o tenerla a otro sitio, deberéis buscar la
carpeta, por ejemplo, a través del icono de red. En caso de que no podáis, no habréis
introducido correctamente la contraseña inicial. Deberéis reiniciar la sesión (no es
necesario re-arrancar el ordenador).
3. Descripción de la aplicación “simulador gráfico del procesador MIPS
R2000”.
El programa es un simulador gráfico de un procesador MIPS R2000 desarrollado por
Francisco Montero Simarro en un proyecto fin de carrera realizado en la Universidad
Politécnica de Valencia, en el departamento del DISCA. Esta inspirado en una versión para
Unís de nombre xspim, realizada por James R. Larus en la Universidad de Wisconsin.
El simulador permite escribir y ejecutar programas escritos en ensamblador del procesador
MIPS R2000. Para conocer el funcionamiento del simulador, estudiaremos las opciones
que nos ofrece el menú.
Archivo
Contiene las funciones típicas en todas las aplicaciones windows y nos permite
abrir, guardar, imprimir y editar un nuevo documento de trabajo. El programa trabaja con
ficheros de texto que contienen las instrucciones en ensamblador y que usa por defecto la
extensión s, aunque no es necesario que sea esta concretamente. Una opción particular de
esta aplicación es “Guardar código máquina”, que genera un fichero en el que se puede
ver el programa en lenguaje ensamblador y su equivalente en lenguaje máquina.
Arquitectura de Computadores.
Práctica 7: Repaso del lenguaje Ensamblador
4
Botones nuevo, abrir, guardar
y guardar como.
Edición
Esta opción no contiene ninguna particularidad especial en esta aplicación en
concreto. Se puede deshacer la última edición realizada, y las típicas funciones de copiar,
cortar y pegar.
Botones cortar, copiar, pegar y
deshacer.
Buscar
Al igual que la anterior, solo contiene las funciones clásicas en este menú para
buscar y reemplazar texto.
Botones buscar y siguiente
Ensamblar.
Esta opción permite ensamblar los archivos editados. En caso de existir errores de
compilación nos mostrará una ventana indicándonos la posición del error. En caso
contrario se podrán ejecutar diferentes opciones del programa:
• Almacenar código máquina.
Botón
• Ejecución del programa.
bl
• añadir puntos de ruptura.
• Inicialización de registros.
Ejecución.
Esta opción permite ejecutar los programas entre las varias opciones de que se
dispone y gestionar los puntos de ruptura del programa.
• Ejecutar. Esta opción ejecuta el programa sin pausa alguna, a no ser que se hayan
especificado puntos de ruptura. Por tanto, de esta forma solo podremos comprobar
el correcto funcionamiento del programa en el caso de que hayamos realizado
salidas por consola que nos permitan visualizar los resultados.
• Ejecución paso a paso. Con esta opción se ejecutan las instrucciones del programa
de un en una de forma que se pueden ver en cada momento la evolución de los
diferentes elementos del procesador MIPS R2000.
• Etapa a etapa. Según el tipo de instrucción de que se trate, su ejecución se divide en
diferentes etapas. La ejecución de las instrucciones se puede de esta manera dividir
en cada una de las etapas para ver la evolución de la ejecución en la máquina. Estas
etapas son:
Arquitectura de Computadores.
Práctica 7: Repaso del lenguaje Ensamblador
5
ƒ BI. Búsqueda de instrucción.
ƒ DI/BO. Decodificación de la instrucción/búsqueda de operandos.
ƒ EJ. Ejecución de la instrucción.
ƒ MEM. Memoria
ƒ ER. Escritura de los resultados.
En cuanto a los puntos de ruptura las opciones de que disponemos son:
• Añadir punto de ruptura. Mediante esta opción el programa nos pedirá la etiqueta o
dirección donde queremos interrumpir la ejecución de un programa. En los
siguientes ejemplos se muestra como introducir puntos de ruptura con etiquetas y
con direcciones.
•
•
•
Borrar punto de ruptura. Para eliminar el punto de ruptura nos pedirá la etiqueta
donde este estaba situado.
Borrar todos los puntos de ruptura. En el menú opciones tenemos la posibilidad de
borrar todos los puntos de ruptura existentes sin necesidad de especificar las
etiquetas.
Listar puntos de ruptura. Con esta opción se desplegara una caja de dialogo con las
direcciones de las instrucciones donde existen puntos de ruptura. Por ejemplo, si
hemos añadido puntos de ruptura en inicio y repeat en el ejemplo anterior,
veríamos:
Arquitectura de Computadores.
Práctica 7: Repaso del lenguaje Ensamblador
6
Notar que en la edición del programa no vemos las direcciones de las instrucciones.
Para ello es necesario abrir la ventana memoria.
Botones ejecutar, ejecutar paso a
paso, ejecutar por etapas y añadir
punto de ruptura.
Ver.
En la ejecución y depuración de un programa podemos estar interesados en
visualizar diferentes elementos del sistema. Con esta opción podemos controlar cuando
visualizar los siguientes elementos:
• Salida. Para ver las salidas por pantalla realizables mediante llamadas al sistema.
• Registros de la CPU. En esta ventana podemos ver el contenido de los registros de
la CPU y cambiar los valores de los registros modificables con los valores que nos
interesen. Para realizar esto, basta con escribir el valor deseado en el registro y
pulsar el botón Mod. Reg encargado de registrar en la CPU la modificación
realizada de los registros.
•
Registros del coprocesador 0 CP0.
Arquitectura de Computadores.
Práctica 7: Repaso del lenguaje Ensamblador
7
•
Registros de la FPU.
Las instrucciones que operan sobre variables en coma flotante solo pueden usar
registros pares. Por tanto, en esta ventana podemos ver el contenido de los registros
como de 32 o 64 bits (en el ejemplo f0/f1 y f8/f9). Además, se puede escoger entre
• Memoria.
• Unidad aritmético-lógica.
Arquitectura de Computadores.
Práctica 7: Repaso del lenguaje Ensamblador
8
4. Ejercicios.
4.1.
Ejemplo 1. Suma de elementos enteros de un vector.
Para la realización de este ejercicio contaremos con el fichero sumbyt.s que contiene el
programa que podemos ver a continuación con la excepción de no estar comentado.
Analiza y ejecuta el programa.
.data 0x10000000
vect: .byte 4,5,11,18, 56 #vector de enteros
cad: .asciiz "\n La suma de los elementos del vector es :"
.text
.globl inicio
inicio: addi $4, $0, 0
#reset de registro 4
addi $8, $0, 0
#reset de registro 8
addi $9, $0, 0
#reset de registro 9
addi $10, $0, 0
#reset de registro 10
addi $10, $0, 1
#registro 10 contiene decremento nº elementos
addi $9, $0, 5
#registro 9 contiene nº de elementos del vector de enteros
la $20, vect
#registro 20 contiene dirección de los datos
repetir:lb $19,0($20)
#reg 19 contiene el elemento apuntado por la dirección
#almacenada en reg 20
add $8, $8, $19
#se suma el contenido del reg. 8 con el del reg. 19
add $20, $20, 1
#reg. 20 apunta al siguiente elemento del vector (bytes -> +1)
sub $9, $9, $10
#se decrementa el nº de elementos pendientes de ejecutar
deb1: bne $9, $0, repetir #si aún quedan elementos en el vector se repite el proceso
la $4,cad
#se imprime la cadena de salida
addi $2,$0,4
syscall
addi $2, $0, 1
#se imprime el resultado
add $4, $0, $8
syscall
.end
0x1000.....
0000
0001 0002 0003 0004 0005 0006 0007 0008 0009 000A
4
5
11
18
56
1
2
3
4
5
R20
R20 R20 R20 R20
4
5
11
18
56
4
3
2
1
0
4
9
20
Arquitectura de Computadores.
38
94
Direcciones de
Memoria
Vector
iteraciones
Dirección donde apunta R20
Contenido de R19
Contenido de R9 (al final de
repetir)
Contenido de R8 (al final de
repetir)
Práctica 7: Repaso del lenguaje Ensamblador
9
4.2.
Ejercicio 2. Suma de elementos enteros largos de un vector.
Para la realización de este ejercicio contaremos con el fichero sumwor.s que contiene un
programa con la misma finalidad que el anterior, con la excepción de sumar número
enteros largos (word). Para que el programa funcione correctamente es necesario añadir
dos instrucciones en la posición indicada (que son modificaciones sobre la instrucción
utilizada con los enteros). Completar el programa y el cuadro asociado (para ver los valores
en cada iteración hay que introducir puntos de ruptura y consultar los valores de los
registros.
.data 0x10000000
vect: .word 4,5,11,181, 56
cad:. asciiz "\nLa suma de los elementos del vector es :"
.text
.globl inicio
inicio: addi $4, $0, 0
addi $8, $0, 0
addi $9, $0, 0
addi $10, $0, 0
addi $10, $0, 1
addi $9, $0, 5
la $20, vect
repetir: Añadir la instrucción que falta para que el programa funcione correctamente
add $8, $8, $19
Añadir la instrucción que falta para que el programa funcione correctamente
sub $9, $9, $10
deb1: bne $9, $0, repetir
la $4,cad
addi $2,$0,4
syscall
addi $2, $0, 1
add $4, $0, $8
syscall
.end
Arquitectura de Computadores.
Práctica 7: Repaso del lenguaje Ensamblador
10
4.3.
Ejercicio 3. Longitud de una cadena de caracteres
Analiza el programa concar.s que realiza la cuenta de la longitud de la cadena
“Fundamentos” terminada con carácter nulo \0 situada a partir de la dirección 0x10000000.
car:
cad:
.data 0x10000000
.asciiz "Fundamentos"
.asciiz "\n nº de caracteres : "
.text
.globl inicio
inicio: la $20, car
addi $21, $0, 0
caracteres
bucle: lb $19, 0($20)
beq $0, $19, fin
addi $20, $20, 1
addi $21, $21, 1
deb1: j bucle
# Inicialización del registro 21 para contar los
# leer un byte de la cadena
# si es el carácter nulo, hemos acabado
# sino, apuntar al siguiente caracter
# contabilizar el carácter leído.
fin:
la $4,cad
addi $2,$0,4
syscallm
# imprimir cadena
addi $2, $0, 1
add $4, $0, $21
syscall
.end
#imprimir nº de caracteres
(Tene en cuenta que cada posición de memoria que vemos en la ventana de memoria,
representa 4 bytes. Por ejemplo, en este caso, en 0x10000000, tenemos 0x646e7546, que
interpretado como ASCII representa “F u n d” - 0x10000000 0x10000001 0x10000002
0x10000003 )
Arquitectura de Computadores.
Práctica 7: Repaso del lenguaje Ensamblador
11
4.4.
Ejercicio 4. Extracción de datos de un vector.
El programa nelem.s, nos devuelve cuantos elementos son mayores, menores e iguales al
último elemento de un vector de 32 bits. Los parámetros buscados se ubicaran en memoria.
El código no está comentado.
.data 0x10000000
vector: .word 34, 21, 10, 5, 3, 10
nelem: .word 6
mayor: .word 0
menor: .word 0
igual: .word 0
.text
.globl inicio
inicio: lw $20, nelem($0)
addi $16,$0,4
mult $20, $16
mflo $16
addi $16, $16, -4
lw $8, vector($16)
add $18, $0, $0
bucle:addi $20, $20, -1
lw $21, vector($18)
addi $18, $18, 4
Arquitectura de Computadores.
si:
ent:
snsa:
igua:
finb:
slt $7, $21, $8
bne $7, $0, ent
j snsa
lw $9, menor($0)
addi $9, $9,1
sw $9, menor($0)
j finb
beq $21, $8, igua
lw $9, mayor($0)
addi $9, $9, 1
sw $9, mayor($0)
j finb
lw $9, igual($0)
addi $9, $9, 1
sw $9, igual($0)
beq $20, $0, fin
j bucle
fin:
.end
Práctica 7: Repaso del lenguaje Ensamblador
12
4.5.
Ejercicio 5. Multiplicacion de vectores.
Sean dos vectores de tipo byte de 5 elementos, completar el programa de forma que nos
devuelva el producto escalar de los vectores.
vect1:
vect2:
cad:
inicio:
.data 0x10000000
.byte 4,5,11,18, 56
.data 0x10000008
.byte 10,32,14,13, 21
.asciiz "\ El producto escalar de los vectores es: \n"
.text
.globl inicio
.............................
.............................
Ventana salida
El producto escalar de los vectores es:
1764
Arquitectura de Computadores.
Práctica 7: Repaso del lenguaje Ensamblador
13
Descargar