Está en la página 1de 3

ESCUELA SUPERIOR DE INGENIERÍA INFORMÁTICA

INFORMÁTICA BÁSICA

PRÁCTICA 2:
PROGRAMACIÓN EN ENSAMBLADOR

Apellidos: __Gómez Hijano__

Nombre: ___Salvador___

Fecha: ____6-01-2009____

CURSO 2008-2009

1.- Introducción
La práctica realizada consiste en el ensamblaje y simulación de un programa en ensamblador utilizando para tal
fin el simulador de procesadores MIPS MARS (http://www.cs.missouristate.edu/MARS/), realizado por Peter
Sanderson y Kenneth Vollmar de la Universidad del Estado de Missouri.

Dado que la aplicación está escrita en Java es necesario tener instalado una versión reciente del JRE (Java
Runtime Enviroment, en mi caso la versión 1.4.2_18). El hecho de estar escrita en Java posibilita que la
aplicación pueda ser ejecutada en distintas plataformas (Linux, MacOS, Windows…)

El programa simulado en la práctica realiza el cálculo de la letra del NIF. Para ello usa un algoritmo que
consiste en calcular el resto de la división entera del número de DNI entre 23, para a continuación extraer la
letra correspondiente de la siguiente lista:

“TRWAGMYFPDXBNJZSQVHLCKE”, la cual es un orden determinado del alfabeto castellano del que se han
eliminado las letras I, Ñ, O y U.

En esta lista la numeración comienza por la letra T, a la cual le correspondería el 0 hasta la letra E a la que le
correspondería el número 22.

Para la realización de la traza se ha utilizado la aplicación de hojas de calculo “Microsoft Excel 2003” en la
versión 11.5612.8221, y para realizar la memoria se ha utilizado la aplicación de procesamiento de textos
“Microsoft Word 2003” en la versión 11.5604.8221 ambas pertenecientes a la suite ofimática Microsoft Office
2003.

Las características del equipo que se ha utilizado para la realización de la misma son:
Nombre del sistema operativo: Microsoft Windows XP Professional
Versión: 5.1.2600 Service Pack 3 Compilación 2600
Fabricante del sistema operativo: Microsoft Corporation
Fabricante del sistema: TOSHIBA
Modelo del sistema: Portable PC – S2450-S402
Tipo de sistema: Equipo basado en X86
Procesador: x86 Family 15 Model 2 Stepping 7 GenuineIntel ~2527 MHz
BIOS Versión/Fecha: TOSHIBA Versión 1.50, 13/01/2005
Memoria física total: 512,00 MB
Capacidad de disco duro: Partición C: Capacidad 4,44GB Espacio libre 300 MB
Partición F: Capacidad 7,12GB Espacio libre 4,47GB

2.- Cuestiones resueltas.

2.1.- Si introducimos el siguiente número de NIF: 87654321. ¿Qué valor tendrán las variables “DNI” y
“RESTO” al finalizar la ejecución del programa? Expresar los valores en Decimal y en Hexadecimal.

Valor de DNI al finalizar la ejecución: 10) 87654321 16) 0x05397FB1


Valor de Resto al finalizar la ejecución: 10) 10 16) 0x0000000A

2.2.- ¿Cuánto espacio ocupa en memoria la lista con todas las posibles letras del NIF?

La lista con todas las variables ocupa 23 bytes en memoria, más un byte adicional el terminador (Desde la posición 0x10010008 o
10) 268501000 a la posición 0x10010020 o 10) 268501024)

2.3.- ¿La letra C de la lista está almacenada en la dirección 0x10010010? Responde si o no y justifica tu
respuesta.

No, la letra C no está almacenada en la posición 0x10010010. Ya que Lista comienza en la posición 0x10010008, y cada letra de la
lista ocupa un byte, la letra que ocupará esa posición será la W.

2.4.- ¿Podríamos haber utilizado el registro $0 en lugar del $t0 en nuestra solución? Justifica tu respuesta.

No, no se podría haber utilizado ya que el registro $0 ($zero) se utiliza para el valor constante 0, con lo cual no se podría modificar.

2.5.-¿Cuántas pseudoinstrucciones tiene el programa?

El programa contiene 12 pseudoinstrucciones. Estas son: li (6), la (3), sw (1), lw (1) y sb (1).

2.6.- Escoge una pseudoinstrucción cualquiera de las que hay en el programa, y trata de explicar como se
realiza su traducción a instrucciones, analizando las instrucciones resultantes de su traducción.

La pseudoinstrucción “la $a0,tira1” indica que se cargue en el registro $a0 la dirección de memoria de la variable “tira1”. Para
ello, y dado que la instrucción no está soportada por la circuitería, se hace uso de las instrucciones lui $1,4097 y ori $4,$1,32.

La carga se realiza de la siguiente manera:

lui $1,4097 carga en la mitad superior del registro $1 4097 (16) 1001), poniendo la mitad inferior todo a 0. Posteriormente la
instrucción ori $4,$1,32 se encarga de poner en el registro $4 (que es el mismo que $a0), la dirección de memoria de tira1 que es
0x10010020, la cual obtiene realizando una operación OR entre el registro $1 (0x10010000) y 32 (0x00000020).

3.- Captura de la ventana Run I/O tras la ejecución.

4.- Comentarios y opinión personal sobre la práctica.

Aún haciéndose un poco pesado el tener que copiar manualmente cada uno de los valores de los registros y memoria que se solicitan,
y teniendo que tener especial cuidado en no transcribir erróneamente ninguno de los datos, la práctica me ha parecido interesante
para ver y comprender el funcionamiento interno del procesador a la hora de ejecutar los programas que se escriben en lenguajes de
alto nivel. También me despierta interés en saber como sería el proceso completo de lectura del programa almacenado y su carga en
memoria hasta llegar a la ejecución.

Como punto negativo en la práctica la desesperación de los primeros días al no llegar a entender parte del enunciado (“A la vista
del código fuente y las instrucciones en ensamblador, en MARS resulta muy sencillo identificar cuando una operación es una
pseudoinstrucción y como se ha traducido esta en instrucciones de máquina…”) debido a la diferencia entre la versión que uso el
profesorado para la redacción del enunciado y la versión que usamos los alumnos para la realización de la misma.

También podría gustarte