Enunciado(Leganes) - Arcos - Universidad Carlos III de Madrid

Anuncio
Universidad Carlos III de Madrid
Grupo de Arquitectura de Computadores
ESTRUCTURA DE COMPUTADORES
Práctica de Programación en el ensamblador de MIPS.
Ingenierı́a en Informática
ii [email protected]
Curso 2006/2007
Índice
1
2
3
INFORMACIÓN GENERAL
1.1 Información general sobre la práctica . . . .
1.2 Lugar de realización . . . . . . . . . . . .
1.3 Protección frente a copias . . . . . . . . . .
1.4 Tutorı́as y notificaciones . . . . . . . . . .
1.5 Recomendaciones generales . . . . . . . .
1.5.1 Sobre las aulas Linux . . . . . . . .
1.5.2 Sobre el enunciado de las prácticas
.
.
.
.
.
.
.
3
3
3
3
4
4
4
4
.
.
.
.
.
.
.
.
.
5
5
5
6
6
7
7
8
9
11
MATERIAL DE APOYO
3.1 Recursos en Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Material a entregar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Bibliografı́a y Material de Consulta . . . . . . . . . . . . . . . . . . . . . . . .
11
12
12
13
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
PRACTICA DE ENSAMBLADOR
2.1 Objetivo de la práctica . . . . . . . . . . . . . .
2.2 Representación de un polinomio en memoria . .
2.3 Descripción de las funciones . . . . . . . . . . .
2.3.1 Imprimir un polinomio . . . . . . . . . .
2.3.2 Suma de dos polinomios . . . . . . . . .
2.3.3 Regla de Ruffini . . . . . . . . . . . . .
2.3.4 Codificación ASCII de un polinomio . .
2.3.5 Copia de un polinomio utilizando la pila.
2.3.6 Valor numérico de un polinomio (real). .
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1.1
INFORMACIÓN GENERAL
Información general sobre la práctica
Este documento contiene el enunciado de la primera práctica de Estructura de Computadores. La
información adicional relacionada con la entrega (plazos, material, forma de entrega , etc. ) se
describe en el documento Normas de la asignatura y en particular en el apartado Normas de las
prácticas.
1.2
Lugar de realización
El lugar destinado para la realización de las prácticas serán las aulas Linux. Se indica en los
enunciados posibles herramientas para la realización de las prácticas en otras aulas (ó en casa si
dispone de PC) pero no olvide que la práctica ha de funcionar en las aulas Linux.
1.3
Protección frente a copias
Se dedicará especial atención a comprobar que las prácticas no sean iguales (copiadas).
Para evitar problemas de confidencialidad y posibles copias, deberá tenerse especial cuidado
en proteger la propia cuenta de accesos no deseados. Para ello se deben seguir, al menos, las
siguientes pautas:
• En cuanto le abran cuenta, proceda a entrar en la misma para protegerla:
– Ponga inmediatamente una palabra clave de acceso a su cuenta usando el mandato
passwd. Siga las recomendaciones del laboratorio de Informática para elección de una
buena clave.
– Proteja el directorio home de su cuenta contra todo tipo de acceso de cualquier otro
usuario usando el mandato: chmod 700 $HOME.
– Cambie la mascara de creación de ficheros para proteger cualquier fichero que cree en
su cuenta. Para ello añada al final del archivo .bashrc el mandato umask 077.
login: MiCuenta
Password: MiPasswordInicial
sh> passwd
Old password: MiPasswordInicial
New password: MiComplejaPalabraClave
Retype new password: MiComplejaPalabraClave
sh> chmod 0700 $HOME
sh> echo umask 0077 >> $HOME.bashrc.
• No saque listados relativos a su práctica si no puede esperar a recogerlos.
• Si sospecha que le han robado un listado (o disquete) con la solución de alguna práctica,
comunı́quelo al profesor de la misma utilizando correo electrónico (mandato mail) y, MUY
IMPORTANTE, adjunte una copia de la versión perdida.
3
1.4
Tutorı́as y notificaciones
• Los horarios de tutorı́as estarán expuestos en la página Web de la asignatura (y en Aula
Global). Los alumnos deberán respetar los horarios de tutorı́as. No serán atendidos fuera de
dicho horario.
• Las preguntas acerca de la asignatura, la teorı́a o la práctica serán atendidas por correo
electrónico o en el grupo de noticias de la asignatura. Se recomienda a los alumnos utilizar
este método por ser el más efectivo.
• En el caso de consultas sobre prácticas, intente incluir en el mensaje toda la información que
considere relevante para que el profesor pueda responder a la cuestión planteada (extractos
de trazas, ejemplos, etc.).
• Las notificaciones a los alumnos se harán mediante notas en el tablón de anuncios y mediante correo electrónico, por lo que los alumnos deberán estar atentos a dichos medios de
comunicación.
1.5
Recomendaciones generales
Se recomienda conocer la normativa de la asignatura. Para ello ha de consultar la página Web de
la misma (http://www.arcos.inf.uc3m.es/∼ii ec).
1.5.1
Sobre las aulas Linux
• Para obtener información relativa a la apertura de cuentas, consejos para la
elección de la palabra clave, etc. consulte la página Web del laboratorio:
http://www.lab.inf.uc3m.es/
• Ha de realizar una copia de seguridad preventiva periódicamente.
• En caso de duda sobre cualquier mandato o servicio del sistema operativo UNIX utilice el
mandato man, para obtener ayuda (man ¡mandato¿).
• Dispone de varios editores para el desarrollo de la práctica:
– vi: El editor estándar de UNIX.
– emacs: Editor que posee una gran potencia.
• Aunque es posible editar con editor en otro sistema operativo siempre que se guarde como
archivo de tipo texto ASCII y se conviertan los retornos de carro al formato de UNIX.
1.5.2
Sobre el enunciado de las prácticas
Antes de empezar una práctica, lea detalladamente el enunciado de la misma para obtener una idea
clara de qué es concretamente lo que se le pide. En caso de duda, consulte el material recomendado,
con sus compañeros y con los profesores. Ün aspecto muy importante para la correcta realización
de las prácticas es respetar en todo momento el formato de la entrada y salida que se indica.
Para ello se recomienda prestar mucha atención a los ejemplos que se ponen en cada uno de los
enunciados.
4
2
2.1
PRACTICA DE ENSAMBLADOR
Objetivo de la práctica
Esta práctica permite la familiarización del alumno con el lenguaje ensamblador del MIPS R2000,
con el uso de diferentes formatos de representación, con el empleo de funciones y con el manejo
de la memoria del computador.
2.2
Representación de un polinomio en memoria
Un polinomio se representará en memoria como una secuencia de bytes. El primer byte representa
el grado del polinomio (n) y a continuación, se ubicarán todos los coeficientes del polinomio
desde el mayor grado (n) hasta el término independiente. Tanto el grado como los coeficientes
del polinomio, deberán ser números enteros comprendidos entre [-255..+255]. El polinomio se
representa ”ordenado” y ”completo”, es decir, si en el polinomio no existe término para xm ,
con 0 ≤ m ≤ n, se escribirá el coeficiente 0 en dicha posición. Por tanto, el número de bytes
necesarios para almacenar en memoria un polinomio será:
Memoria (bytes)=1 Byte (Grado) + 1 Byte * Grado + 1 Byte (Término
Independiente)
Por ejemplo, dada el siguiente polinomio P(x):
P(x)= 25x4 - 13x3 + 4x - 8
su representación en memoria utilizando el simulador de MIPS, SPIM, serı́a como se muestra
en la figura 1.
Figura 1: Representación en memoria de P(x)
Cuando se pasa un polinomio como argumento de entrada a una función, le pasaremos la
dirección de memoria del primer byte del polinomio (es decir, el byte que contiene el grado del
polinomio). Téngase en cuenta, que esto permite que se pase a una función la dirección de memoria
0 (conocida como puntero nulo).
5
2.3
Descripción de las funciones
El alumno deberá realizar la implementación de una biblioteca de funciones para el manejo de
polinomios. Para ello se deben implementar las siguientes funciones:
1. Imprimir un polinomio.
2. Suma de dos polinomios.
3. División de dos polinomios (Regla de Ruffini).
4. Codificación ASCII de un polinomio.
5. Copia de un polinomio utilizando la pila.
6. Valor numérico de un polinomio (real).
NOTAS:
• Todas las funciones descritas en este cuaderno de prácticas son obligatorias.
• Las funciones implementadas deben tener el nombre indicado en las siguientes secciones,
se ha de tener en cuenta que un nombre en mayúsculas es diferente de otro en minúsculas.
Por ejemplo, los siguientes nombres de funciones corresponden a subprogramas diferentes:
plxImprimir, plximprimir, PlxImprimir, etc.
• Han de respetarse los formatos de salida para las funciones a desarrollar.
• También han de respetarse los parámetros y valores devueltos no pudiendo usarse otros
parámetros y resultados de los expuestos.
2.3.1
Imprimir un polinomio
Se deberá implementar la función plxImprimir. Toma un único operando:
• En el registro $a0 se pasará la dirección de memoria del polinomio a imprimir.
La función plxImprimir recorre los coeficientes del polinomio cuya dirección es recibida como argumento para imprimirlos en pantalla. Por ejemplo, dada la dirección de memoria
0X10010060 correspondiente a un polinomio (ver Figura 1), la función plxImprimir imprimirá en
pantalla el polinomio siguiente:
P(x)= 25x4 - 13x3 + 0x2 + 4x - 8
La salida por pantalla correspondiente al polinomio anterior deberá ser la siguiente:
P(x)= 25x4 - 13x3 + 0x2 + 4x1 - 8
Si la dirección de memoria del polinomio es el puntero nulo, la impresión no se realiza y
se devuelve en $v0 el valor -1. En caso de cualquier otro error (por ejemplo, si el polinomio es
vacı́o, es decir, el grado es igual a 0) se devolverá igualmente el valor -1 en el registro $v0. Por
el contrario, si el polinomio se puede imprimir correctamente, entonces la función devolverá en el
registro $v0 el valor 1.
6
2.3.2
Suma de dos polinomios
Se deberá implementar la función plxSuma. Toma tres operandos:
• En el registro $a0 se pasará la dirección de memoria del primer polinomio a sumar.
• En el registro $a1 se pasará la dirección de memoria del segundo polinomio a sumar.
• En el registro $a2 se pasará la dirección de la memoria reservada estáticamente para almacenar el polinomio suma.
La función plxSuma calcula el polinomio suma S(x) de los dos polinomios recibidos como
argumento. Dados dos polinomios P(x) Y Q(x) la suma de ambos es otro polinomio S(x) cuyos
elementos se obtienen sumando los coeficientes de grado n (0 ≤ n ≤ grado) del polinomio P(x)
con el coeficiente correspondiente del polinomio Q(x). El grado del polinomio S(x) será el mayor
de los grados de P(x) y Q(x). Como ejemplo se muestra el siguiente:
P (x) =
25x4 − 13x3 + 0x2 + 4x − 8
Q(x) = −12x6 + 0x5 + 0x4 + 0x3 + 5x2 + 0x + 1
S(x) = −12x6 + 0x5 + 25x4 − 13x3 + 5x2 + 4x − 7
Si la dirección de memoria de cualquiera de los dos polinomios recibidos como argumento es
el puntero nulo, no se ejecutará la función y se devolverá en el registro $v0 el valor -1. Si alguno
de los polinomios es vacı́o, igualmente se devolverá en el registro $v0 el valor -1. En caso de que
la suma se pueda realizar correctamente se devolverá en el registro $v0 el valor de éxito 0.
NOTAS:
• Reserva de memoria en el Segmento de Datos: Se deberá reservar estáticamente la memoria utilizada para almacenar el polinomio resultado, cuya dirección deberá pasarse como
argumento a la función en el registro $a2.
• Para evitar desbordamiento al realizar la suma, se utilizará una palabra de memoria (32
bits) para almacenar cada uno de los resultados de la suma (grado, coeficientes y término
independiente).
2.3.3
Regla de Ruffini
Se deberá implementar la función plxRuffini. Toma tres operandos:
• En el registro $a0 se pasará la dirección de memoria del polinomio dividendo D(x).
• En el registro $a1 se pasará un número entero ”a” comprendido entre [-255..+255]. Por
tanto, el divisor d(x) se expresará de la forma x+a.
7
• En el registro $a2 se pasará la dirección de la memoria reservada estáticamente para almacenar el polinomio cociente.
La función plxRuffini divide el polinomio dividendo D(x) entre el polinomio divisor d(x)
aplicando la regla de Ruffini. Por ejemplo, dado el polinomio D(x) = 25x4 - 13x3 + 0x2
+ 4x - 8 y el valor a = 3 (d(x) = x - 3), la regla de Ruffini se aplicará de la siguiente manera:
25
13 0 4
-8
-75 -264 792 2288
25 88 -264 796 -2280
donde el polinomio cociente C(x) es 25x3 + 88x2 + -264x1 + 796 y el resto R(x) es
-2280.
Si la dirección de memoria del polinomio recibido como argumento es el puntero nulo, no se
ejecutará la función y se devolverá en el registro $v0 el valor -1. En caso de cualquier otro error
(por ejemplo, grado del polinomio 0 o negativo) se devolverá igualmente el valor -1 en el registro
$v0. En caso de que no exista ningún error se devolverá en el registro $v0 el código de éxito 0 y
en el registro $v1 el resto de la división R(x).
-3
NOTAS:
• Reserva de memoria en el Segmento de Datos: Se deberá reservar estáticamente la memoria utilizada para almacenar el polinomio resultado, cuya dirección deberá pasarse como
argumento a la función en el registro $a2.
• Para evitar desbordamiento al realizar la suma, se utilizará una palabra de memoria (32
bits) para almacenar cada uno de los resultados de la suma (grado, coeficientes y término
independiente).
2.3.4
Codificación ASCII de un polinomio
Se deberá implementar la función plxASCII. Toma dos operandos:
• En el registro $a0 se pasará la dirección de memoria del polinomio para el que se calculará la
cadena ASCII.
• En el registro $a1 se pasará la dirección de la memoria reservada estáticamente para almacenar la cadena ASCII resultante.
La función plxASCII toma el polinomio recibido como argumento y devuelve una cadena de
caracteres ASCII que se creará de la siguiente manera:
1. Se agrupan los elementos del polinomio de dos en dos desde el elemento grado hasta el
elemento término independiente.
2. Se lee un grupo de dos bytes (utilizando para ello el tipo de datos half ).
3. Se calcula la operación módulo 127 sobre el resultado calculado en el paso anterior (resto
de 127).
8
4. Se escribe el resultado en la cadena ASCII resultante.
5. Se vuelve al punto 2.
6. Por último, se escribe el carácter terminador de cadena al final de la cadena ASCII resultado.
Por ejemplo, dada la dirección de memoria 0X10010060 correspondiente a un polinomio (ver
Figura 1), la función plxAscii deberá calcular la siguiente cadena:
Cadena ASCII de P(x)= 25x4 - 13x3 + 0x2 + 4x - 8 = 6tw
Si la dirección de memoria del polinomio recibido como argumento es el puntero nulo, no se
ejecutará la función y se devolverá en el registro $v0 el valor -1. En caso de cualquier otro error
(por ejemplo, grado del polinomio 0 o negativo) se devolverá igualmente el valor -1 en el registro
$v0. En caso de que no exista ningún error se devolverá en el registro $v0 el valor de éxito 0.
NOTAS:
• Para el desarrollo de las funciones que se describen a continuación es necesario que el primer
byte del polinomio esté alineado en memoria (es decir, en una posición de memoria que sea
múltiplo de la longitud de la palabra en bytes).
• Reserva de memoria en el Segmento de Datos: Se deberá reservar estáticamente la memoria
utilizada para almacenar la cadena ASCII resultante, cuya dirección deberá pasarse como
argumento a la función en el registro $a1.
• Téngase en cuenta la cantidad de memoria (en bytes) necesaria para albergar una cadena
ASCII y el carácter delimitador de cadenas.
2.3.5
Copia de un polinomio utilizando la pila.
Se deberá implementar la función plxCopiaPila. Toma tres operandos:
• En el registro $a0 se pasará la dirección de memoria del polinomio origen que se desea
copiar.
• En el registro $a1 se pasará la dirección de la memoria reservada estáticamente para almacenar la copia del polinomio origen.
• En el registro $a2 se pasará el grado del polinomio origen a copiar.
La función plxCopiaPila copia de manera recursiva el polinomio recibido como argumento
en $a0, en la dirección de memoria apuntada por $a1. Para realizar esta copia se llamará recursivamente a la función, utilizando para ello el marco de pila de la siguiente manera:
• La función plxCopiaPila deberá copiar completamente el polinomio recibido como argumento en $a0 en el polinomio recibido como argumento en $a1 desde el último elemento
(término independiente) hasta el primero (grado del polinomio) utilizando llamadas recursivas.
9
• La función plxCopiaPila invocada desde el programa principal recibe como argumentos los
registros $a0, $a1 y $a2 explicados anteriormente.
• Las llamadas recursivas a la función plxCopiaPila obtendrán los siguientes cuatro argumentos desde la pila:
1. $ra return address. Dirección de retorno para cada llamada recursiva.
2. $fp frame stack pointer. Dirección del marco de pila para cada llamada recursiva.
3. $a0. En cada llamada recursiva, el registro $a0 contendrá la dirección de memoria que
apunta al elemento a copiar del polinomio origen.
4. $a1. En cada llamada recursiva, el registro $a1 contendrá la dirección de memoria
donde se almacenará el elemento a copiar en el polinomio destino.
Figura 2: Imagen de la pila antes de devolver las llamadas recursivas
Si la dirección de memoria del polinomio recibido como argumento en $a0 es el puntero nulo,
no se ejecutará la función y se devolverá en el registro $v0 el valor -1. En caso de cualquier otro
error (por ejemplo, grado del polinomio 0 o negativo) se devolverá igualmente el valor -1 en el
registro $v0. En caso de que no exista ningún error se devolverá en el registro $v0 el valor 0 y en
el registro $v1 el valor real del polinomio.
NOTAS:
• Reserva de memoria en el Segmento de Datos: Se deberá reservar estáticamente la memoria utilizada para almacenar el polinomio resultado, cuya dirección deberá pasarse como
argumento a la función en el registro $a1.
10
2.3.6
Valor numérico de un polinomio (real).
Se deberá implementar la función plxValorReal. Toma dos operandos:
• En el registro $a0 se pasará la dirección de memoria del polinomio P(x) para el que se
calculará su valor numérico real.
• En el registro $a1 se pasará un número real que representa el valor de la variable x.
La función plxValorReal calcula el valor real del polinomio recibido como argumento en $a0,
al sustituir x por el valor real recibido en $a1. Considérese el siguiente ejemplo de valor real de un
polinomio:
P(x)= 25x4 - 13x3 + 0x2 + 4x - 8
P(2.3)= 25 ∗ 2,34 - 13 ∗ 2,33 + 4 * 2.3 - 8 = 542.63153076
Si la dirección de memoria del polinomio recibido como argumento es el puntero nulo, no
se ejecutará la función y se devolverá en el registro $v0 el valor -1. En caso de cualquier otro
error (por ejemplo, grado del polinomio 0 o negativo) se devolverá igualmente el valor -1 en el
registro $v0. En caso de que no exista ningún error se devolverá en el registro $v0 el valor 0 y en
el registro $v1 el valor real del polinomio.
3
MATERIAL DE APOYO
A continuación se describe la información de apoyo disponible. Para la realización de esta práctica
se dispone del siguiente software y documentación:
1. Simulador SPIM. Simulador del entorno de trabajo de la arquitectura MIPS. Se dispone de
diferentes programas para varias plataformas (Windows, MS-DOS y Linux). Las distintas
versiones del simulador pueden descargarse desde la página:
http://www.cs.wisc.edu/∼larus/spim.html
NOTAS:
• La versión del simulador SPIM para Linux, xspim, está instalado en las aulas Linux
donde se desarrollarán las prácticas de las asignatura.
• La versión del simulador SPIM para Windows, PCSpim, puede ser utilizada para la
realización de la práctica en un entorno diferente al de las aulas Linux.
• No obstante, independientemente de cuál sea el entorno de desarrollo, la práctica debe
funcionar correctamente en las aulas Linux de la escuela (el alumno debe asegurarse
de que su práctica funciona correctamente en ese entorno).
2. Documentación.
En
la
página
web
del
simulador
SPIM
(http://www.cs.wisc.edu/∼larus/spim.html) se puede conseguir un manual sobre la
utilización del simulador. Hay varias páginas web con información sobre el simulador
SPIM y los microprocesadores MIPS.
11
3.1
Recursos en Internet
El alumno también dispone de la siguiente documentación en Internet:
1. Página web de la asignatura:
http://www.arcos.inf.uc3m.es/∼ii ec
En esta página web el alumno podrá consultar información acerca de las prácticas de la
asignatura.
2. Foro de discusión relacionado con las prácticas de la asignatura donde el alumno podrá exponer cualquier comentario, duda o pregunta. La web disponible para el foro de discusión
es:
http://apps.lab.inf.uc3m.es/foro/
NOTAS:
• Las news no tienen moderador. Se deja al criterio de cada alumno el buen uso que se
haga del grupo de noticias.
• Uso preferente para consultar dudas de prácticas.
• El alumno tiene que registrarse en el foro para poder insertar preguntas o comentarios,
si bien no es necesario registrarse para leer los comentarios existentes en el foro.
3.2
Material a entregar
La realización de la práctica consiste en la implementación de las diversas funciones indicadas.
Además, deberán entregarse los siguientes ficheros:
• memoria.pdf
En ella se deben comentar los aspectos del desarrollo de su práctica que considere más
relevantes. Asimismo, puede exponer los comentarios personales que considere oportuno.
Además deberá cumplir los siguientes requisitos:
– Presentar una estructura lógica en sus contenidos.
– Estar convenientemente formateada, para facilitar su lectura.
– Describir con claridad y en profundidad los puntos recogidos en este cuaderno de
prácticas, ası́ como los que decidan incluir como complemento.
– Incluir las pruebas realizadas.
– Incluir los comentarios personales que considere oportunos.
– NO incluir el código de las funciones.
12
NOTA: No descuide la calidad de la memoria de su práctica. Aprobar la memoria es tan
imprescindible para aprobar la práctica, como el correcto funcionamiento de la misma. Si
al evaluarse la memoria de su práctica, se considera que no alcanza el mı́nimo admisible, su
práctica estará suspensa.
La memoria debe incluir, como mı́nimo, los siguientes puntos:
– Índice del documento.
– Autores.
– Descripción del código, incluyendo descripción de los convenios y notación usados.
Por cada función se ha de incluir, al menos:
∗ Diseño de cada función (pseudocódigo, diagrama, etc.).
∗ Aspectos relativos a la construcción de cada función.
∗ Diseño de casos de prueba y programas de prueba. Se ha de incluir también los
valores que se esperan obtener al ejecutar la función con cada caso de prueba.
– Conclusiones del alumno.
– Descripción de las tareas realizadas y tiempo dedicado a cada tarea.
• plx.s
Código fuente en ensamblador de MIPS de TODAS las funciones descritas en la sección 2.
NOTA: Los ficheros donde se implementen las funciones SOLAMENTE deben contener
funciones. No se deberá incluir las directivas .text y .data, ni datos de prueba. Tampoco
deben de contener una función ”main”, aunque pueden existir otras funciones auxiliares
que necesite el usuario.
Las fechas de entrega de la práctica pueden consultarse en la página web:
http://www.arcos.inf.uc3m.es/∼ii ec/practicas/intro.html
3.3
Bibliografı́a y Material de Consulta
• Estructura y diseño de computadores : interficie, circuiteria, programación, Patterson, D.A.
y Hennessy, J.L. Vol. 3. Ed.: Reverté, 2000.
• Fundamentos de los Computadores Pedro de Miguel Anasagasti. Quinta edición, Editorial
Paraninfo, 1996.
• Organización y Arquitectura de Computadores. William Stallings Prentice-Hall, 2000.
• Organización de Computadoras: Un enfoque estructurado. Andrew S. Tanenbaum Prentice
Hall, 1992.
13
Descargar