Informe - Escuela de Ingeniería Eléctrica

Anuncio
Universidad de Costa Rica
Escuela de Ingeniería Eléctrica
Facultad de Ingeniería
Generación del material para el curso IE0503
Por:
María Teresa Fuentes Chacón
Ciudad Universitaria Rodrigo Facio
Agosto, 2009
Generación del material para el curso IE0503
Por:
María Teresa Fuentes Chacón
Sometido a la Escuela de Ingeniería Eléctrica
de la Facultad de Ingeniería
de la Universidad de Costa Rica
como requisito parcial para optar por el grado de:
BACHILLER EN INGENIERÍA ELÉCTRICA
Aprobado por el Tribunal:
Ing. Roberto Rodríguez Rodríguez.
Profesor guía
Ing. Randolph Steinvorth Fdez.
Profesor lector
Ing. Gerardo Castro Jiménez.
Profesor lector
Dedicatoria
A mi padre José Fuentes cuyo ejemplo me ha
guiado aún después de su muerte.
A mi madre Carmen Chacón por sacricarse día
a día y brindarme todo lo necesario para mi
estudio, asi como mi hermano José Alberto.
A mi novio Edgar por su apoyo incondicional
en todo momento y a mis compañeros de carrera
que se convirtieron en grandes amigos y amigas
con los que viví alegrías y tistezas durante
todos estos años.
iii
Reconocimientos
A los profesores Dr. Randolph Steinvorth e Ing. Marco Vásquez. que realizaron la primera
descripción de la CPUCR y la documentación con conceptos aplicables a cualquier computador.
A todos los estudiantes que trabajaron previamente en las distintas descripciones de la
CPUCR.
Al profesor Dr. Lochi Yu por el material creado en el 2003 y que es mostrado con algunas
actualizaciones en el capítulo 1 asi como algunos laboratorios del capítulo 5.
iv
Índice General
Índice General
v
Índice de guras
vi
Índice de tablas
vii
1. Introducción
1
2. Generación del material para el Curso IE0503.
3
3. LATEX
5
1.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.1. Objetivos especícos . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Metodología . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1. La CPUCR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1. Importancia de la CPUCR . . . . . . . . . . . . . . . . . . . . . . . .
3.1. Guía rápida para el uso de LATEX
3.1.1. Índices . . . . . . . . . . .
3.1.2. Figuras entre texto . . . .
3.1.3. Figuras fuera de texto . .
3.1.4. Tablas simples . . . . . . .
3.1.5. Tablas multicolumna . . .
3.1.6. Tablas multila . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4. Conclusiones y recomendaciones
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2. Recomendaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1
2
3
3
5
6
6
7
7
8
8
9
9
10
Bibliografía
11
Anexos
15
A. Material del curso IE0503
15
B. Plantilla para proyectos
91
v
Índice de guras
3.1. Logo EIE entre texto a la izquierda. . . . . . . . . . . . . . . . . . . . . . . .
3.2. Logo EIE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
vi
6
7
Índice de tablas
3.1. Descripcion de la tabla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. Descripción de la tabla multicolumna . . . . . . . . . . . . . . . . . . . . . .
3.3. Descripción de la tabla multila . . . . . . . . . . . . . . . . . . . . . . . . .
vii
7
8
8
Resumen
El presente proyecto se basa en la necesidad de actualizar la documentación existente para
el curso de Estructuras de Computadoras Digitales I, utilizando la herrramienta de edición
tipográca LATEX
El documento inicia con una reseña de la historia de las computadoras, seguido de una
introducción a la arquitectura de un computador y la descripcion del primer microprocesador
completamente diseñado en Costa Rica: la CPUCR. Luego en base a la CPUCR se ilustra la
programación de computadores en lenguaje ensamblador y el diseño de programas.
Finalmente se introducen los temas de jerarquías de memoria, algunos tipos de almacenamiento y sistemas de archivos para dar paso a una serie de ejercicios de laboratorio
resueltos para facilitar la comprensión de la materia por parte del estudiante.
viii
Capítulo 1
Introducción
Años atrás, en la Escuela de Ingeniería Eléctrica de la Universidad de Costa Rica se inició
el desarrollo de un CPU con nes didácticos, donde se exponían aspectos básicos de arquitectura y programación en ensamblador, con el paso del tiempo se han propuesto versiones
mejoradas y métodos de sintetización innovadores.
Contar con material actualizado y organizado ha sido una fuerte herramienta en las aulas
de escuelas, colegios y universidades; el curso de Estructuras de Computadores Digitales I
no es la excepción y la necesidad de actualizar la documentación existente se incrementaba
semestre tras semestre. Es por eso que se decidió actualizar el material del curso y preveer
futuras modicaciones utilizando el editor de tipografías LATEX que a su vez es un software
libre bajo licencia LPPL.
1.1.
Ob jetivo
Generar el material para el Curso IE0503.
1.1.1. Objetivos especícos
1. Aprender el correcto uso del lenguaje LATEX y utilizar este para la generación de toda
la documentación del proyecto.
2. Ordenar mediante parámetros de crecimiento arquitectónico las modicaciones que se
han realizado a la CPUCR a lo largo de la historia.
3. Generar el material para el curso IE0503 que incluya de una manera ordenada el crecimiento arquitectónico que tenido la CPUCR.
4. Desarrollar un conjunto de prácticas de laboratorio y ejemplos ilustrativos para desarrollar en el curso.
1
5. Incluir en el material temas referentes a arquitectura actual de microprocesadores,
puertos, sistemas de archivos, tecnología y organización de memorias y desarrollo de
sistemas secuenciales en lenguajes de descripción de hardware.
1.2.
Metodología
La elaboración del material para el curso IE0503 fue un proceso que constó de tres partes.
La primera, consistió el aprendizaje del lenguaje LATEX y la elaboración de una plantilla sobre
la cual se trabajó para generar el material.
En la segunda parte, se trabajó en la recopilación de información para actualizar datos,
asi como las modicaciones que ha sufrido la CPUCR.
Finalmente se logró unir una serie de ejercicios con su respectiva solución para que el
estudiante tenga una visión más amplia de como enfrentar problemas comunes propios del
tema del curso IE0503.
2
Capítulo 2
Generación del material para el Curso
IE0503.
2.1.
La CPUCR
2.1.1. Importancia de la CPUCR
La CPUCR se puede considerar como uno de los pilares centrales para la enseñanza en el
área de las estructuras de computadoras en la Escuela de Ingeniería Eléctrica de la Universidad de Costa Rica.
Cuenta con la particularidad de ser el primer microprocesador diseñado totalmente en
Costa Rica. Esto sin lugar a duda resulta ser un gran aporte académico, permitiendo el desarrollo didáctico mediante herramientas propias que pueden ser modicas de acuerdo a las
necesidades que se presenten y de esta forma no depender de trabajos de otras universidades
o incluso empresas.
Como el diseño arquitectónico de la CPUCR es muy simple, lo hace ideal para que los
estudiantes aprendan la estructura básica de un microprocesador y que de esta forma logren
comprender mejor otros circuitos más avanzados posteriormente.
La creación de este microprocesador ha producido el desarrollo de lenguajes de ensamblador para el mismo. El SIS es el primer simulador para la versión de la CPUCR de 6 bits y
es una herramienta muy utilizada en el curso de estructuras de computadoras para estudiar
su comportamiento. Otro aporte importante es que ayuda a entender cómo funcionan los
programas de compilación y cómo éstos son capaces de traducir de instrucciones simples a
lenguaje binario.
Se puede considerar que el mayor aporte que ha dejado la CPUCR es el haber abierto la
puerta para la creación de nuevos y diversos proyectos de investigación y desarrollo basados
en ella, llevando a un crecimiento de su diseño para tratar de que cada vez sea más robusto.
La versión de 8 bits conocida como CPUCR1 es resultado de un proyecto de graduación y
en estos momentos se trata de concretar una versión de 32 bits. Se pretenden así mismo
3
agregar funcionalidades que presentan los microprocesadores del mercado como por ejemplo
los multiregistros y los pipeline, y en una visión más a futuro se desea que el microprocesador
corra un sistema operativo propio basado en software libre.
Ya se comenzó a trabajar en nuevos compiladores que utilizan el diseño en sí de la CPUCR para simular los programas compilados, de esta forma se aprovecha más el trabajo de los
diseños realizados tanto en el curso como en los distintos proyectos de graduación.
Adicionalmente, una práctica muy empleada por grandes compañías es la validación de
diseños. Otro proyecto que ha surgido a raíz de la CPUCR es la implementación de un método de validación para la versión de 32 bits, el proyecto dio grandes frutos pero debido a que
este diseño no se ha consolidado completamente necesita ser completado en futuros proyectos.
Todos estos avances conllevan a otros más signicativos, esa ha sido la mecánica que ha
llevado al hombre a lograr cosas inimaginables, en el caso de la CPUCR no es la excepción,
porque quien lo podrá saber, es posible que en algunos años este documento se esté leyendo
un computador cuya unidad central sea una versión de la CPUCR.
4
Capítulo 3
LATEX
LATEX es un lenguaje de composición y producción tipográca, muy utilizado para la realización de trabajos técnicos, académicos y editoriales. Creado en 1984 por Leslie Lamport,
quien se basó en el código del programa conocido como TEX de Donald Knuth.
A diferencia de un procesador de texto común, un documento escrito en LATEX se basa
en la utilización de macros, los cuales son instrucciones que realizan todas las acciones que
le dan forma al cuerpo del trabajo. Existen instrucciones para enumerar las páginas, resaltar
texto, insertar guras, hacer diagramas, en n casi cualquier cosa que se pueda imaginar.
Para lograr esta gran diversidad de funciones se utilizan los llamados paquetes, que no son
más que extensiones al código original y que implementan nuevas funcionalidades.
La razón del por qué este lenguaje se ha hecho tan popular es que da un resultado impresionante en la calidad de los trabajos, cosa que no es posible lograr de la misma forma con
un procesador de texto.
Por otra parte libera al usuario de ciertas preocupaciones triviales a la hora de hacer
un documento escrito, por ejemplo los distintivos tipos de numeración en un proyecto de
graduación, la utilización de referencias a bibliografías, la numeración y titulado de guras
asi como de tablas, mediante el uso de instrucciones o comandos que el compilador de LATEX
interpreta haciendo todo el trabajo pesado.
Esta gran cantidad de funcionalidades y paquetes, hace que el aprendizaje de LATEX pueda
complicarse en gran forma. Sin embargo, todos los usuarios que lo ha utilizado concuerdan
en que una vez que se haya dominado los elementos básicos, se convierte en una poderosa
herramienta.
3.1.
ATEX
Guía rápida para el uso de L
Actualmente si buscamos en internet existen múltiples guias para el uso de LATEX , aca
se hará referencia a los detalles más relevantes para el uso de la plantilla elaborada.
5
Para realizar comentarios en LATEX se inicia la línea con el signo de porcentaje: %.
Si se desean agregar capítulos adicionales deben ser llamados desde el archivo plantilla.tex,
por ejemplo:
\include{5/Cap5}
Cabe resaltar que hay que crear el archivo ∗.tex que se incluirá e ingresar la ruta en
donde se encuentra el archivo sin la extensión: .tex.
3.1.1. Índices
Para introducir indices se utiliza el siguiente código:
% Indice General
\newpage{}
\begin{IndiceGeneral}
\tableofcontents
\end{IndiceGeneral}
% Indice de figuras
\newpage{}
\begin{IndiceDeFiguras}
\listoffigures
\end{IndiceDeFiguras}
% Índice de tablas
\newpage{}
\begin{IndiceDeTablas}
\listoftables
\end{IndiceDeTablas}
3.1.2. Figuras entre texto
Si se desea insertar guras es recomendable que estas estén en formato .jpg guardadas en
un carpeta cuya ruta se indicará para que LATEX pueda accesarla e insertarla en el documento
después de compilar.
Se utiliza el paquete floatflt.
\begin{floatingfigure}[r]{4.5cm}
\begin{center}
\includegraphics[scale=0.8]{./3/FigCap3/logoEIE.jpg}
\caption{Logo EIE entre texto a la izquierda.}
\label{fig:logoEIE}
\end{center}
\end{floatingfigure}
Figura 3.1: Logo EIE entre texto a la izquierda.
En el ejemplo anterior la r equivale a right o derecha por lo que la gura se introduce a la
derecha del texto, si la cambiamos por l de left o izquierda la gura se introducirá en el lado
contrario. Además, se puede indicar el espacio entre texto que de desea para la gura, para
el ejemplo dado se ha especicado 4,5 centímetros así como la escala de la gura respecto a
su tamaño original.
6
3.1.3. Figuras fuera de texto
De la misma manera que para guras entre texto, se utiliza el siguiente código para
insertar guras:
\begin{figure}[H]
\begin{center}
\includegraphics[width=0.3\textwidth]{./3/FigCap3/logoEIE.jpg}
\caption{Logo EIE}
\label{fig:logoEIE} %\ref{fig:logoEIE}
\end{center}
\end{figure}
Figura 3.2: Logo EIE
3.1.4. Tablas simples
Una tabla simple se puede elaborar mediante el siguiente código:
\begin{table}
\begin{center}
\begin{tabular}{|c|r|l|} \hline
Titulo1 & Titulo2 & Titulo3 \\ \hline
val1 & val2 & val3\\
val4 & val5 & val6 \\ \hline
\end{tabular}
\caption{Descripcion de la tabla}
\end{center}
\end{table}
Titulo1 Titulo2 Titulo3
val1
val2 val3
val4
val5 val6
Tabla 3.1: Descripcion de la tabla
Nótese que si se utiliza un pipe (|) se esta indicando que se trace la línea vertical. En
el ejemplo se utiliza: |c|r|l| lo cual indica que se trazaran las líneas externas e internas
verticales de la tabla que que el contenido será alineado al centro c, a la derecha r y a la
izquierda l. Cuando se desea trazar una línea horizontal es necesario escribir el comando
\hline
7
3.1.5. Tablas multicolumna
Una tabla que tenga varias columnas unidas se puede generar mediante el código mostrado a continuación y mediante el comando:
\multicolumn{cantidad de celdas}{alineación}{Contenido de las celdas}
\begin{table}
\begin{center}
\begin{tabular}{|l|c|r|}
\hline
\multicolumn{2}{|c|}{Une celdas 11 y 12} & Celda 13\\
\hline
Celda 21 & Celda 22 & Celda 23 \\
\hline
\multicolumn{3}{|c|}{Une celdas 31, 32 y 33} \\
\hline
\end{tabular}
\caption{Descripción de la tabla multicolumna}
\end{center}
\end{table}
Une celdas 11 y 12 Celda 13
Celda 21 Celda 22 Celda 23
Une celdas 31, 32 y 33
Tabla 3.2: Descripción de la tabla multicolumna
3.1.6. Tablas multila
Adicionalmente, algunas ocasiones es necesario unir diferentes las en una tabla, esto se logra mediante el comando: \multirow{cantidad de celdas}{tamaño}{Contenido de las celdas}
\begin{table}[H]
\begin{center}
\begin{tabular}{|l|c|r|}
\hline
\multirow{2}{*}{Celdas 11 y 21 unidas} & Celda 12 & \multirow{3}{3cm}{Celdas 13, 23 y 33} \\
\cline{2-2}
& \multirow{2}{*}{Celdas 22 y 32 unidas} & \\
\cline{1-1}
Celda 31 & & \\
\hline
\end{tabular}
\caption{Descripción de la tabla multifila}
\end{center}
\end{table}
Celdas 11 y 21 unidas
Celda 31
Celda 12
Celdas 13, 23 y
Celdas 22 y 32 unidas 33 unidas
Tabla 3.3: Descripción de la tabla multila
8
Capítulo 4
Conclusiones y recomendaciones
A continuación se enumeran las principales conclusiones obtenidas con la elaboración de
este documento:
4.1.
Conclusiones
I. La implementación del trabajo escrito haciendo uso del lenguaje LATEX fue exitosa,
a pesar de que la curva de aprendizaje para la manipulación de la herramienta y la
edición del material para el curso de Estructuras de Computadores Digitales I fue bastante lenta debido a la complejidad de LATEX para trabajar en detalles como guras,
tablas y variedad de símbolos, sin embargo, es muy utilizado en la edición de artículos
académicos y técnicos así como tesis, dado que la calidad tipográca que proporciona.
En adición cabe resaltar que se ha facilitado la posibilidad de futuros cambios en el
material del curso.
II. No fue posible tratar los temas correspondientes a la CPUCR2 y la CPUCR 3, la
primera debido a que la documentación está extraviada por lo que no se encuentra
disponible en la biblioteca, y para el caso de la CPUCR3 esta se encuentra aún bajo
desarrollo, por lo que su diseño y documentación están incompletos. Sin embargo se
pudo dar a conocer las diferencias entre la CPUCR0 y la CPUCR1 donde destaca el
paso de seis a ocho bits en el bus de datos, además el incremento de doce a dieciséis bits
en el bus de direcciones y la reducción de doce a once líneas de control al eliminarse la
señal WAIT por limitaciones en silicio.
III. Se logró recopilar y presentar la solución de diversas prácticas para el curso de Estructuras de Computadores Digitales I, donde se tratan tópicos correspondientes a
programación en ensamblador y análisis de mapas de memoria para la CPUCR.
9
4.2.
Recomendaciones
1. Se recomienda el uso de la herramienta para la elaboración de documentos y trabajos
nales.
2. Localizar la documentación perdida de la CPUCR multiregistro (CPUCR2) dado que
es un paso relevante en la historia de la evolución de la CPUCR.
3. Unir al documento del curso la documentación de la CPUCR3 en cuanto se tenga una
descripción completa.
10
Bibliografía
[1] Hamacher, C. - Organización de computadores, quinta edición, McGraw Hill, España,
2003.
[2] Hennessy, J. - Organización y diseño de computadores, segunda edicion, McGraw Hill,
España, 1995.
[3] Parhami, B. - Arquitectura de computadoras, primera edición, McGraw Hill, India, 2007.
[4] Stallings, W. - Organización y arquitectura de computadores, sétima edición, Prentice
Hall, España,2007.
[5] Insertar imágenes en Latex, http://valar.wordpress.com/2004/01/30/ imagenes-enlatex/.
[6] Manual
de
LaTeX,
Insertar
guras
en
un
documento,
http://es.wikibooks.org/wiki/Manual_ de_ LaTeX/Insertar_ guras_ en_ un_
documento.
[7] Manual sobre LaTeX, http://foro.simur.org/viewtopic.php?f=26t=166.
[8] Tips para usar Latex, http://www.fmat.cl/index.php?showtopic=6460.
[9] Insertar
mi
imagen
con
latex
donde
yo
quiera,
http://ajayu.memi.umss.edu.bo/latexman/weblog/insertar-mi-imagen-latex-dondeyo-quiera.
[10] Lopez, J.M. Grácos y color en LaTeX, http://metodos.fam.cie.uva.es/ latex/gracosycolor.pdf.
11
[11] Matthias Andreas. A Demonstration of the pdfpages Package, http://wwwhep2.fzu.cz/tex/texmf-dist/doc/latex/pdfpages/pdf-ex.pdf.
[12] Wikipedia, 64 bits, http://es.wikipedia.org/wiki/64_bits.
[13] Hurtado, Carlos. El n de la era de los MHz y el inicio de la era MultiCore,http://blogs.intel.com/latininsights/2007/07/el_ n_ de_ la_ era_ de_
los_ mhz_ y.php.
[14] Corporate Timeline,http://www.intel.com/museum/corporatetimeline/.
[15] Timeline of computing 2000-2009, http://en.wikipedia.org/wiki/Timeline_ of_ computing_ 2000-2009.
[16] Apple Product Timeline Map,http://www.scribd.com/doc/176946/Apple-ProductTimeline-Map.
[17] AMD's
History
of
us/assets/AMD_Evolution.pdf.
innovation,
http://breakfree.amd.com/en-
[18] Intel Core i7, http://en.wikipedia.org/wiki/Intel_Core_3.
[19] García, J.M. Informática para matemáticos, http://www.vc.ehu.es/campus/centros/farmacia/deptos-f/depme/temporal/infomate/infomate.htm.
[20] Rodríguez, Noelia. Conceptos avanzados de LaTeX,http://www.elrincondelprogramador.com/
default.asp?pag=articulos/leer.aspid=11.
[21] Pakin, Scott. The comprehensive LaTeX Symbol list,http://www.ctan.org/texarchive/info/symbols/comprehensive/symbols-a4.pdf.
[22] Botana,Raúl.
Tablas
tos/tablas/tablas.pdf.
en
Latex,
http://www.lug..uba.ar/
documen-
[23] Historia de los microprocesadores, http://iteso.mx/ miguelbaz/cursos/ arqcomp-200508/presentaciones/cpuhistory.pdf.
12
[24] http://www.icknowledge.com/trends/4004b.jpg.
[25] http://www.icknowledge.com/trends/8080B.jpg.
[26] http://poshiitabella.les.wordpress.com/2007/10/apple.jpg.
[27] http://www.cpu-world.com/CPUs/8086/die/L_Fujitsu-MBL8086-2.jpg.
[28] http://www.icknowledge.com/trends/8086_8088B1.jpg.
[29] http://www.cpu-galaxy.at/CPU/Intel %20CPU/8088-80286/Intel %2080286 %20sectionDateien/286 %20Core.jpg.
[30] http://www.cpu-world.com/CPUs/80386/die/L_Intel-A80386DX-25.jpg.
[31] http://i32.tinypic.com/2cd7sds.jpg.
[32] http://i32.tinypic.com/2lmnkh4.jpg.
[33] http://i32.tinypic.com/2lmnkh4.jpg.
[34] http://i26.tinypic.com/b5jo1x.jpg.
[35] http://i29.tinypic.com/mwuvm9.jpg.
[36] http://i26.tinypic.com/2vinh2r.jpg.
[37] http://i25.tinypic.com/29wweb4.jpg.
[38] http://muycomputer.com/les/264-10358-FOTO/Intel %20Xeon %208-core %202.jpg.
[39] http://i30.tinypic.com/2z3t0gg.jpg.
13
[40] http://i32.tinypic.com/ibmgk3.jpg.
[41] http://i25.tinypic.com/15f6sd5.jpg.
14
Anexo A
Material del curso IE0503
Material del curso Estructuras de computadores digitales generado con LATEX
!"#$%&"'(' '$ )*&+( ,"-(
!"#$%& '$ ()*$)+$,-& %."/,+"&
0&"#%/&' '$ ()*$)+$,-&
1&/$,+&% 2&,& $% "#,!3 ( 4546
!"#$%"$#&! '( )*+,$"&'*#(! -./."&0(! 1
!"#$# %&!'()*!+$)!$ ,-#)!.- /$0!1.-*+-2 3445
15
2.5.
Índice General
2.6.
Índice General
ii
Índice de guras
v
Índice de tablas
viii
1. Historia de las computadores
1
1.1.
Mecanismos primitivos de cálculo y sus inventores . . . . . . . . . . . . . . .
1.2.
Las Cinco Generaciones de Computadoras Modernas
5
1.2.1.
Primera Generación de Computadoras
. . . . . . . . . . . . . . . . .
5
1.2.2.
Segunda Generación de Computadoras
. . . . . . . . . . . . . . . . .
7
1.2.3.
Tercera Generación de Computadoras . . . . . . . . . . . . . . . . . .
8
1.2.4.
Cuarta generación de Computadoras
. . . . . . . . . . . . . . . . . .
9
1.2.5.
Quinta generación de Computadoras
. . . . . . . . . . . . . . . . . .
10
1.3.
Mercado de las PC-compatibles
. . . . . . . . . . . . . . . . . . . . . . . . .
11
1.4.
Breve reseña sobre los microprocesadores . . . . . . . . . . . . . . . . . . . .
12
2. La CPUCR
2.1.
2.2.
25
Arquitectura de un computador . . . . . . . . . . . . . . . . . . . . . . . . .
25
2.1.1.
Arquitectura de von Neumann . . . . . . . . . . . . . . . . . . . . . .
25
2.1.2.
Arquitectura de Harvard . . . . . . . . . . . . . . . . . . . . . . . . .
26
CPUCR: señales de control . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
2.2.1.
Bus de direcciones (A0 . . . A15 ) . . . . . . . . . . . . . . . . . . . . .
27
2.2.2.
Bus de datos (A0 . . . A7 )
. . . . . . . . . . . . . . . . . . . . . . . .
27
2.2.3.
Línea de reloj (RLJ ) . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
2.2.4.
Línea de reposición (RP S ) . . . . . . . . . . . . . . . . . . . . . . . .
28
2.2.5.
Línea de Lectura/Escritura (L/E ) . . . . . . . . . . . . . . . . . . . .
28
2.2.6.
Línea de referencia a memoria (M )
. . . . . . . . . . . . . . . . . . .
28
2.2.7.
Línea de ciclo de búsqueda (CB )
. . . . . . . . . . . . . . . . . . . .
28
2.2.8.
Línea de ciclo de memoria (CM )
. . . . . . . . . . . . . . . . . . . .
29
2.2.9.
Línea de indicación de detenido (HALT ) . . . . . . . . . . . . . . . .
29
2.2.10. Línea de solicitud de interrupción (IN T ) . . . . . . . . . . . . . . . .
29
2.2.11. Línea de aceptación de interrupción (INTOK ) . . . . . . . . . . . . .
29
2.2.12. Línea de solicitud de acceso directo a la memoria (SDM A) . . . . . .
30
2.2.13. Línea de indicación de buses disponibles (BD ) . . . . . . . . . . . . .
30
2.3.
CPUCR: Memoria principal
. . . . . . . . . . . . . . . . . . . . . . . . . . .
30
2.4.
CPUCR: Registros internos
. . . . . . . . . . . . . . . . . . . . . . . . . . .
31
ii
El contador de programa (PC )
2.4.2.
El acumulador (A)
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
2.4.3.
El registro de estado (S ) . . . . . . . . . . . . . . . . . . . . . . . . .
33
2.4.4.
El puntero de pila (P)
. . . . . . . . . . . . . . . . . . . . .
31
. . . . . . . . . . . . . . . . . . . . . . . . . .
35
CPUCR: Conjunto de instrucciones . . . . . . . . . . . . . . . . . . . . . . .
36
CPUCR: Modos de direccionamiento
40
. . . . . . . . . . . . . . . . . . . . . .
2.6.1.
Direccionamiento inmediato
. . . . . . . . . . . . . . . . . . . . . . .
41
2.6.2.
Direccionamiento absoluto . . . . . . . . . . . . . . . . . . . . . . . .
41
2.6.3.
Direccionamiento indirecto . . . . . . . . . . . . . . . . . . . . . . . .
42
2.6.4.
Direccionamiento relativo
. . . . . . . . . . . . . . . . . . . . . . . .
43
2.6.5.
Direccionamiento implícito . . . . . . . . . . . . . . . . . . . . . . . .
43
2.6.6.
Direccionamiento de acumulador
44
. . . . . . . . . . . . . . . . . . . .
3. Programación de computadores
45
3.1.
Diseño de programas
3.2.
Programación en lenguaje ensamblador . . . . . . . . . . . . . . . . . . . . .
46
3.2.1.
Simbología del lenguaje de máquina . . . . . . . . . . . . . . . . . . .
48
3.2.2.
Simbología para el ensamblador . . . . . . . . . . . . . . . . . . . . .
48
3.2.3.
Operaciones de control . . . . . . . . . . . . . . . . . . . . . . . . . .
51
3.2.4.
Lazos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
3.2.5.
Comparaciones entre números . . . . . . . . . . . . . . . . . . . . . .
53
3.2.6.
Programación con índices
. . . . . . . . . . . . . . . . . . . . . . . .
54
3.2.7.
Subrutinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
3.2.8.
Aritmética de Múltiple Precisión
57
3.2.9.
Punto Flotante
1
. . . . . . . . . . . . .
2.4.1.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4. Sistemas de almacenamiento de datos
4.1.
4.2.
4.3.
4.4.
Jerarquía de memorias
45
62
67
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
4.1.1.
Memoria Virtual
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
4.1.2.
Memoria Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
4.1.3.
Memorias estáticas
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
Características de los medios de almacenamiento . . . . . . . . . . . . . . . .
74
4.2.1.
Medios de almacenamiento . . . . . . . . . . . . . . . . . . . . . . . .
75
4.2.2.
Tiempos de operación
75
4.2.3.
Modos de acceso
4.2.4.
Alterabilidad
4.2.5.
Permanencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tipos de memorias
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
79
4.3.1.
Memorias electrónicas de escritura y lectura
. . . . . . . . . . . . . .
79
4.3.2.
Memorias electrónicas dinámicas
. . . . . . . . . . . . . . . . . . . .
80
4.3.3.
Memorias electrónicas de solo lectura . . . . . . . . . . . . . . . . . .
82
4.3.4.
Memorias electrónicas borrables . . . . . . . . . . . . . . . . . . . . .
83
4.3.5.
Discos Flexibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
4.3.6.
Discos Duros
4.3.7.
El disco compacto . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sistemas de archivos
4.4.1.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
88
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
Sistema de archivos FAT . . . . . . . . . . . . . . . . . . . . . . . . .
89
iii
4.4.2.
Sistema de archivos NTFS . . . . . . . . . . . . . . . . . . . . . . . .
90
4.4.3.
Sistemas de archivos EXT2, EXT3 y EXT4
90
. . . . . . . . . . . . . .
5. Arquitectura de computadores y diseño de sistemas digitales
5.1.
5.2.
Arquitectura de computadores: aspectos relevantes . . . . . . . . . . . . . . .
6.2.
92
Segmentación (Pipelines) . . . . . . . . . . . . . . . . . . . . . . . . .
92
5.1.2.
Limitaciones de la segmentación . . . . . . . . . . . . . . . . . . . . .
94
5.1.3.
Computadoras con un conjunto de instrucciones complejo . . . . . . .
97
5.1.4.
Computadoras con un conjunto de instrucciones reducido . . . . . . .
97
5.1.5.
Superescalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
5.1.6.
Multiprocesadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
Índice de guras
1.1.
Abaco
. . . . . . . . . . . . . . . . . . . . . . . . . . .
99
1.3.
Blaise Pascal
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
5.2.1.
Lenguajes de descripción de hardware . . . . . . . . . . . . . . . . . .
99
1.4.
Maquina diferencial de Babbage . . . . . . . . . . . . . . . . . . . . . . . . .
2
5.2.2.
Verilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
99
1.6.
Maquina analítica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
101
1.7.
Herman Hollerith . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.8.
George Boole
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.9.
Alan Turing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
Diseño de sistemas digitales
6. Ejemplos y laboratorios
6.1.
92
5.1.1.
Programas ejemplo
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
101
6.1.1.
Operaciones de control . . . . . . . . . . . . . . . . . . . . . . . . . .
101
6.1.2.
Lazos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
103
6.1.3.
Comparaciones entre números . . . . . . . . . . . . . . . . . . . . . .
106
6.1.4.
Subrutina abierta . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
108
6.1.5.
Subrutina cerrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
108
6.1.6.
Aritmética de Múltiple Precisión y en Punto Flotante . . . . . . . . .
112
Laboratorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
117
6.2.1.
Mapas de memoria
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
117
6.2.2.
Programación CPUCR . . . . . . . . . . . . . . . . . . . . . . . . . .
121
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.10. Mark I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.11. ENIAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.13. UNIVAC I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.14. El transistor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.15. Robert Noyce
8
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.16. Gordon Moore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.17. Ley de Moore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
1.19. Steve Wozniak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.20. Computadora portátil Toshiba T1110
10
. . . . . . . . . . . . . . . . . . . . .
10
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
Bibliografía
135
1.21. Palm Pilot 1000
1.22. Procesador 4004 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
Anexos
138
1.23. Procesador 8080 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
A. Historia de las computadoras
138
1.24. Procesador 8086 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
1.25. Procesador 8088 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
1.26. Procesador 80286 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
1.27. Procesador 80386 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
1.28. Procesador 80486 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
1.29. Procesador Pentium I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
1.30. Procesador Pentium Pro
1.31. Procesador Pentium II
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
1.32. Procesador Pentium III . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
1.33. Procesador Pentium IV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
1.34. Procesador Itanium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
1.35. Procesador Xeon
23
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.36. Procesador Pentium M . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.37. Procesador Dual Core
24
24
1.39. Procesador Core i7
2.1.
iv
23
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.38. Procesador Core 2 Duo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
Estructura de un computador IAS . . . . . . . . . . . . . . . . . . . . . . . .
26
v
2.2.
Estructura de un computador Harvard
. . . . . . . . . . . . . . . . . . . . .
26
5.2.
Secuencia de instrucciones con riesgos de dependencia . . . . . . . . . . . . .
2.3.
CPUCR0
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
5.3.
Entradas a la ALU sin unidad de anticipación
. . . . . . . . . . . . . . . . .
95
2.4.
CPUCR1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
5.4.
Entradas a la ALU con unidad de anticipación . . . . . . . . . . . . . . . . .
95
2.5.
Memoria de la CPUCR1
31
5.5.
2.6.
Registros y entradas/salidas de la CPUCR1
2.7.
Registro de estado (S)
2.8.
Código de instrución
2.9.
Direccionamiento inmediato
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
32
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
. . . . . . . . . . . . . . . . . . . . . . . . . . .
42
2.10. Direccionamiento absoluto . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
2.11. Direccionamiento relativo
43
2.12. Direccionamiento implícito
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
2.13. Direccionamiento de acumulador
44
Secuencia de instrucciones segmentada con burbujas insertadas para resolver
el riesgo de dependencia de datos. . . . . . . . . . . . . . . . . . . . . . . . .
5.6.
94
96
Secuencia de instrucciones segmentada con anticipación para resolver el riesgo
de dependencia de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
96
6.2.
Algoritmo para ordenar tres números en orden ascendente
6.1.
Localizaciones X, Y, Z, A, B y C
. . . . . . . . . .
102
. . . . . . . . . . . . . . . . . . . . . . . .
102
6.3.
Algoritmo para ejemplo de utilización de lazos . . . . . . . . . . . . . . . . .
105
6.4.
Combinaciones posibles de las banderas N, Z, C y V . . . . . . . . . . . . . .
107
108
. . . . . . . . . . . . . . . . . . . . . . . .
44
6.5.
Comparación de números . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.
Programación en ensamblador . . . . . . . . . . . . . . . . . . . . . . . . . .
47
6.6.
Ejemplo de subrutina cerrada
. . . . . . . . . . . . . . . . . . . . . . . . . .
109
3.2.
Almacenamiento de datos en memoria
50
6.7.
Subrutina para sumar dos números con PAL palabras de precisión . . . . . .
113
3.3.
Suma múltiple precisión. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
6.8.
Algoritmo para una subrutina para multiplicación de dos números sin signo .
116
3.4.
Algoritmo para la multiplicación binaria de seis por tres
. . . . . . . . . . .
60
6.9.
Mapa de memoria para el laboratorio 1 . . . . . . . . . . . . . . . . . . . . .
118
3.5.
Representación en punto otante para la CPUCR
. . . . . . . . . . . . . . .
64
6.10. Mapa de memoria para el laboratorio 2 . . . . . . . . . . . . . . . . . . . . .
119
3.6.
algoritmo para suma de números en punto otante . . . . . . . . . . . . . . .
66
6.11. Diagrama de ujo para programa de laboratorio 2 . . . . . . . . . . . . . . .
121
6.12. Diagramas de ujo para práctica
. . . . . . . . . . . . . . . . . . . . . . . .
127
6.13. Circuito para solucionar ejercicio 5. . . . . . . . . . . . . . . . . . . . . . . .
130
. . . . . . . . . . . . . . . . . . . . .
4.1.
Jerarquía de memorias
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
4.2.
Memoria virtual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
4.3.
Contenido de la memoria asociativa, memoria virtual. . . . . . . . . . . . . .
70
4.4.
Procesador, memoria cache y memoria principal . . . . . . . . . . . . . . . .
70
4.5.
Flujo para la operación de lectura en cache.
71
4.6.
Caches y conexiones externas del procesador Pentium III . . . . . . . . . . .
4.7.
Diagrama de transición de estados del protocolo MESI
. . . . . . . . . . . .
73
4.8.
Celda de una memoria SRAM . . . . . . . . . . . . . . . . . . . . . . . . . .
74
4.9.
Esquema de acceso aleatorio a una memoria
76
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
4.10. Esquema de acceso seudoaleatorio a una memoria
4.11. Esquema de acceso secuencial a una memoria
. . . . . . . . . . . . . . .
72
77
. . . . . . . . . . . . . . . . .
77
4.12. Diagrama de una celda de memoria . . . . . . . . . . . . . . . . . . . . . . .
79
4.13. Arreglo de memoria con direccionamiento coincidente . . . . . . . . . . . . .
80
4.14. Estructura completa de una memoria estática sencilla . . . . . . . . . . . . .
81
4.15. Estructura de una celda dinámica . . . . . . . . . . . . . . . . . . . . . . . .
81
4.16. Memoria dinámica sencilla . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
4.17. Memoria tipo ROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
4.18. Memoria tipo PROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
4.19. Memoria tipo EPROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
4.20. Dispositivo de almacenamiento USB tipo ash
84
. . . . . . . . . . . . . . . .
4.21. Estructura de un disco exible . . . . . . . . . . . . . . . . . . . . . . . . . .
85
4.22. Estructura interna de un disco duro
. . . . . . . . . . . . . . . . . . . . . .
87
4.23. Estructura y funcionamiento del disco compacto . . . . . . . . . . . . . . . .
88
4.24. Estructura de un sistema archivos FAT
. . . . . . . . . . . . . . . . . . . .
89
4.25. Estructura de un sistema archivos NTFS . . . . . . . . . . . . . . . . . . . .
90
4.26. Estructura de un sistema archivos EXT2 . . . . . . . . . . . . . . . . . . . .
91
5.1.
93
Ejecución de tres instrucciones sin segmentación y con segmentación . . . . .
vi
vii
Nomenclatura
←− (@0143) signica
Ciclo de reloj: es el equivalente a un período
tino. Así por ejemplo A
básico de la señal de reloj.
que el contenido de la localización @0143 se
copiará para que sea el nuevo contenido del
Índice de tablas
A: Acumulador
registro A. La operación de movimiento de
datos, deja el contenido de la fuente inal-
(A): se reere al contenido del acumulador.
terado. El contenido original del destino se
pierde y es sustituido por el contenido de la
2.1.
Signicado de los mnemotécnicos de la CPUCR
2.2.
Conjunto de instrucciones de la CPUCR
2.3.
Ejemplo de ejecución de instrucciones en CPUCR0
2.4.
Instrucciones de la CPUCR
3.1.
Prejos para diferentes bases . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
3.2.
Código de caracteres para la CPUCR . . . . . . . . . . . . . . . . . . . . . .
51
3.3.
Operadores para el ensamblador . . . . . . . . . . . . . . . . . . . . . . . . .
52
3.4.
Representaciones en punto otante
63
6.1.
Comparaciones más usadas entre dos números
6.2.
6.3.
C: Bandera de acarreo
fuente.
↑:
. . . . . . . . . . . . . . . .
38
. . . . . . . . . . . . . . . . . . . .
39
CPU: Unidad Central de Procesamiento o
. . . . . . . . . . . . . .
40
Central Processing Unit por sus siglas en in-
. . . . . . . . . . . . . . . . . . . . . . . . . . .
41
gles.
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
107
Ejemplo de subrutinas abiertas
. . . . . . . . . . . . . . . . . . . . . . . . .
109
Ejemplo de macroinstrucciones
. . . . . . . . . . . . . . . . . . . . . . . . .
112
Desapilar. Toma un operando del tope
de la pila y lo transere a un registro, en
nuestro caso al acumulador A. Esta transferencia cambia el tope de la pila al siguiente
DI: Dirección de donde se obtiene la instruc-
operando.
ción.
↓: Apilar. Toma el contenido de un registro y
I: Bandera de interrupción
lo transere al tope de la pila. El contenido
del registro no se altera en la operación.
M: Dirección efectiva del operando.
N: Bandera de signo
∩:
Realiza la función lógica
∪:
Realiza la función lógica
∀:
Realiza la función lógica
”Y”
bit a bit
”O”
bit a bit
”O”
exclusiva
entre dos operandos.
P: Apuntador de pila
entre dos operandos.
PC: Contador de programa
S: Registro de estado
bit a bit entre dos operandos.
˜: Realiza el complemento a dos del operando.
V: Bandera de rebase
[XX]: Dirección del operando o del contenido
XX. [16] se reere a la localización de memo-
=⇒:
ria donde el número 16 está almacenado.
el programa. Normalmente, después que el
La echa de doble línea se utiliza para
representar secuencias de instrucciones en
computador ha tomado la instrucción de la
(XXXX):
Contenido
de
la
localización
localización DI, tomará la siguiente instruc-
XXXX, (0143) se reere al contenido de la
ción, por ejemplo, de la localización DI+2.
localización 0143.
Esta secuencia se representa por
=⇒
DI+2.
Sin embargo, si el programa se deriva de la
Z Bandera de cero
localización DI a la localización M, será indicado por
←−:
La echa de una línea representa la
operación copia y se utiliza para describir el
movimiento de datos entre la fuente y el des-
viii
ix
=⇒
M (léase como váyase a M).
para evitar errores.
En 1642, Blaise Pascal, hijo de un recolector de impuestos francés, inventó lo que llamó
calculadora numérica de rueda, para ayudar a su padre con sus labores. Esta caja rectangular
llamada Pascaline, usaba 8 perillas para sumar cifras de hasta 8 dígitos. Su instrumento uti-
Capítulo 1
lizaba la base de 10 para lograrlo. Si se movía una perilla diez lugares, o una vuelta completa,
movía un lugar la perilla siguiente: la cifra de las decenas, y así sucesivamente. Su principal
Historia de las computadores
limitación era que solamente podía sumar, además de que solamente Pascal podía repararlas,
sin mencionar que su costo era mayor que el de la mano de obra del personal sustituido.
Aquí se comenzó a ver las primeras señales de la tecnofobia, pues muchos matemáticos
temían ser reemplazados por las máquinas.
En 1694, Gottfried Wilhem von Leibniz, un lósofo y matemáti-
Recopilado por Lochi Yu
co alemán, mejoró el Pascaline creando una máquina capaz de
Actualizado Agosto 2009
multiplicar. Como su predecesor, éste funcionaba con perillas y
engranajes. Fue hasta 1820, cuando Charles Xavier Thomas de
Si el automóvil hubiera seguido la misma evolución que la computadora,
un Rolls Royce costaría hoy $100, rendiría un millón de millas por galón
de combustible, y explotaría una vez por año, matando a todos adentro.
Las computadoras están en todas las áreas de nuestras vidas cotidianas, ahora todo está
Colmar, un francés, inventó una calculadora mecánica capaz de
realizar las 4 operaciones aritméticas básicas. Llamado el Aritmómetro, podía sumar, restar, multiplicar y dividir. Con su gran
versatilidad, fue usado ampliamente hasta antes de la primera
guerra mundial.
tan computarizado que no podríamos vivir sin ellas. ¾Pero de dónde vino toda esta tecnología
Figura 1.3: Blaise Pascal
El comienzo verdadero de la computación, como la conocemos, fue
y hacia dónde va? Para entender mejor el impacto de las computadoras y apreciar su inu-
por un profesor inglés de matemáticas, Charles Babbage (1791-1871).
encia en nuestras vidas, es importante conocer su evolución.
Frustrado por los múltiples errores en los cálculos de la Sociedad Real
de Astronomía, exclamó: Deseo por Dios que estos cálculos fuera realizados por vapor!. Esto se debió a que el vapor se estaba utilizando
1.1.
Mecanismos primitivos de cálculo y sus inventores
como fuente de energía para la industria en esa época, pero con esto, se inició la era de automatización de computadoras. En 1812 Bab-
El ábaco emergió hace más de 5 mil años en Asia, y todavía se encuentra en uso, y puede
bage notó una armonía natural entre máquinas y las matemáticas: las
ser considerada la primera computadora. Permite a los usuarios realizar cómputos usando un
máquinas eran óptimas para ejecutar tareas repetidamente y sin er-
sistema de chas sobre alambres. Fue utilizado por los mercantes para realizar sus transac-
Figura
ciones. Pero el uso del papel y lápiz hizo que el ábaco perdiera su importancia.
Maquina
1.4:
ror; mientras que las matemáticas, particularmente la producción de
difer-
tablas matemáticas, requerían sencillamente de una repetición de pa-
encial de Babbage
El Ábaco
El valor asignado a cada cha no está determinado
por su forma o color, sino por su posición: una
cha en una posición particular tiene el valor de
1, en la siguiente línea, tendrá el valor de 10, y el
siguiente de 100. Entonces, dos chas colocadas en
la primera línea y otra en la siguiente dan el valor
de 12. Por este medio, se usan pocas chas para
representar números grandes.
Figura 1.1: Abaco
sos.
El problema se centró en la aplicar la habilidad de las máquinas a las necesidades de
las matemáticas. Su primer intento de resolver este problema fue en 1822, cuando propuso
una máquina que resolviera ecuaciones diferenciales, llamada Máquina Diferencial. Éste era
impulsada por vapor, era tan grande como un tren, y podía tener un programa almacenado y ejecutar cálculos e imprimir los resultados automáticamente. Luego de trabajar en la
máquina diferencial por 10 años, Babbage decidió trabajar sobre la primera computadora de
uso general, que le llamó la Máquina Analítica. La máquina analítica estaba dividida funcionalmente en dos grandes partes: una que ordenaba y otra que ejecutaba las órdenes. La
que ejecutaba las órdenes era una versión muy ampliada de la máquina de Pascal, mientras
que la otra era la parte clave. La innovación consistía en que el usuario podía, cambiando las
Más de 1000 años después del ábaco, no se logró mayor avance. Para los cálculos complejos, se requería múltiples personas realizando el mismo largo cálculo: esta redundancia era
1
especicaciones de control, lograr que la misma máquina ejecutara operaciones complejas,
diferentes de las hechas antes.
2
Además contaba con una sección en donde se recibían los datos para trabajar. La máquina
mente electrónica, que aplicara álgebra de Boole a la circuitería de la computadora. George
seguía las instrucciones dadas por la unidad de control, las cuales indicaban qué hacer con
Boole trabajó en la mitad del siglo 19, en una claricación del sistema binario de álgebra, que
los datos de entrada, para obtener luego los resultados deseados.
establecía que cualquier ecuación matemática podía asignarse como verdadera o falsa. Extendiendo este concepto a circuitos electrónicos en la forma de on u o (encendido o apagado).
Su asistente, Augusta Ada King, fue fundamental para
el diseño de esta máquina. Ayudó a revisar los planos, ase-
Atanaso y Berry desarrollaron la primera computadora completamente electrónica en 1940.
Su proyecto fue perdiendo sus fondos y eclipsado por otros desarrollos de otros cientícos.
gurar fondos del gobierno inglés, y comunicarle los datos
al público. También, su entendimiento de la máquina le
George Boole desarrollo su teoría tratando de describir la lógica con dos acciones básicas:
a) Acción 1 Y Acción 2.
b) Acción 1 O Acción 2.
Fue una curiosidad matemática por casi un siglo,
hasta que Claude Shannon en 1930 lo re-descubrió
cuando buscaba una manera de describir el comportamiento de circuitos digitales. Es un caso más
donde la investigación básica nutre a la investigación aplicada.
permitió crear las rutinas de instrucción que eran administradas a la computadora, haciéndola la primer prograFigura 1.6: Maquina analítica
madora de computadoras en el mundo. En los años 80s,
el Departamento de Defensa Estadounidense nombró un
lenguaje de programación como ADA, en su honor.
Su máquina impulsada por vapor, nunca fue construida, y se vería primitiva para nuestros
estándares actuales. No obstante, delineó los elementos básicos de la computadora de uso
general y fue un avance muy importante. Consistía en más de 50 mil componentes, desde
tarjetas perforadas, una memoria para 1000 números de hasta 50 dígitos decimales. También
Figura 1.8: George Boole
contenía un molino con una unidad de control que permitía el procesamiento de instrucciones en cualquier secuencia, y dispositivos de salida para producir los resultados impresos.
Babbage tomó la idea de tarjetas perforadas de Joseph-Marie Jacquard, que utilizó tarjetas
perforadas para controlar los patrones de los hilares.
Mientras tanto, en el Reino Unido, el matemático Alan Turing
(1912-1954) presentó en 1936 el trabajo On Computable Numbers,
donde describía un dispositivo hipotético, la máquina Turing, que pre-
En 1889, un inventor estadounidense, Herman Hollerith, también aplicó el concepto de
Jacquar para la computación. Su primer tarea fue de encontrar una manera más fácil de
computar el censo estadounidense. Los censos previos de 1880, tomaban cerca de 7 años
para contabilizar, y con su población creciente, se calculaba que tomaría unos 10 años para
contabilizar el siguiente censo. A diferencia de Babbage, donde utilizó tarjetas perforadas
para instruir a la máquina, Hollerith utilizó las tarjetas para almacenar información, que
posteriormente era administrada a otra máquina la cual los compilaba mecánicamente.
sagiaba las computadoras programables. La máquina Turing fue diseñada para efectuar operaciones lógicas, y podía leer, escribir o borrar símbolos escritos en cuadros en una cinta de papel. Este tipo de
máquina llegó a conocerse como una máquina de estados, debido a
que en cada paso del cómputo, la siguiente acción de la máquina era
comparada contra una lista de instrucciones de todos los estados posibles.
Figura
Turing
Cada perforación en una tarjeta representaba un número, y combinaciones de dos huecos representaban una letra. Se podían almacenar
hasta 80 variables en una tarjeta. En vez de 10 años, los datos del censo fueron contabilizados en solamente 6 semanas, con la máquina de
Hollerith. Además de su velocidad, las tarjetas servían como método
de almacenamiento y reducían los errores computacionales. Hollerith
fundó la Tabulating Machine Company en 1896, para vender su idea al
mundo de los negocios. En 1924 ser convirtió en la International Business Machines (IBM).
Figura 1.7: Herman
En los años siguientes, otros ingenieros lograron otros avances. Van-
Hollerith
nevar Bush desarrolló en 1931 una calculadora para resolver ecuaciones
diferenciales. La máquina permitió resolver ecuaciones diferenciales complejas que apremiaban por mucho tiempo los cientícos y matemáticos. La máquina era grande y compleja,
difícil de utilizar, pues cientos de perillas eran requeridas para representar los números y las
relaciones entre ellas. Para eliminar estas molestias, John V. Atanoso, profesor del Iowa
State College y su estudiante de posgrado, Clior Berry, imaginaron una computadora total-
3
4
1.9:
Alan
1.2.
Las Cinco Generaciones de Computadoras Modernas
En la mitad de los 40s, John von Neumann se unió al equipo de la Universidad de Pennsylvania, formulando conceptos de diseño de computadoras que permanecieron centrales a
1.2.1.
Primera Generación de Computadoras
la ingeniería en computación por los siguientes 40 años. Von Neumann junto a los Eckert y
(1945-1956)
Mauchly, diseñaron el EDVAC, Electronic Discrete Variable Automatic Computer en 1945
Con el inicio de la Segunda Guerra Mundial, los gobiernos buscaron desarrollar computa-
permitía parar la computadora en cualquier punto y reiniciar, permitiendo mayor versatili-
doras para explotar su importancia estratégica potencial. Esto aumentó el nanciamiento de
dad a la programación de computadoras. El elemento clave en la arquitectura era la unidad
los proyectos de desarrollo de proyectos y aceleró el progreso tecnológico. En 1941, Konrad
de procesamiento central, que permitía que todas las funciones de la computadora fueran
Zuse, ingeniero alemán, desarrolló la computadora Z3, para diseñar aviones y misiles. La Z3
coordinadas por una misma fuente.
con suciente memoria para almacenar un programa y los datos. Esta memoria almacenada
utilizaba perforaciones en lm y el sistema de numeración binario, basados en 1s y 0s en vez
del sistema de numeración decimal. Las fuerzas aliadas hicieron más esfuerzo, y en 1943, los
británicos completaron una computadora para descifrar códigos secretos, llamado Colossus.
El problema era que no era una computadora de uso general, sino para decodicar mensajes
alemanes secretos. Luego, fue mantenida en secreto hasta décadas luego de la guerra.
Del lado americano, Howard H. Aiken, ingeniero de
Harvard trabajando para la IBM, produjo una calculadora totalmente electrónica en 1944. El objetivo de esta era
crear tablas balísticas para la Marina Estadounidense.
Era tan grande como media cancha de fútbol y tenía
500 millas de alambrados. El Harvard-IBM Automatic Sequence Controlled Calculator, o Mark I, era una
computadora electrónica de relevadores. Usaba señales
electromagnéticas para mover las partes mecánicas. La
máquina era lenta (duraba 3 a 5 segundos por cálculo)
Figura 1.10: Mark I
e inexible (en que la secuencias de cálculos no podían
cambiar), pero podía ejecutar aritmética básica así como ecuaciones complejas. Podía realizar
las 4 operaciones básicas, y subrutinas para las funciones trigonométricas y logarítmicas.
En 1951, el Universal Automatic Computer, UNIOtra computadora desarrollada por motivos de la guer-
VAC I, construida por Remington Rand (la cual adquir-
ra fue la Electronic Numerical Integrator and Computer
ió la empresa de Eckert y Mauchly), fue de las primeras
(ENIAC), producida entre el gobierno estadounidense y
computadoras disponibles comercialmente para permi-
la Universidad de Pennsylvania. Consistía en 18 mil tu-
tir utilizar estos avances. Uno de los primeros logros
bos al vacío, 70 mil resistencias, 5 millones de uniones
fue que predijo el ganador de la elección presidencial
soldadas en un área de 167 metros cuadrados, y la com-
de 1952 en EEUU, Dwight D. Eisenhower.
putadora consumía 160 KW de potencia eléctrica. Desarrollada por John Presper Eckert y John W. Mauchly,
Figura 1.13: UNIVAC I
el ENIAC sí era una computadora de uso general, 1000
veces más rápida que la Mark I.
La IBM comenzó a fabricar computadoras hasta después de 1950. Previamente solo estaba
Figura 1.11: ENIAC
en el negocio de las tarjetas perforadas y automatización en la empresa. Introdujo su computadora IBM 701 en 1952 y eventualmente se vendieron 19 unidades. Mucha gente pensaba
Realizaba saltos condicionales y era programable por medio de cables e interruptores, y
que el mercado era muy limitado para estas máquinas altamente especializadas.
la información era administrado por medio de tarjetas perforadas (se duraba entre media
hora y un día entero). En 1949 calculó el valor de la constante p con 2037 decimales, lo
cual requirió de 70 horas. Como , entre otras cosas, la máquina iba a reemplazar a un grupo
de matemáticas que hacía cómputos numéricos para una ocina especializada del gobierno
estadounidense, tomó el nombre de ellas: computadoras.
5
6
Fue el programa almacenable y el lenguaje de programación
que le dio a las computadoras la exibilidad para nalmente ser
efectivos y productivos para el uso empresarial. El concepto de
tener un programa almacenado signicaba que las instrucciones
para una función en particular, que estaban dentro de la memoLa primera generación de computadoras era caracterizado por el
ria, podían ser rápidamente sustituidas por otro grupo de instruc-
hecho de que las instrucciones de operación eran hechas a la medida
ciones (otro programa) para efectuar otra función. Una computa-
para tareas especícas, donde la computadora iba a ser utilizada.
dora podía imprimir recibos a clientes y minutos después dis-
Cada computadora tenía un programa en lenguaje de máquina que
eñar productos o calcular pagos. Lenguajes más sosticados de
indicaba su modo de operación. Esto hacía que fuera difícil de pro-
alto nivel como COBOL (Common Business Oriented Language) y FORTRAN (Formula
gramar y limitaba su versatilidad y velocidad. Otras características
Translator) entraron en uso en este tiempo, y se han expandido hasta hoy. Estos lenguajes
distintivas era que utilizaban tubos al vacío, consumiendo mucho es-
reemplazaron el código binario del lenguaje de máquina con palabras, oraciones y fórmulas
pacio, potencia y mantenimiento, pues se quemaban frecuentemente,
matemáticas, haciendo fácil la programación de la computadora. Se crearon nuevos tipos de
obligando a una inspección lenta de todos los tubos.
carreras (programador, analista de sistemas) y toda la industria del software empezó con la
Figura 1.14: El transistor
segunda generación de computadoras.
1.2.2.
Segunda Generación de Computadoras
(1956-1963)
1.2.3.
Tercera Generación de Computadoras
(1964-1971)
En 1948, la invención del transistor cambió radicalmente el desarrollo de las computadoras. Éste reemplazó los tubos al vacío, en televisores, radios y computadoras. Como resultado, toda la maquinar-
En 1964 Digital Equipment Corporation (DEC) mostró su PDP-8, la
ia electrónica ha estado miniaturizándose desde entonces. El tran-
primera minicomputadora comercial. Fue todo un logro en cuanto al cos-
sistor ha estado en computadoras desde 1956. Las computadoras
to: menos de $20 mil. Aunque los transistores era un mejoramiento sobre
de segunda generación eran más pequeñas, más conables, rápi-
los tubos al vacío, todavía generaban suciente calor como para dañar
das y ecientes que sus predecesoras. Las primeras máquinas que
las otras partes sensibles del computador. Robert Noyce (cofundador de
aprovecharon esto fueron las primeras supercomputadoras, Stretch
Intel con Gordon Moore) trabajaba en Fairchild Semiconductors en 1959,
de IBM y LARC de Sperry-Rand. Ambos fueron creados para mane-
e ideó el plan de construir múltiples transistores en una misma pieza de
jar grandes volúmenes de datos en laboratorios de energía atómica.
silicio. Noyce lo llamó circuito integrado, (IC): Yo era perezoso, no tenía
Eran costosas y no eran tan atractivas. Las computadoras de segun-
sentido poner a gente a soldar todos los componentes cuando se podían
da generación reemplazaron el lenguaje de máquina con lenguaje
fabricar todos juntos.
Figura
1.15:
Robert Noyce
ensamblador, permitiendo códigos abreviados en vez de códigos biYa Jack Kilby de Texas Instruments había intentado solucionar este
narios extensos.
problema: había logrado fabricar componentes discretos en una misma
lámina de germanio, pero las interconexiones debían de ser soldadas a
A los largo de los 60s, hubo un número de computadoras de segunda generación exitosos,
mano. Este proceso no podía implementarse para producción en masa. El
y utilizados en negocios, universidades, y en el gobierno. Eran de empresas como Burroughs,
circuito integrado constituía transistores en un disco pequeño de silicio.
Contro Data, Honeywell, IBM y Sperry-Rand. Estas computadoras también eran de diseño de
Posteriormente las mejoras en tecnologías de fabricación permitían integrar aún más componentes, haciendo que las computadoras disminuyeran
estado sólido, y contenían transistores en vez de tubos al vacío. Contenían además todos los
componentes que asociamos al presente a la computadora moderna: impresoras, almacenaje
Figura
en cinta, disco, memoria, sistemas operativos y programas almacenados. Un ejemplo impor-
Gordon Moore
tante fue el IBM 1401 que era considerado el Modelo T de la industria de la computación.
En 1965, la mayoría de empresas grandes procesaban la información nanciera utilizando
1.16:
más de tamaño. Primero Noyce puso dos o tres componentes en un mismo
integrado, luego decenas, centenares, y luego millares. Jack Kilby ganó el
Premio Nóbel de Física por este desarrollo. Roberto Noyce hubiera sido
premiado también, pero ya había fallecido para entonces.
computadoras de segunda generación.
7
8
Otro desarrollo de tercera generación incluyó el sistema operativo, que permitía que difer-
de LEDs en el pánel. Su aparición en la revista Popular Electronics fue todo un suceso,
entes programas corrieran al mismo tiempo en con un programa central que monitorizaba y
pues representaba que el usuario corriente podía tener su propia computadora y programarla.
coordinaba el sistema con la memoria principal.
Las computadoras llegaron entonces al público en general por ahí
de los años 70s. Estas minicomputadoras venían con software amigable, con muchas aplicaciones como procesador de palabras, hojas de
cálculo, etc. Los pioneros de este campo fueron Commodore, Radio
Shack y Apple Computer. En los años 80s, los video juegos como Pac
Man y sistemas como la Atari, iniciaron el interés del público por
computadoras más sosticadas y más programables. Steve Wosniak
programó el sistema operativo, diseñó, construyó la computadora
Apple II en 1977 y con ello comenzó la era de computadoras personales de bajo costo y alto volumen.
Figura
1.19:
Steve
Wozniak
Figura 1.17: Ley de Moore
1.2.5.
1.2.4.
Quinta generación de Computadoras
(1981-actualidad)
Cuarta generación de Computadoras
(1971-1981)
En 1981 IBM introdujo su computadora personal (PC) para el
uso en el hogar, ocina y escuelas. Posteriormente con el adven-
Luego de los circuitos integrados, la dirección fue de disminuir aún más el tamaño. La in-
imiento de los PC- compatibles o clones, hubo una expansión del
tegración a gran escala integraba cientos de componentes en un solo chip. Ya en los años
uso de la computadora en esas tres áreas. El número de computa-
80s, la Integración a muy gran escala (VLSI) integraba cientos de miles de componentes. La
doras personales en uso pasó de 2 millones en 1981 a 5.5 millones
integración de Ultra gran escala (ULSI) aumentó el número a los millones. Este aumento de
el año siguiente. Diez años después, 65 millones de PCs eran us-
componentes junto con la disminución en el tamaño abarató los costos, e hizo más accesible
adas. Las computadoras fueron disminuyendo de tamaño, pasando a
las computadoras al público en general. También aumentó su potencia, eciencia y conabili-
ser portátiles, y luego a ser de bolsillo. La línea Macintosh de Apple
dad. El chip 4004 de Intel, desarrollado en 1971, siguió un paso más allá al combinar todos los
Computer pasó a ser una de los rivales directos de IBM. Su atractivo
componentes de una computadora en un chip. Ahora un solo microprocesador podía cumplir
era su diseño amistoso, donde el sistema operativo permitía mover
varias demandas según su conguración y programación. Pronto, artículos como hornos de
iconos en la pantalla en vez de escribir instrucciones. El movimiento
microondas, televisores, y automóviles incorporaron microprocesadores.
era controlado por un mouse o ratón, que traducía el movimiento de
Figura
putadora
1.20:
Comportátil
Toshiba T1110
la mano a la computadora. El tamaño de las computadoras seguía disminuyendo para el año
1985 Toshiba lanza la T1100, la cual fue conocida como la primer computadora portátil que
se vendió masivamente.
A nales de los años ochenta el CERN de Ginebra desarrolla el lenguaje HTML y para
principios de los años noventa crean el primer servidor web llamado World Wide Web, de
esta forma nace la internet.
En el año 1996 Palm saca al mercado su primer computador de bolsillo el Pilot 1000, la
cual contaba con un procesador de 16 MHz y una memoria ram de 128 Kb. A partir del año
2008 empezaron a salir las llamadas netbooks, computadores ultra ligeras capaces de albergar
sistemas operativos completos de igual forma que una PC, pero con ciertas limitaciones en
su capacidad.
El procesador 8008 fue el sucesor del 4004, y en vez de tener 4 bits, tenía 8. Posteriormente vino el 8080, el cual dio luz al primero computador: el Altair 8800 en 1975. Este
computador se programaba con interruptores en el frente y la salida se observaba por medio
9
10
y en vez de producir su propia computadora, empezó a vendérsela a otros fabricantes (a $25
el chip). Pronto, aparecieron múltiples computadoras compatibles con la IBM. Esto inició el
mercado de lo que se conocía como las IBM compatibles, posteriormente PC compatibles, o
clones. Seguidamente los fabricantes de los clones iban con precios bastante competitivos,
aprovechándose de los fabricantes de componentes de teclados, discos duros, tarjetas, de Taiwán y Corea, donde sus precios eran una fracción de los de los estadounidenses. Esto provocó
una disminución progresiva de precios, que aumentó la accesibilidad de los equipos para el
público en general, el cual le encontró cada vez más usos. La industria del software oreció
para lograr aún más dependencia y aumentar más el mercado de las computadoras.
Figura 1.21: Palm Pilot 1000
Mientras las computadoras se volvían más populares en el trabajo, se formaron nuevas
maneras de aprovechar su potencial. Se comenzaron a conectar unas a otras, compartir recursos, y a comunicarse. Al contrario de las supercomputadoras donde una computadora
potente estaba conectada a muchos terminales, las computadoras en red compartían entre
1.3.
Mercado de las PC-compatibles
La IBM estaba dispuesta a entrar al mercado de las computadoras personales, y dispuso
todas todos los recursos. Utilizando redes locales, conexiones directas y líneas telefónicas,
estas redes surgieron y posteriormente creó una red global de computadoras. La Internet es
el ejemplo de ello.
de solamente un año para que su equipo de ingenieros en Boca Raton, Florida, lo diseñara.
Debido al poco tiempo disponible, se decidió fabricarlo casi completamente de componentes
disponibles comercialmente en ese momento. Se decidió utilizar el microprocesador 8086 de
Intel, y el sistema operativo MS-DOS de Microsoft (el cual tenía derecho de venderle el sistema operativo a otros fabricantes de computadoras).
La única pieza de la computadora, propietaria, o sea que estaba patentada por IBM, era
el BIOS. El BIOS signica Basic Input Output System, que es el programa residente en la
tarjeta madre del computador que se encarga de servir de puente entre el sistema operativo
1.4.
Breve reseña sobre los microprocesadores
Los procesadores posteriores del 8080 que sacó Intel fueron el 8086, 8088 (versión disminuida del 8086), 80286, 80386, 486, Pentium, Xeon e Itanium. Otros procesadores importantes
fueron: 6502 (Apple II y Commodore), los de Motorota 68000, 68020, 68030, 68040, y PowerPC.
y el hardware subyacente. Es el primer programa que corre al encender la computadora y es
el encargado de cargar el sistema operativo y de la conguración básica.
La IBM estaba conada de la estrategia debido a que había patentado el BIOS y publicado su código fuente. Aún en el caso de que pudieran crear otro BIOS, solamente IBM podría
comprar los componentes en tan gran cantidad que sus precios siempre serían los mejores.
Además el hecho de haber publicado su código era un arma importante: un programador,
luego de haber visto aunque sea una vez ese código, le era extremadamente difícil no reproducir aún parcialmente parte del mismo, violando la patente entonces. La única forma de
hacerlo seguramente era que fuera programado por ingenieros que nunca hubieran leído el
código.
Procesador: 4004
Fecha de introducción: 1971
Frecuencia Inicial: 108Khz
640 bytes
Transistores: 2300
Ancho de vías: 10 micras
En febrero de 1982, tres ingenieros: Rod Canion, Jim Harris, Bill Murto, se reunieron en
un restaurante para discutir la creación de una nueva empresa. Los tres eran managers experimentados de Texas Instruments. Sus ideas nalistas fueron dos: un restaurante de comida
Figura 1.22: Procesador 4004
mexicana o una empresa de computadoras. Se decidieron por la segunda opción. Utilizando
ingeniería reversa, tomando el BIOS de IBM como una caja negra y estudiando sus entradas
y salidas, pero sin ver el código patentado, 15 programadores expertos lograron reproducir
un BIOS 100tomó casi un año y 1 millón de dólares. Esta empresa llegaría a conocerse como
Compaq Computer, que creó la primera computadora totalmente compatible con la IBM.
Posteriormente otra empresa llamada Phoenix Technologies produjo otra versión del BIOS
11
12
Procesador: 8080
Fecha de introducción: 1974
Frecuencia Inicial: 2 MHz
Procesador: 8086
16 KB
Fecha de introducción: 1978
Transistores: 6000
Frecuencia Inicial: 5 MHz
Ancho de vías: 6 micras
Transistores: 29000
Ancho de vías: 3 micrones
Figura 1.23: Procesador 8080
Figura 1.24: Procesador 8086
13
14
Procesador: 8088
Procesador: 80286
Fecha de introducción: 1978
Fecha de introducción: 1982
Frecuencia Inicial: 5 MHz
Frecuencias: 6 a 12MHz
1 MB
16 MB
Transistores: 29000
Transistores: 134000
Ancho de vías: 3 micras
Ancho de vías: 1.5 micrones
Figura 1.26: Procesador 80286
Figura 1.25: Procesador 8088
15
16
Procesador: 80486
Fecha de introducción: 1989
Frecuencias: 25 a 100MHz
4 GB
Procesador: 80386
Transistores: 1.2 millones
Fecha de introducción: 1985
Ancho de vías: 0.8 micras
Frecuencias: 16 a 33MHz
4 GB
Transistores: 275000
Figura 1.28: Procesador 80486
Ancho de vías: 1 micra
Figura 1.27: Procesador 80386
Procesador: Pentium I
Fecha de introducción: 1993
Frecuencias: 66 a 233 MHz
Transistores: 3.1 a 4.5 millones
Ancho de vías: 0.35 micras
Figura 1.29: Procesador Pentium I
17
18
Procesador: Pentium II
Fecha de introducción: 1997
Frecuencias: 233 a 450 MHz
Procesador: Pentium Pro
Transistores: 7.5 millones
Fecha de introducción: 1995
Tamaño de transistor: 280nm
Frecuencias: 150 a 200 MHz
Ancho de vías: 0.25 micras
Transistores: 5.5 millones
Ancho de vías: 0.35 micras
Figura 1.31: Procesador Pentium II
Figura 1.30: Procesador Pentium Pro
19
20
Procesador: Pentium III
Procesador: Pentium IV
Fecha de introducción: 1999
Fecha de introducción: 2000
Frecuencia Inicial: 450MHz a 1.3 GHz
Frecuencias: 1.4 a 3.7 GHz
Transistores: 28 millones
Transistores: 42 a 178 millones
Tamaño de transistor: 180nm
Tamaño de transistor: 180nm
Ancho de vías: 0.18 micras
Ancho de vías: 0.09 micras
Figura 1.32: Procesador Pentium III
21
Figura 1.33: Procesador Pentium IV
22
Procesador: Dual Core
Procesador: Itanium
Fecha de introducción: 2006
Fecha de introducción: 2001
Frecuencias: 1.3 GHz a 2.8 GHz
Frecuencia Inicial: 733MHz
Transistores: cerca de 410 millones
Transistores: 25 millones
Tamaño de transistor: 65 nm y 45 nm
Ancho de vías: 0.18 micras
Figura 1.37: Procesador Dual Core
Figura 1.34: Procesador Itanium
Procesador: Core 2 Duo
Fecha de introducción: 2006
Procesador: Xeon
Frecuencias: de 1.06 GHz a 3.33 GHz
Fecha de introducción: 2001
Transistores: 420 millones
Frecuencia Inicial: 1.7GHz
Tamaño de transistor: 65nm y 45nm
Transistores: 42 millones
Ancho de vías: 0.18 micras
Figura 1.38: Procesador Core 2 Duo
Figura 1.35: Procesador Xeon
Procesador: Core i7
Fecha de introducción: 2008
Frecuencias: 2.66 GHz a 3.33 GHz
Procesador: Pentium M
Transistores: 731 millones
Fecha de introducción: 2003
Tamaño de transistor: 45nm.
Frecuencias: 900 MHz a 2,26 GHz
Transistores: 77 millones
Tamaño de transistor: 130nm
Ancho de vías: 0.09 micras
Figura 1.39: Procesador Core i7
Figura 1.36: Procesador Pentium M
23
24
Capítulo 2
La CPUCR
Con el n de crear un conocimiento básico en el estudio de las estructuras de computadores
los ingenieros Dr. Randolph Steinvorth y el Ing. Marco Vásquez describieron la CPUCR
utilizando conceptos aplicables a cualquier computador.
Figura 2.1: Estructura de un computador IAS
2.1.
Arquitectura de un computador
2.1.1.
Arquitectura de von Neumann
2.1.2.
Arquitectura de Harvard
La arquitectura de John von Neumann fue propuesta en 1945 para un nuevo computador,
El termino proviene de la computadora Harvard Mark I, que almacenaba las instrucciones
el EDVAC (Electronic Discrete Variable Computer) pues cuando se trabajaba con la ENIAC
en cintas perforadas y los datos en interruptores, de manera contraria a la arquitectura de
era extremadamente tedioso cargar y modicar programas. El proceso de programación se
von Neumann, pues, en la arquitectura Harvard se utilizaban dispositivos de almacenamiento
tornaría más fácil si el programa tuviese una forma adecuada como para ser guardado en la
físicamente separados tanto para las instrucciones como para los datos.
memoria junto a los datos, asi, el computador tomaría sus instrucciones leyéndolas de memoria. Para 1946 von Neumann y sus colegas comenzaron el diseño de un nuevo computador
de programa almacenado al que llamaron IAS. Un computador con esta arquitectura está
compuesto por:
1. Una memoria principal que almacena datos e instrucciones, según las características
de la aplicación los programas pueden estar en el computador almacenados en una
memoria de solo lectura o bien ser cargados en memoria de lectura/escritura cuando
van a ser ejecutados. Además los resultados intermedios, los parámetros utilizados por
el programa y los resultados nales deben ser cargados en memoria de lectura/escritura.
2. Una unidad lógica aritmética encargada de realizar operaciones lógicas.
3. Una unidad de control que ejecuta las instrucciones localizadas en la memoria para su
posterior ejecución.
4. Puertos de entrada/salida para conectar elementos periféricos gobernados por la unidad
de control.
Figura 2.2: Estructura de un computador Harvard
25
26
2.2.
CPUCR: señales de control
2.2.3.
La CPUCR originalmente disponía de un bus de direcciones de 12 líneas, un bus de datos
bidirecional de 6 bits y un bus de control de doce líneas. Sin embargo, en el año 2005 los
ingenieros Esteban Ortiz Cubero y Warren Alvarado Pacheco se dieron la tarea de generar
Línea de reloj (RLJ )
Esta señal es recibida de una base de tiempos externa (una onda cuadrada de 2MHz que
implica un periodo es de 500 ns) que sincroniza las acciones de la CPUCR, dichas acciones
se completan en el anco decreciente del ciclo de reloj.
un modelo sintetizable en compuertas estándar de la CPUCR. Esta versión mejorada de la
CPUCR disponía de un bus de direcciones de 16 líneas, un bus de datos bidireccional de
8 bits y se redujo el bus de control a once líneas debido a los requerimientos de espacio en
silicio, eliminando la señal de WAIT de la descripción original.
2.2.4.
Línea de reposición (RP S )
Se activa en bajo e inicia el funcionamiento de la máquina llevándola a un estado inicial
conocido a partir del cual comienza a operar, cancelando inmediatamente cualquier actividad
en ejecución e inicializando el contador de programa en cero y poniendo en alto la bandera
de inhibición de interrupción (I).
Si la línea
RP S
está en alto, la CPUCR ejecuta su primera instrucción el la posición de
memoria @0000 y no acepta interrupciones en ese momento debido a que la bandera I se ha
levantado anteriormente, esto permite correr un programa que lleve al sistema a un estado
inicial conocido.
Usualmente se desea que la línea
RP S
se active automáticamente al encenderse el com-
putador, o manualmente, por medio de un interruptor de contacto momentáneo que permita
reponerlo en cualquier momento después del encendido.
Figura 2.3: CPUCR0
Figura 2.4: CPUCR1
2.2.5.
Línea de Lectura/Escritura (L/E )
Mediante la línea L/E la CPUCR le indica a la memoria principal y a los puertos de
Adicionalmente a las líneas descritas en las guras 2.3 y 2.4 la CPUCR recibe su alimentación de potencia mediante VCC y REF.
entrada/salida el sentido en que se realizan las transferencias de datos. Un uno lógico indica
que el dato se traslada de la memoria o puerto de entrada hacia la CPUCR (lectura), y un
cero indica que el dato sale de la CPUCR (escritura).
2.2.1.
Bus de direcciones (A0
. . . A15 )
Originalmente, al solo poseer 12 líneas en el bus de direcciones se podían seleccionar hasta
2.2.6.
Línea de referencia a memoria (M )
4096 posiciones de memoria, al aumentar a 16 líneas del bus de direcciones en la CPUCR1 se
La CPUCR utiliza la línea M con el n de indicar si el valor en el bus de direcciones
tiene la capacidad de seleccionar cualquiera de las 65536 posiciones de memoria. Normalmente
corresponde a una dirección de memoria (M=1) o de puertos de E/S (M=0). Ya que la mayoría
estas líneas las maneja la CPUCR, pero durante el acceso directo a la memoria, la CPUCR
de las transacciones se llevan a cabo con la memoria, la línea M se mantiene generalmente
cede su control al dispositivo que va a realizar la transferencia.
en uno. Solo cuando se ejecuta una instrucción INP o una instrucción OUT es que se realiza
una transacción con el espacio de E/S, poniéndose M en cero.
2.2.2.
Bus de datos (A0
. . . A7 )
El bus de datos constaba de 6 líneas para la CPUCR0 y de 8 líneas para la CPUCR1,
2.2.7.
Línea de ciclo de búsqueda (CB )
su utilidad radica en que sirve para trasladar instrucciones y datos entre la CPUCR, la
Durante el ciclo de búsqueda la CPUCR va a memoria para leer el código de la próxima
memoria y los puertos de E/S. El sentido que llevan los datos en el bus lo determina la línea
instrucción a ejecutar. La línea CB se pone en uno para indicar el inicio del ciclo de memo-
de lectura/escritura L/E, cuando la línea se encuentra en alto, se estarán leyendo los datos
ria en que esto se va a realizar. Con esta señal es posible detectar, externamente esta situación.
de la memoria, si por el contrario la línea se encuentra en bajo, se escribirán los datos en la
memoria. El bus de datos también es cedido a un dispositivo externo durante la operación
de acceso directo a la memoria.
Un caso en donde se puede utilizar CB es para sincronizar la lectura de los códigos de
instrucción de uno o varios coprocesadores trabajando en conjunto con la CPUCR. El ciclo
de búsqueda es fácilmente detectado por los coprocesadores y éstos pueden entonces observar
en el bus de datos si la instrucción que viene es de ellos o pertenece a la CPUCR.
27
28
2.2.8.
Línea de ciclo de memoria (CM )
Todas las transacciones, ya sean instrucciones o datos, involucran un acceso al espacio
memoria o un acceso al espacio de E/S. Este proceso se le generaliza con el nombre de ciclo
de memoria. La línea CM le indica a los dispositivos externos a la CPUCR el inicio de un
ciclo de memoria. Todos los ciclos de memoria contienen dos ciclos de reloj, CM identica al
primero tomando un valor lógico de uno.
pueden completar la operación dentro del microsegundo que se dispone en el ciclo de memoria.
Línea de indicación de detenido (HALT )
Cuando la línea de salida HALT esta en alto la CPUCR está indicando que se acaba de
ejecutar una instrucción HLT. En este caso la CPUCR esta totalmente detenida, por lo que
no se ejecuta ninguna instrucción más y no se responde a ninguna petición externa a través
de las líneas
IN T
y
SDM A.
Todas las otras líneas, incluyendo los buses de datos y direc-
ciones, permanecen en su estado al ejecutarse la instrucción HLT. La única forma de iniciar
la operación de la CPUCR es mediante una operación de reposición. Esta línea se conectaría
directamente a una luz indicadora para que el usuario de la CPUCR se percate de la situación.
El mecanismo que provee la instrucción HLT con la línea de salida HALT resulta útil
para que el procesador aborte todo tipo de actividad una vez que detecta una condición de
error fatal en el sistema.
2.2.10.
Línea de solicitud de interrupción (IN T )
operan con este tipo de transferencia y la forma activarla es por nivel bajo.
IN T
puede ponerse en cero en cualquier momento y la CPUCR reconocerá la
solicitud únicamente después de terminar de ejecutar la presente instrucción y si la bandera
I se encuentra en cero. El estado
IN T =0
entonces debe permanecer hasta que la CPUCR
reconozca la solicitud y sea vericada por medio de la señal INTOK.
2.2.11.
aligerando considerablemente el tiempo de respuesta, en situaciones donde varios dispositivos
hacen uso del mecanismo de interrupción. La sincronización para esta operación se establece
con la señal INTOK.
Línea de solicitud de acceso directo a la memoria (SDM A)
Esta entrada se activa con un nivel lógico de cero con el propósito de solicitar a la CPUCR
que se libere el bus de direcciones, el bus de datos y las líneas L/E, M y CM para establecer
una transferencia de datos directa entre algún dispositivo periférico y la memoria.
La solicitud de DMA ("Direct Memory Access") es reconocida hasta que se termina la
ejecución de la presente instrucción y si no hay una solicitud de interrupción pendiente
(IN T =0). Si existe una solicitud de interrupción, esta es atendida primero, saltando a la
rutina de servicio de interrupción y ejecutando la primera instrucción. Una vez ejecutada la
primera instrucción se atiende la solicitud de DMA.
Cuando la solicitud de DMA es reconocida, la línea BD se pone en uno al mismo tiempo
que la CPUCR pone en tercer estado sus salidas del bus de direcciones, bus de datos, L/E,
M y CM. El dispositivo puede entonces hacer uso de esas líneas para iniciar el acceso directo
a la memoria. Mientras el dispositivo mantenga
SDM A
en cero, éste tendrá el control de
transferencias en el computador y la CPUCR estará detenida. Una vez que
SDM A=1
la
CPUCR tomará control de nuevo y continuará su operación normal.
La función de esta línea es recibir las solicitudes de interrupción de los periféricos que
La línea
el dispositivo que genera la interrupción puede suministrar directamente el vector necesario,
2.2.12.
Esta señal es útil para realizar transacciones de datos con dispositivos lentos, que no
2.2.9.
las posiciones de memoria @7700 y @7701. Mediante un esquema de asignación de prioridades,
Línea de aceptación de interrupción (INTOK )
La línea de salida INTOK indica que se acepta la solicitud de interrupción y marca los
dos ciclos de memoria donde la CPUCR está adquiriendo el vector de interrupción. Cuando
Debido a este modo de funcionamiento, los dispositivos que soliciten DMA no deben prolongar su dominio del bus por mas de unos cuantos ciclos de memoria. Esto con el propósito de
lograr que el dispositivo que solicitó el servicio de interrupción sea atendido oportunamente.
2.2.13.
Línea de indicación de buses disponibles (BD )
La salida BD es activa en nivel alto y sirve para indicar a los dispositivos que solicitaron
DMA que su solicitud ha sido atendida. Una vez que BD=1 el bus de direcciones, el bus de
datos y las líneas L/E, M y CM son puestos en tercer estado por la CPUCR. El dispositivo
que solicitó el acceso directo a la memoria debe entonces hacer uso de las líneas cedidas para
iniciar sus transacciones con la memoria. Mientras el dispositivo mantenga
SDM A=0 la
SDM A
CPUCR mantendrá su condición de buses disponibles. Vea la descripción de la línea
para más detalles.
INTOK se hace uno el periférico que pidió la interrupción debe remover su solicitud. Esto
sirve para evitar que la subrutina de atención a interrupciones reconozca la solicitud que
está procesando como una solicitud nueva. Si el dispositivo no está diseñado para eliminar
su solicitud de esa manera, entonces le corresponde a la subrutina de servicio de interrupción
borrar la solicitud antes de admitir nuevas interrupciones.
2.3.
CPUCR: Memoria principal
La memoria principal está compuesta de un gran número de palabras o localizaciones.
Cada localización de memoria tiene una dirección. Si la memoria tiene 4096 palabras, sus
direcciones serán 0, 1, 2, . . . , 4095. Una palabra o localización puede usarse para almacenar
INTOK se puede usar también para tener un sistema de interrupciones vectorialmente
dirigido. Normalmente el único vector de interrupciones que tiene la CPUCR se adquiere de
29
un número binario (dato) o una instrucción del programa, codicada en forma binaria. Las
instrucciones de un programa se almacenan en la memoria en localizaciones sucesivas. El
30
computador lee una instrucción de la memoria y la ejecuta. Entonces, lee la próxima instruc-
4095 direcciones)
ción y realiza otra operación y así sucesivamente. En algunos computadores la memoria es
dividida en bloques iguales llamados páginas.
Para la CPUCR1 existe otro registro interno muy similar al PC, llamado RDR, que
determina en realidad la próxima dirección a la que apunta el bus de datos.
El tamaño de la página varía de un sistema a otro y está la mayor parte de las veces
condicionado a las necesidades de la CPU, para la CPUCR0 el tamaño de la memoria es de
4K palabras de 6 bits cada una (1K=1024), dividido en 64 páginas de 64 palabras cada una
y para la CPUCR1 se tienen páginas de 256 posiciones de memoria con un bus de datos de
16 bits, es posible direccionar hasta 65536 posiciones de memoria, cada una con 8 bits.
Figura 2.6: Registros y entradas/salidas de la CPUCR1
2.4.2.
El acumulador (A)
El acumulador es el componente principal para la manipulación de datos. Este registro
tiene la función de almacenar el resultado de operaciones lógicas y aritméticas, calculadas
en la ALU, que involucran uno o dos operandos a la vez. En muchas de las arquitecturas de
Figura 2.5: Memoria de la CPUCR1
computador, uno de los operandos proviene del acumulador y el segundo de la localización
de memoria especicada por la instrucción. El resultado de la operación se mantiene usualmente en A. El computador puede probar el resultado en A para determinar si contiene
2.4.
2.4.1.
CPUCR: Registros internos
El contador de programa (PC )
Al nal de la ejecución de cada instrucción, el contador de programa PC (del inglés Program Counter"), contiene la dirección de la localización de memoria que almacena la próxima
instrucción del programa. Este registro sigue la ejecución del programa e incrementa el contador de programa durante la ejecución de cada instrucción. Finalmente, el PC contiene la
dirección que apunta a la siguiente instrucción por ejecutarse. En algunos casos, el contenido
de PC puede ser cambiado por el mismo programa, transriendo la ejecución de instrucciones
alguna condición especial, por ejemplo si es cero, negativo, positivo etc. y tomar diferentes
decisiones basado en el resultado de la prueba.
El tamaño del acumulador no se determina tan fácilmente como en el caso del PC, sino
que depende de una serie de factores relacionados entre si. Como regla general, cuanto mayor
sea su tamaño, se puede procesar en forma simultánea más información de cualquier tipo.
Por lo tanto, se evidencia que el tamaño de A condiciona características del computador tales
como su velocidad de ejecución, la precisión de sus operandos y en forma indirecta el formato
de sus instrucciones. Sin embargo un acumulador grande requiere de mucha circuitería lo cual
afecta considerablemente el costo total del computador, lo que lleva al eterno dilema de los
ingenieros de ajustar convenientemente rendimiento y costo.
en otra sección del programa.
Para tener acceso a un espacio total de memoria de 64k palabras es necesario un total de
16 bits en el registro PC. De esta forma se pueden generar direcciones del 0 al 65535 inclusive
(anteriormente 4K palabras con 12 bits en el registro PC donde se podían generar de 0 a
31
El tamaño en bits del acumulador, determina el ancho de la memoria principal y esta
es una de las características más importantes de una CPU. Los tamaños de palabra más
frecuentes que se encuentran son 4, 8, 16, 32, 64 y 128 bits. La CPUCR1 ha sido rediseñada
32
para tener 8 bits en el acumulador, pues anteriormente se tenían solo 6 bits.
Existen otras conguraciones de CPU que contienen un grupo de registros de uso general
que duplican las funciones del acumulador. En estos computadores, se pueden realizar operaciones aritméticas no solamente entre los registros y alguna localización de memoria, sino
entre los mismos registros. Esto permite gran exibilidad a la hora de hacer un programa y
en ciertas ocasiones hasta se pueden mantener todas las variables del programa dentro de los
registros de la CPU aumentando así la velocidad de ejecución del mismo.
2.4.3.
El registro de estado (S )
complemento a dos.
La bandera de rebase (V)
Esta bandera sirve para detectar condiciones de rebase en operaciones aritméticas con
signo. En forma general, el bit más signicativo de una palabra, bit 7, representa el signo de
la magnitud contenida en los bits restantes, bits 6 a 0. Un 1 en el bit más signicativo, equivale a un signo negativo y un cero a un signo positivo. Los números con signo se representan
en notación complemento a dos.
La condición de rebase se presenta cuando el resultado de una operación tiene un valor
Este registro tiene la función de almacenar información importante para la programación,
generalmente referente al contenido del acumulador o al estado de la CPU.
mayor que el que se puede contener en ocho bits, de -127 a +128. La bandera V se pone
en 1 cuando se genera un llevo de la posición A6 a la posición A7, o de la posición A7 a la
bandera de llevo C exclusivamente.
En la CPUCR, el registro de estado S (del inglés status), es un registro formado por
ocho ip ops, cuatro de los cuales retienen información acerca del resultado de la última
operación con el acumulador, y el restante se utiliza para memorizar una acción de control
pertinente a la
CPU. Los primeros cuatro son, según la Figura 2.2, los ip ops de: signo, N; rebase, V;
cero, Z y acarreo, C. El último se llama ip-op de inhibición de interrupción I.
La bandera de cero (Z)
Cuando todos los bits del acumulador se encuentran en cero, esta bandera se pone en 1.
La bandera de acarreo (C)
El ip-op C, se utiliza como una extensión del acumulador para almacenar el acarreo
Comúnmente se les reere también como banderas de condición y se utilizan para tomar
decisiones durante la ejecución del programa.
o debo que genera la posición A7 en las operaciones que superan su capacidad de números
positivos de 8 bits.
También, se utiliza para conectar en lazo, el dígito más signicativo y el menos signicativo
de A. Este lazo se puede utilizar para desplazar el contenido de A hacia la izquierda o a la
derecha, bajo control de programa.
La bandera de interrupción (I)
Sirve para permitir o prohibir la interrupción externa del programa que se está ejecutando.
En situaciones especiales, es necesario que un dispositivo externo interrumpa la ejecución
del presente programa para que se le brinde atención inmediata. Como un ejemplo se podría
citar una unidad de discos que está buscando los datos pedidos por la CPU; en el momento
que se encuentran, la CPU debe tomarlos o de lo contrario se perderán, por causa de la
rotación que lleva el disco y no volverán a estar disponibles sino hasta la siguiente vuelta.
La interrupción permite a la CPU dejar el curso normal de sus labores para atender una
situación especial.
Figura 2.7: Registro de estado (S)
También se puede dar el caso contrario: el computador está realizando una labor especial
y no desea ser interrumpido. La bandera de interrupción I sirve para habilitar o inhibir las
interrupciones a la CPUCR.
La bandera de signo (N)
El contenido de esta bandera es copia el del bit más signicativo del acumulador. Este
bit representa el signo del número en el acumulador si se interpreta como un número en
33
34
2.4.4.
El puntero de pila (P)
Es necesario recordar que los datos apilados bajo control de programa se desapilan en
La pila es un conjunto bien denido de posiciones de memoria, en la cual los datos entran
(se apilan) y salen (se desapilan), siguiendo la regla El último que entra es el primero que sale .
En inglés se le conoce como stack y la regla es Last In First Out o LIFO. Su función primordial es la de servir como medio para almacenar la dirección de retorno después de la
ejecución de una subrutina. Las posiciones de memoria de la pila son direccionadas a partir
una secuencia inversa a la que fueron almacenados: Si el programa apila los datos U, V, X,
Y y Z en ese orden, cuando los desapile, los deberá leer en el orden Z, Y, X, V y U. También
es claro que, si al momento de salto o de retorno a una subrutina, el número de apilaciones
no es igual al número de desapilaciones realizadas en esa subrutina, se perderá el control del
programa, debido a información sobrante o faltante en la pila.
de un registro especial generador de direcciones llamado el apuntador de pila o puntero de
la pila (P). Este registro es controlado automáticamente por la CPU para que el acceso a la
2.5.
CPUCR: Conjunto de instrucciones
pila se realice según la regla antes mencionada.
Los computadores contienen una gran variedad de instrucciones determinadas según el
Durante los accesos a la pila, la CPU se encarga de incrementar el puntero de la pila de-
diseño de la CPU. Generalmente se clasican de diferentes maneras, una de las cuales es
spués de cada escritura y lo decrementa antes de cada lectura. Este proceso, causa el efecto
clasicar las instrucciones basadas en la parte del computador a la que se reere la instrucción,
de último que entra, primero que sale. Sin embargo, el mismo efecto se obtiene si la CPU
o bien basado en la función que realiza cada instrucción. Por ejemplo:
decrementa el apuntador después de cada escritura y lo incrementa antes de cada lectura.
La diferencia radica en el hecho de que la pila crece hacia posiciones de memoria más altas
X
Instrucciones de Referencia a Memoria:
Se distinguen por el hecho de que dirigen el computador para proceder en una lo-
(positivamente) en un caso, y en sentido opuesto (negativamente) en el otro. Después de un
calización de memoria particular. La instrucción le dice al computador cual es esa
acceso a la pila, el puntero contiene una dirección que apunta hacia la próxima localización
dirección. Por ejemplo, ADD @0300 dirige el computador para obtener un operando de
disponible para almacenar un dato.
la localización @0300.
La pila de la CPUCR tiene un crecimiento positivo, y después de accesarla, el apuntador
contiene la dirección de la próxima localización disponible para apilar un dato. Además, el
X
Instrucciones de Referencia a Registros:
puntero de pila, P, es de 8 bits y limita la pila a solo 256 posiciones, ubicadas automática-
Esta instrucciones realizan una variedad de operaciones sin necesidad de referirse a una
mente por la CPUCR en la última página de la memoria (página $FF). La ubicación de la
localización de la memoria. Por ejemplo, CLA es una instrucción que se reere única-
base de la pila, es decir, la primera localización disponible en la pila, no es necesariamente
mente al acumulador.
la primera posición de memoria de la página $FF, ésta se puede escoger usando la instrucción TAP, cuando se ha cargado previamente A con el valor deseado. En otras CPUs la pila
puede ubicarse en cualquier parte de la memoria principal y el programador puede asignarle
X
equipo periférico. Por ejemplo, las instrucciones INP y OUT transeren datos entre el
acumulador de la CPUCR y los dispositivos de entrada/salida:
El almacenamiento y recuperación de datos de la pila se produce bajo control de programa, o automáticamente bajo control de la CPU. Bajo control de programa, se utilizan las
INP PUERTO
OUT PUERTO
instrucciones PHA y PHS para apilar los contenidos del registro A y del registro S respectivamente. Las instrucciones PLA y PLS toman el dato ubicado en la cumbre de la pila (lo
desapilan) y lo depositan en A o S según sea el caso. El almacenamiento automático de datos
en la pila, se produce cuando se salta a una subrutina de atención de interrupción o cuando
Instrucciones de Referencia a E/S:
Las instrucciones de E/S realizan la transferencia de datos entre el computador y el
el tamaño que considere necesario para la aplicación que está desarrollando.
X
equivale a A
←− (P U ERT O)
←− (A)
equivale a PUERTO
Movimiento de datos, instrucciones lógicas y aritméticas:
se ejecuta la instrucción de salto a subrutina JSR. En ambos casos, se apila la dirección de
Estas instrucciones tienen que ver con el movimiento de información entre el registro
la siguiente instrucción a ejecutar al retornar de la pila.
de trabajo y la memoria principal. La instrucción debe especicar la dirección del
movimiento, la fuente y el destino del dato. Las operaciones lógicas y aritméticas tienen
La ejecución de JSR, consiste en apilar la parte alta y luego la baja del valor del PC
que ver con operaciones entre dos operandos. La instrucción debe especicar el tipo de
que, al ir la CPU ejecutando la instrucción JSR, ya se encuentra apuntando a la próxima
operación, la fuente y el destino. La fuente mantiene el primer operando y el destino el
instrucción. Una vez apilada esta dirección, se produce el salto al inicio de la subrutina.
segundo operando. Luego de la operación el contenido de la fuente se mantiene igual y
el destino guarda el resultado, es usual se utilizar como destino el acumulador.
Las instrucciones de regreso de interrupción RTI y regreso a subrutina RTS, causan durante su ejecución, una recuperación automática de datos de la pila, leyendo primero la parte
baja y luego la parte alta de la dirección de retorno, para reponerlas al contador de programa.
X
Instrucciones de control:
Estas instrucciones estan vinculadas la modicación del curso normal del programa y
la alteración del estado de la CPU, por ejemplo las instrucciones de salto condicional e
incondicional.
35
36
X
Instrucciones de subrutina:
Tienen que ver con la transferencia de ejecución del programa principal a un subprograma y con el retorno desde este, al programa principal.
X
Instrucciones de referencia a registros:
Las intrucciones de este tipo tienen que ver únicamente con un operando y se reeren
a la modicación de los registros internos de la CPU.
En la tabla 2.1 se presentan los mnemotécnicos del conjunto de instrucciones de la CPUCR y su signicado en español y en la tabla 2.2 se especica el funcionamiento de cada una
de las instrucciones y su relación con las banderas de condición.
La última columna de la tabla 2.2 indica cuales son las banderas de condición que podría
modicar la instrucción al ser ejecutada. La bandera Z se pondrá en 1 si el valor del acumulador es cero, de otra forma se pondrá en cero. En operaciones aritméticas sin signo, la
bandera C se pondrá en 1 cuando el resultado supere 255. La bandera de acarreo funciona
también como bandera de "debo.en forma complementada. Es decir, que con la operación
SUB la bandera de acarreo se pone en 1 si el resultado es mayor o igual a cero y se borra
para indicar un debo, si el resultado es menor que cero. La bandera de rebase V, debe ser
considerada solamente cuando se realizan operaciones con signo, donde el bit más signicativo indica el signo de la magnitud representada en los bits restantes de la palabra. En las
operaciones ADD y SUB, la bandera de rebase se pone en 1 cuando el resultado supera +127
o -128, de otra forma se borra. La bandera C no tiene signicado real en operaciones con
números representados en complemento a 2.
Todas las operaciones aritméticas con signo se realizan en complemento a 2. Es decir, los
números negativos se representan como el complemento a 2 del número positivo de la misma
magnitud.
Para ilustrar el funcionamiento de las instrucciones, se presenta en la tabla 2.3 un programa de ejemplo en el que ahora no interesa su sentido lógico. En las primeras dos columnas
se enumeran las instrucciones del programa y las localizaciones en que se encuentran. Obsérvese que todas las direcciones están codicadas en octal. En las columnas restantes se
detalla el contenido del registro S, el acumulador y las dos localizaciones de memoria que
se manipulan en el programa. La primera la de la tabla muestra el contenido inicial de los
registros de interés. Al ejecutarse LDA @1523, el contenido de A se sustituye por el contenido
de la posición @1523. Esta instrucción eventualmente modica las banderas N y Z que en
este caso permanecen inalteradas. La siguiente instrucción, complementa el contenido de A,
provocando la alteración del registro de status, debida al cambio del signo del dato en el
acumulador. El lector puede comprobar los resultados producidos por la ejecución del resto
del programa haciendo uso de la Tabla 2.2.
Merece aclaración adicional el funcionamiento de las instrucciones ROL y ROR, pues estas
Mnemotécnico Inglés
ADD
AND
BCC
BCS
BEQ
BMI
BNE
BPL
BVC
BVS
CLA
CLC
CLI
CPA
DCA
HLT
INA
INP
JMP
JSR
LDA
NOP
ORA
OUT
PHA
PHS
PLA
PLS
ROL
ROR
RTI
RTS
SEC
SEI
STA
SUB
TAP
TPA
ADD
AND
Branch if Carry Clear
Branch if Carry Set
Branch if EQual
Branch if MInus
Branch if Not Equal
Branch if PLus
Branch if V Clear
Branch if V Set
CLear Accumulator
CLear Carry ag
CLear I ag
ComPlement Accumulator
DeCrement Accumulator
HaLT
INcrement Accumulator
INPut
JuMP
Jump SubRoutine
LoaD Accumulator
No OPeration
OR Accumulator
OUT
PusH Accumulator
PusH Status
PuLl Accumulator
PuLl Status
ROtate Left
ROtate Right
ReTurn from Interrupt
ReTurn from Subroutine
SEt Carry ag
SEt Interrupt ag
STore Accumulator
SUBtract
Transfer A to P
Transfer P to A
Tabla 2.1: Signicado de los mnemotécnicos de la CPUCR
instrucciones realizan una rotación del acumulador con la bandera C. Al ejecutarse, todo el
contenido del acumulador se desplaza un bit a la izquierda o a la derecha, según sea el caso,
utilizando la bandera de acarreo para cerrar el lazo, ejemplos de su operación, se encuentran
en las localizaciones @514 y @524 del programa ejemplo de la tabla 2.3.
37
Acción
Suma
Y lógica
Salta si C=0
Salta si C=1
Salta si acumulador es 0
Salta si acumulados es negativo
Salte si acum. distinto de 0
Salte si acum. es positivo
Salte si V=0
Salte si V=1
Borre el acumulador
Borre la bandera C
Borre la bandera I
Complemente el acumulador
Decremente el acumulador
Deténgase
Incremente el acumulador
Entrada
Salte
Salte a subrutina
Cargue el acumulador
No opere
O lógica
Salida
Apile el acumulador
Apile el registro S
Desapile el acumulador
Desapile el registro S
Rotación a la izquierda
Rotación a la derecha
Regrese de interrupción
Regrese de subrutina
Ponga la bandera C a 1
Ponga la bandera I en 1
Almacene el acumulador
Reste
Transera A a P
Transera P a A
38
N - - Z - - - - N V - Z C
N V - Z C 1
N - - Z N - - Z - - - - N - - Z - - - - - - - - - - - - N V I Z C
- - I - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - N - - Z N - - Z N V - Z C
N V - Z C 2
N - - Z C
N - - Z C
- - - - N - - Z - - - - C
- - - - C
- - I - - - I - N - - Z - - - - -
@0500-@0502
@0503
@0504
@0505-@0507
@0510
@0511-@0513
@0514
@0515-@0517
@0520
@0521-@0523
@0524
@0525-@0527
@0530
LDA @1523
CPA
INA
STA @1523
CLA
SUB @1523
ROL
ADD @7701
DCA
AND @7701
ROR
ORA @1523
HLT
Estado Acumulador Contenido Contenido
N-VIZC
de @1523 de @7701
101000
101000
001000
001000
001000
001010
100000
000001
000001
000001
000011
100000
100000
100000
101010
100011
011100
011101
011101
000000
100011
000110
000010
000001
000000
100000
111101
111101
100011
100011
100011
100011
011101
011101
011101
011101
011101
011101
011101
011101
011101
011101
111100
111100
111100
111100
111100
111100
111100
111100
111100
111100
111100
111100
111100
111100
Tabla 2.3: Ejemplo de ejecución de instrucciones en CPUCR0
2.6.
CPUCR: Modos de direccionamiento
Se llaman modos de direccionamiento, a los diferentes métodos que tiene la CPU para
obtener los operandos de la memoria principal. La forma general usada hasta ahora en in-
si C=0 no ha ocurrido un debo
<Código de instrucción><dirección de memoria donde se encuentra el operando>
Sin embargo, esta es solamente una de las formas de obtener o direccionar el operando
de la memoria. Según veremos, tanto el número de operaciones distintas que puede realizar
una CPU como sus modos de direccionamiento, están condicionados por el tamaño del código de instrucción. En la CPUCR, el código de instrucción siempre ocupará una posición de
=ACARREO,
memoria y está dividido en dos partes como lo muestra la Figura 2.8.
2 Idem
1 DEBO
Entrada/Salida
Referencia a
registros
Control
Subrutina
LDA
STA
ADD
SUB
AND
ORA
PHA
PLA
HLT
NOP
PHS
PLS
RTI
JMP
BEQ
BNE
BCS
BCC
BPL
BMI
BVS
BVC
JSR
RST
CLA
CPA
INA
DCA
ROL
ROR
TAP
TPA
SEC
CLC
SEI
CLI
INP
OUT
2,3
3
2,3
2,3
2,3
2,3
1
1
1
1
1
1
1
3
2
2
2
2
2
2
2
2
3
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
strucciones de referencia a memoria es la siguiente:
Movimiento de
Datos, Aritméticos
y lógicos
Tipo de instrucción
Mnemotécnico
Número de palabras
Operación realizada
A ←− (M )
M ←− (A)
A ←− (A) + (M )
A ←− (A) − (M )
A ←− (A) ∩ (M )
A ←− (A) ∪ (M )
(A) ↓
↑A
Detenga la CPUCR =⇒ DI
Operación nula =⇒ DI + 1
(S) ↓
↑S
↑ P C; I ←− 0; =⇒ (P C)
=⇒ M
(Z)=1 =⇒ M ; (Z) = 0 =⇒ DI + 2
(Z)=0 =⇒ M ; (Z) = 1 =⇒ DI + 2
(C)=1 =⇒ M ; (C) = 0 =⇒ DI + 2
(C)=0 =⇒ M ; (C) = 1 =⇒ DI + 2
(N)=0 =⇒ M ; (N ) = 1 =⇒ DI + 2
(N)=1 =⇒ M ; (N ) = 0 =⇒ DI + 2
(V)=1 =⇒ M ; (V ) = 0 =⇒ DI + 2
(V)=0 =⇒ M ; (V ) = 1 =⇒ DI + 2
DI+3 ↓; =⇒ M
↓ P C; =⇒ (P C)
A ←− 00
A ←− (A)0
A ←− (A) + 1
A ←− (A) − 1
A ←− A6 ... A0 , C; C ←− A7
A ←− C, A7 ... A1 ; C ←− A0
P ←− (A)
A ←− (P )
C ←− 1
C ←− 0
I ←− 1
I ←− 0
A ←− (P U ERT O)
PUERTO ←− (A)
Banderas alteradas
Localización Instrucción
Tabla 2.2: Conjunto de instrucciones de la CPUCR
Figura 2.8: Código de instrución
Los tres bits menos signicativos de la palabra, denen el modo de direccionamiento de la
instrucción y los bits 3, 4 y 5 determinan el código de operación. En los casos que se requiera,
39
40
Tipo de
direccionamiento
(D2-D0 octal)
Inmediato
Absoluto
Relativo
Indirecto
Implícito
Acumulador
Control
Entrada/Salida
Código de operación
(D7-D3 octal)
0
1
2
3
4
5
6
7
0
LDA
LDA
BEQ
LDA
•
CLA
TPA
INP
1
•
STA
BNE
STA
•
CPA
TAP
OUT
2
ADD
ADD
BCS
ADD
SEC
INA
RTI
3
SUB
SUB
BCC
SUB
CLC
DCA
RTS
4
AND
AND
BMI
AND
SEI
ROL
HLT
5
ORA
ORA
BPL
ORA
CLI
ROR
NOP
•
•
•
•
dirección en la que se desea efectuar la operación y luego se guarda la parte alta.
6
7
8 ... F
•
•
•
•
•
•
•
•
•
•
JMP
BVS
JMP
•
JSR
BVC
JSR
•
PLA
PLS
PHA
PHS
•
•
Por ejemplo un STA $5000 guarda el contenido del acumulador en la posición $5000.
EJEMPLO: La instrucción ADD indirecta es @23.
Tabla 2.4: Instrucciones de la CPUCR
la instrucción se completará con una o dos palabras denominadas DESPLAZAMIENTO D,
a partir de la(s) cual(es) se puede calcular LA DIRECCION EFECTIVA del operando. Esto
quiere decir, que el valor numérico del desplazamiento no es necesariamente igual a la dirección del operando, en cuyo caso, se le emplea como un medio que permitirá determinar su
localización.
Figura 2.9: Direccionamiento inmediato
Modo de direccionamiento
Direccionamiento inmediato
Bits menos signicativos
000
Direccionamiento absoluto
001
Direccionamiento relativo
010
Direccionamiento indirecto
011
Direccionamiento implícito
100
Direccionamiento de acumulador
101
2.6.3.
Direccionamiento indirecto
El direccionamiento indirecto cuenta también con tres palabras en su estructura. Las
instrucciones de este tipo aceptan como argumentos direcciones de memoria, sin embargo
la gran diferencia radica en que la dirección que se le suministra a la instrucción no es la
posición nal, sino más bien una dirección indirecta, la cual se crea a partir del contenido del
argumento.
Los valores 110 y 111 no se usan para denir un tipo de direccionamiento, sino que se
combinan con los códigos de operación para denir otras operaciones que puede realizar la
CPUCR. La Tabla 2.4 muestra todos los códigos de instrucción de la CPUCR.
2.6.1.
Direccionamiento inmediato
El modo inmediato está conformado por instrucciones de únicamente dos palabras de
longitud, la primer palabra corresponde al código de instrucción y la segunda corresponde a
un valor constante. Un ejemplo es la instrucción LDA $54, mediante la instrucción anterior
se carga el valor $54 en el acumulador.
2.6.2.
Direccionamiento absoluto
Las instrucciones con direccionamiento absoluto están formadas por tres palabras. A diferencia que el direccionamiento inmediato, se hace referencia a una posición de memoria la cual
Figura 2.10: Direccionamiento absoluto
por ser de un tamaño de 16 bits se ocupa dos posiciones de memoria para guardar su dirección. Primero se guarda el código de instrucción posteriormente se coloca la parte baja de la
41
Sea el caso de la instrucción ADD ($5000). Si se supone que el contenido de $5000 es
42
$01 y el contenido de $5001 es $25, el valor absoluto de la dirección será $2501, por ende el
contenido de esta nueva dirección es el que se sumará posteriormente al acumulador.
2.6.4.
Direccionamiento relativo
Este tipo de direccionamiento es utilizado por las instrucciones de salto condicional, el
argumento es el valor de un desplazamiento en complemento a dos. Debido a las limitaciones
que presenta el complemento a dos no se podrá hacer saltos de más de 130 posiciones hacia
adelante (ir incrementando el contador de posición) y 126 posiciones hacia atrás (ir decrementando el contador de posición).
Figura 2.12: Direccionamiento implícito
2.6.6.
Direccionamiento de acumulador
En este grupos se encuentran todas las instrucciones que tienen que ver con operaciones
hacia el acumulador y de igual forma que las implícitas solo están formadas por una palabra.
Ejemplo: CLA, CPA, INA, DCA, ROL, ROR, PLA, PHA.
Figura 2.11: Direccionamiento relativo
Por ejemplo si se tiene el contador de programa con el valor de $0005 y se da la instrucción
BCC $05, si la bandera de acarreo del registro de estados está en cero se produce el salto,
por lo que la CPUCR procede a sumar el valor $05 al PC, esto equivale a un salto de cinco
posiciones hacia adelante. Si el valor hubiese sido $F1, se hubiera realizado un salta hacia
atrás de 3 posiciones de memoria, ya que $F1 es $03 en complemento a dos.
2.6.5.
Direccionamiento implícito
Las instrucciones de este modo de direccionamiento están formadas por una única palabra,
la cual corresponde al código de instrucción. Algunas instrucciones son: SEC, CLC, SEI, CLI.
Figura 2.13: Direccionamiento de acumulador
43
44
como bien dice el refrán: "divide y vencerás".
Un método conocido con el cual se puede generar un programa en forma modular en tan
solo seis pasos es:
Capítulo 3
1.
Especicación del problema.
Este paso es fundamental para conocer exactamente cuál es el problema que se desea
resolver. La especicación debe ser sucientemente precisa para dar una buena idea de
Programación de computadores
los datos que se requieren y cómo se deben manipular.
2.
Por ejemplo: variables de entrada o de salida, constantes, vectores, matrices, punteros,
información, investigación cientíca, control de plantas industriales, procesamiento digital de
tablas, etc. Con esta lista se sabrá qué elementos debe manipular el programa para
señales, etc. Cualquier computador puede realizar estas aplicaciones si es programado ade-
llegar al resultado deseado.
cuadamente. Algunos computadores son más ecientes para ciertas tareas pero todos pueden
programarse para realizar cualquier trabajo. La generación de los "programas adecuados.es
entonces una función vital para la utilidad del sistema computador. En este capítulo veremos
Especicación de las estructuras de datos.
En este paso se enumeran los tipos de datos que van a ser utilizados en el programa.
Un computador es una herramienta de uso general; se puede utilizar en procesamiento de
3.
ciertas técnicas comunes de programación de computadores.
Denición del formato de las estructuras de datos.
La forma en que se manipulen los elementos del paso anterior es función directa del
formato que tengan las estructuras de datos denidas. El formato incluye la denición
3.1.
de cómo se almacenan las estructuras de datos en memoria; por ejemplo, número de
Diseño de programas
palabras usadas para representar una variable, modo de almacenar arreglos de datos,
punteros utilizados, etc.
No existen leyes ni fórmulas que nos sinteticen un programa único para una determinada
aplicación. Cada programador tiene sus gustos y defectos que inuyen directamente en el
programa que realiza por lo que se puede considerar un arte, sin embargo, este proceso artís-
4.
Especicación del algoritmo.
tico se puede ordenar para que la elaboración de programas sea lo menos frustrante posible.
En este punto se hace una descripción, preferiblemente con diagramas de ujo o con
La construcción modular de programas, reune tres ventajas que con el tiempo son apreciadas
algún pseudolenguaje de programación, del algoritmo que se desea usar.
por cualquier programador.
5.
X
Buscar la modularidad lógica del algoritmo.
La realización de un programa complejo se limita a completar una serie de programas
Una vez obtenido el algoritmo se deben indicar las operaciones que se realizarán con
mucho más sencillos.
cada una de las estructuras de datos presentadas en los pasos anteriores. Cada bloque
en el diagrama de ujo del algoritmo puede considerarse como un módulo lógico del
X
algoritmo.
Una vez terminado el programa cualquier corrección o cambio que se deba hacer es más
fácil de localizar y efectuar.
6.
X
Repetir los pasos 1 a 5 en los módulos que se formen.
Cada módulo puede luego ser analizado siguiendo los pasos 1, 2, 3, 4 y 5 hasta que todos
El programa es más fácil de comprender y su documentación es más sencilla de realizar.
los módulos obtenidos tengan la sencillez deseada. La programación de cada módulo
entonces es trivial y menos propensa a errores.
A este tipo de enfoque también se le conoce con el nombre de "top-down programming"que
signica programación de arriba hacia abajo. Un problema determinado es observado primero
desde
”arriba"para
tener una visión panorámica y ver que detalles deben resolverse. Cada
3.2.
Programación en lenguaje ensamblador
detalle es a su vez observado para ver que otros detalles se implican. Este proceso se va profundizado hasta que todos los "detalles por resolver"son triviales. El programa consiste ahora
La programación de la CPU de cualquier computador se debe realizar en su respectivo
en una serie de programitas triviales que una vez unidos solucionan el problema complejo,
lenguaje de máquina. La forma más eciente de hacerlo es con la ayuda de un ensamblador.
45
46
El programa ensamblador traduce un programa escrito simbólicamente, llamado programa
de nuevo y luego se debe ensamblar el texto corregido para generar un nuevo programa
fuente, en otro programa escrito en binario, llamado programa objeto como se ilustra en la
objeto ya corregido.
gura 3.1. El programa fuente no puede ser ejecutado por la CPU directamente y por eso
se le traduce con el programa ensamblador. El programa ensamblador utiliza como datos de
entrada el programa fuente y genera como datos de salida el programa objeto. La CPU sólo
puede ejecutar programas objeto ya que estos vienen escritos en binario.
Todo programa ensamblador consta de dos tipos de simbología. Aquella simbología que
corresponde a la usada por el lenguaje de máquina de la CPU y la simbología que utiliza el
ensamblador para indicar operaciones propias.
3.2.1.
Simbología del lenguaje de máquina
Todos los símbolos mnemotécnicos descritos en el capítulo anterior forman parte de la
Figura 3.1: Programación en ensamblador
simbología del lenguaje de máquina.
Se necesitan símbolos adicionales para distinguir el modo de direccionamiento usado. Los
Para poner en marcha la ejecución de un programa fuente en lenguaje ensamblador hay
que seguir los siguientes pasos:
modos de direccionamiento relativo, implícito y acumulador no necesitan distinción ya que
el código de instrucción en sí, dene el modo respectivo.
Todos los saltos condicionales utilizan direccionamiento relativo y no existen otras in-
1.
Escritura y edición del programa fuente.
El programa fuente en realidad es un texto que se debe de almacenar en el computador.
El texto se escribe y se corrige con la ayuda de un editor de texto. El editor de texto se
strucciones que lo utilicen.
Un caso distinto es la instrucción LDA que tiene tres modos de direccionamiento.
debe traer a la memoria del computador, u=junto al texto que se está escribiendo, para
trabajar en el programa fuente. El programador, mediante un dispositivo de entrada
Caso Modo de direccionamiento
Instrucción
(teclado), le suministra al editor de texto los caracteres que serán parte del programa
A
Direccionamiento absoluto
LDA
fuente. Cualquier corrección que se deba hacer sobre el texto también se hace a través
B
Direccionamiento indirecto
LDA (ADDRESS )
del teclado. Una vez que se termina de escribir el programa fuente se puede dejar en
C
Direccionamiento inmediato
LDA #CON ST
ADDRESS
memoria o se puede almacenar en disco.
2.
Casos:
Ensamblaje del programa fuente.
Para poder realizar la traducción del programa fuente, debe cargarse el programa ensamblador en la memoria del computador. El editor de texto ya no es necesario y puede
ser removido de la memoria. El programa fuente debe permanecer accesible al programa
ensamblador ya que este utiliza al primero como sus datos de entrada. Si hay suciente
memoria disponible, el programa fuente puede permanecer en ella; de lo contrario el
A) Si se quiere cargar el acumulador con el contenido de la dirección ADDRESS.
B)
Si se desea traer al acumulador el contenido de la localización de memoria cuya
dirección está almacenada en
ADDRESS
y
ADDRESS +1.
programa fuente puede suministrarse desde afuera si este fue almacenado en disco o en
una memoria USB, CD, DVD u otro al terminar con el editor. Finalmente la salida del
programa ensamblador es el programa objeto.
3.
Puesta en marcha del programa objeto.
El programa objeto se puede almacenar directamente en memoria si hay suciente
espacio o externamente en otro medio de almacenamiento de datos, se debe tener el
programa objeto en memoria para poder indicarle a la CPU que lo comience a ejecutar.
C) Si la constante se llama CON ST
el valor
3.2.2.
entonces la instrucción carga al acumulador con
CON ST .
Simbología para el ensamblador
Nombres
Un computador con suciente memoria es capaz de tener todos los programas alma-
Los nombres son usados para representar valores numéricos, pero se pueden usar para
cenados simultáneamente logrando así que todo el proceso se pueda realizar con más
identicar direcciones, etiquetas, variables y constantes. Cada nombre puede tener, en el ca-
rapidez. Si se debe corregir el programa fuente, es necesario utilizar el editor de texto
so de la CPUCR, hasta ocho caracteres alfanuméricos siempre que el primero sea una letra.
47
48
Carácter Base
Algunos ejemplos son:
Ninguno
$
@
VOLT1, VOLT2, X123, Y234, Y0, PRIMEROS
%
”
Contador de posición
10 - Decimal
16 - Hexadecimal
8 - Octal
2 - Binario
Alfanumérico
Tabla 3.1: Prejos para diferentes bases
El contador de posición, indicado en el programa fuente con el símbolo de asterisco "*",
le indica al ensamblador la posición de memoria en que se encuentra. Con el contador de
posición se va contabilizando la dirección de cada instrucción en el programa porque se actualiza su valor con cada instrucción que se traduce. De esta forma se logra asignar direcciones
valor de sen(α) para un conjunto nito de valores de
verdaderas a cada etiqueta denida en el programa. También se puede usar para iniciar los
forma que se almacene en memoria con el programa que se va a ejecutar. Estas son las
valores de constantes y asignar direcciones especícas a ciertos operandos.
constantes en tiempo de ejecución.
α. Esta tabla debe denirse de tal
El ensamblador reconoce una constante en tiempo de ejecución cuando se encuentra el
Constantes
comando WRD (de WoRD), o el comando DBWRD (de DouBle WoRD) seguido por la
Hay dos tipos de constantes que se pueden generar en un programa en lenguaje ensamblador:
constante a almacenar. WRD almacena una constante de precisión sencilla, es decir 8
bits, mientras que DBWRD almacena palabras de 16 bits (dos posiciones de memoria
consecutivas, parte baja primero).
La constante se almacenará en memoria en la dirección que tenga presente el contador
1. Constantes en tiempo de ensamble:
Estas constantes tienen validez únicamente durante el ensamble del programa fuente.
de posición del ensamblador, cada vez que se almacena una constante se incrementa el
Por ejemplo: se puede denir el valor numérico 12 con el símbolo DOCE con sólo hacer
contador de posición en uno para WRD y en dos para DBWRD. Supongamos que el
la asignación:
contador de posición del ensamblador contiene la dirección @1234, entonces las asignaciones mostradas a continuación resultan en el almacenamiento de datos en memoria
de la forma que muestra la gura 3.2.
DOCE = 12
De esta forma en vez de usar el número 12 se puede usar su símbolo y el resultado será
el mismo en el programa. La ventaja es más aparente cuando se considera la siguiente
situación: Supóngase que los datos tomados de una unidad de disco, se pueden leer a
partir de la posición de memoria @3456. Cada vez que se debe hacer referencia a esta
zona de memoria hay que repetir el número @3456 en el programa. Esto presenta dos
WRD @52
DBWRD @3365
WRD @10
inconvenientes. Primero, el número es difícil de recordar y segundo, si por algún motivo
Figura
esta dirección debe cambiarse entonces hay que buscar en el programa todos aquellos
memoria
3.2:
Almacenamiento
de
datos
en
lugares en que aparece @3456 para hacer la modicación. Si hacemos la asignación
DATDISCO = @3456
es más fácil recordar el símbolo y si luego hay que modicar su valor basta con modi-
Las constantes numéricas pueden ser expresadas en distintas bases numéricas o como
caracteres alfanuméricos. El tipo de base se especica con un prejo al número, como
se indica en la tabla 3.1.
car la asignación únicamente.
Por ejemplo para cargar el número 48 decimal al acumulador se puede hacer de cuatro
formas distintas:
2. Constantes en tiempo de ejecución:
Cuando se requieren constantes que se puedan usar durante la ejecución del programa,
como cuando se usa una tabla de datos. En un programa que calcule el seno de un
ángulo
α
puede ser conveniente tener una tabla almacenada en memoria que nos de el
49
LDA #48
LDA #$30
50
D2-D0
Octal
0
1
2
3
4
5
6
7
0
Esp
!
”
#
%
&
'
(D7-D3 octal)
1 2 3 4 5 6 7
(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8 @ H P
X
9 A I Q
Y
: B J R
Z
; C K S AL
< D L T Ret
= E M U Inc
> F N V Brr
? G O W Ecp
Operador Operación
8 ... F
+
<
>
=
•
•
•
•
•
•
•
•
Tabla 3.2: Código de caracteres para la CPUCR
suma
resta
selección de parte baja
selección parte alta
asigna el valor de la derecha
al símbolo de la izquierda
Tabla 3.3: Operadores para el ensamblador
Sin la alternativa de tomar decisiones, el programa estaría compuesto de un número de
instrucciones que se ejecutarían secuencialmente en el orden en que se encuentran almace-
LDA #@60
LDA # %110000
En el caso de las constantes alfanuméricas la constante numérica a la que se convierte
el carácter es su equivalente en binario según lo indica la tabla 3.2. Por ejemplo, la
instrucción LDA
#”A”
carga el número @41 en el acumulador.
En la tabla 3.2 se debe entender los siguientes términos:
Esp = Espacio.
nadas en memoria, sin posibilidad de modicar la secuencia.
En la escritura de un programa con operaciones de control deben resolverse tres problemas:
Colocación de etiquetas
Las decisiones siempre tienen más de una salida. En general para cada salida podría ser
necesario escribir un programa separado. Cada programa de datos debe tener su nombre o
etiqueta mediante la cual se pueda hacer referencia a él. Esto corresponde a la dirección
simbólica del inicio del programa.
AL = avance a la siguiente línea.
Ret = devuélvase al inicio de la línea.
Inc = borre pantalla y vaya a la primera columna de la primera línea.
Brr = retroceda una posición y borre el caracter que ahi se encuentra.
Ecp = abre la posibilidad de introducir secuencias de caracteres de control.
Prueba
El programa puede hacer decisiones y ramicaciones mediante las instrucciones de control.
Estas instrucciones no afectan o transmiten el dato, simplemente prueban alguna condición
y guían el programa en secuencias jas o variables.
Operadores
Con el uso de ciertos operadores se puede facilitar mucho la creación de constantes y direcciones. La tabla 3.3 nos muestra los operadores permitidos. Su evaluación es estrictamente
Elección de una vía de solución
de izquierda a derecha sin paréntesis y todos con igual prioridad. Los operadores de selección
Cuando se analiza la prueba, el programa debe dirigirse a una entre varias posibles ram-
de palabra permiten escoger la parte alta o la parte baja de una constante de doble precisión
icaciones, dependiendo del resultado de la prueba. Hablando en términos de programación
o una dirección para cargarla al acumulador o a cualquier posición de memoria.
se debe realizar un salto hacia la etiqueta que corresponde a la solución que se debe seguir.
3.2.3.
3.2.4.
Operaciones de control
Lazos
Una de las características más importantes de un computador, es su capacidad de tomar
Un lazo de programa es un conjunto de instrucciones que es ejecutado repetitivamente.
decisiones. La habilidad de tomar decisiones permite escribir un programa compuesto de un
Frecuentemente el computador debe realizar la misma tarea pero en diferentes conjuntos de
cierto número de ramicaciones, en donde cada una de ellas se ejecuta si se satisfacen cier-
datos. En este caso, el programa se puede repetir en el lazo, en vez de repetir el mismo
tas condiciones. El programa entonces se semeja a un árbol y deja de ser una secuencia de
conjunto de instrucciones en cada conjunto de datos.
instrucciones en línea recta.
En general un lazo de programa requiere cuatro pasos diferentes:
51
52
Inicio
comparar como se desee, con respecto a cero.
El inicio es la parte del programa antes del lazo que se encarga de preparar los parámetros
del lazo.
3.2.6.
Programación con índices
Frecuentemente, se desea operar sobre una lista de datos. Se realiza una operación en el
Procesamiento
primer dato de la lista, luego la misma operación en el segundo dato y así sucesivamente. De
Esta es la parte principal del programa de lazo y es donde se realiza el trabajo que deseamos que haga el computador.
esta forma, en la i-ésima iteración el programa toma el i-ésimo dato, Di, de la lista de datos
y realiza la operación F(Di). Seguidamente, se modica el subíndice i para que este apunte
al siguiente dato de la lista y se realice sobre éste la operación F.
Avance de lista
Existen computadores que proveen uno o varios registros especiales para ser usados como
índices de lista en un programa. A estos registros, se les puede incrementar, decrementar o
El lazo realiza la operación con una lista de datos. La operación se realiza con el primer
transferir sus contenidos con instrucciones especiales de la CPU.
elemento de la lista, luego con el segundo y asi sucesivamente.
Los registros índice permiten el uso de direccionamiento por índice, en el que la dirección
efectiva, es la suma de la dirección base que trae la instrucción y el número almacenado en
Prueba y direccionamiento
el registro índice. Una instrucción de este tipo, podría tener la forma:
El lazo debe ejecutarse una serie de veces y en cada una se debe comprobar si se ha com-
LDA TABLA, X
pletado el total de veces que se ha de operar, en cuyo caso se sale del lazo. La terminación
del lazo se puede efectuar de dos formas:
donde se le indica a la CPU, que el operando que debe cargar al acumulador, está en la
X
dirección que resulta al sumar la dirección TABLA, con el contenido del registro índice X.
A través de la cuenta: En este modo existen dos posibilidades, la primera es que se carga
Puede existir más de un registro índice; en tal caso, se podrían realizar operaciones sobre
al contador el número de eventos con cero y en cada ejecución del lazo se incrementa
varias listas. Para el caso de la CPUCR no se tiene registros índice y por lo tanto, tampoco
al contador. Se prueba cuándo se alcanza la cuenta nal y sale del lazo. En la segunda
instrucciones que los utilicen.
posibilidad, se carga al contador con la cuenta nal y se decrementa hasta llegar a cero.
X
A través de un dato especial: El nal de la lista de datos se puede marcar con un
dato que únicamente se usa para este propósito. Por ejemplo, si se sabe que una lista
de datos puede tener cualquier número, excepto el cero, entonces el cero es un buen
candidato para indicar el n de la lista. El lazo se concluye al encontrar el indicador
que se seleccionó.
3.2.7.
Subrutinas
Una subrutina, es una parte de un programa que resuelve por sí misma alguna operación
básica. El propósito principal de escribir una subrutina, es usarla en diferentes puntos en el
mismo programa o copiarla de un programa a otro.
El desarrollo de una subrutina, es igual al de un programa y se recomienda el uso de la
3.2.5.
Comparaciones entre números
Muy frecuentemente el programador se encuentra en la necesidad de determinar si el resultado de una operación aritmética es mayor, mayor o igual, igual, menor o igual o menor
programación modular, siguiendo los mismos pasos enumerados en la sección 3.1. No existe
un tamaño denido para una subrutina; puede usar solo unas cuantas posiciones de memoria,
o varios miles de instrucciones, estas se pueden clasicar en subrutinas abiertas y en subrutinas cerradas.
que cero. Estas condiciones se evalúan en forma distinta dependiendo de cómo se están interpretando los números: sin signo o con signo (en complemento a dos). Las únicas instrucciones
que pueden hacer uso completo de estas condiciones en la CPUCR, son ADD y SUB, porque
sólo ellas alteran todas las banderas aritméticas, a saber, N, Z, C y V.
Subrutina abierta
Una subrutina abierta es aquella que al insertarla en un programa se le realizan modicaciones para una parte especica del programa y según las variables con las que trabaja.
La instrucción SUB, además es útil para comparar dos números, ya que efectúa la resta
De este modo, se logran transferir los datos y resultados entre el programa principal y la
de un número en memoria con el contenido del acumulador. El resultado, se puede luego
subrutina. La codicación de la subrutina abierta varía según cambien sus argumentos. La
53
54
transferencia de argumentos es más eciente, ya que no se requiere de posiciones especiales
de almacenamiento.
El paso de parámetros a subrutinas, puede hacerse por medio de los registros de la CPU,
directamente a memoria, indirectamente a memoria, implícitamente, o por una combinación
de ellos. A su vez, el paso directo o indirecto, puede hacerse mediante la pila.
Un macroensamblador puede crear subrutinas abiertas automáticamente pues es un programa ensamblador que soporta macroinstrucciones.
X
Paso de parámetros por medio de registros en la CPU
Este paso de parámetros se realiza cuando el programa pasa y/o lee los parámetros de
Subrutina cerrada
la subrutina, por medio de los registros internos de la CPU. Para la CPUCR el registro
utilizado para este n sería el acumulador, siendo el paso de parámetros por medio de
Una subrutina cerrada es aquella que se encuentra fuera del programa principal y es us-
registros conveniente cuando se debe pasar un dato que se almacena en una sola palabra.
ada sin modicar su codicación. Se almacena una sóla vez en memoria, y debe ser puesta
en ejecución desde diferentes lugares de la secuencia de un programa mediante la instruc-
En algunas arquitecturas de CPUs, se dispone de varios registros de uso general que
ción JSR (que obliga a abandonar la secuencia normal del programa, para ir a la parte de
pueden ser empleados para realizar esta función, permitiendo pasar varios argumentos
memoria donde se encuentra la subrutina y ejecutarla), antes de que la subrutina se ejecute
a una subrutina.
la dirección de la instrucción que sigue después de JSR debe guardarse en la pila asi la CPU
puede recuperar la secuencia normal de programa al regresar de la subrutina mediante la
instrucción RTS que se coloca como la instrucción nal en la subrutina, pues RTS toma
la dirección guardada en la pila y la carga en el contador de programa continuando con la
X
Paso de parámetros directamente a memoria
El paso de parámetros directo a memoria, se realiza cuando el programa pasa a y/o
secuencia del programa.
lee los parámetros de la subrutina, mediante posiciones jas de memoria. Este procedimiento se emplea en la CPUCR, cuando se tienen unos pocos parámetros de una o dos
La subrutina cerrada, toma los operandos o argumentos de entrada y coloca los resultados
palabras.
o argumentos de salida de posiciones jas de memoria, es por eso que al llamar a ejecución
una subrutina cerrada, es necesario cargar los argumentos de entrada en aquellas posiciones
usadas por la subrutina, una vez que se está ejecutando la subrutina coloca los resultados
X
Paso de parámetros indirectamente a memoria
siempre en el mismo lugar, independientemente de la parte del programa de que fue llamada.
Este procedimiento hace uso de punteros que indican dónde se encuentran los datos
Los resultados, pueden entonces leerse y colocarse en las posiciones de memoria deseadas.
de entrada y los datos de salida, por lo que no se pasa el dato sino una dirección que
Este último paso es obligatorio si se deseara preservar los resultados, ya que serán cambiados
apunta a la localización del dato. El paso de parámetros indirectamente a memoria se
por otros valores cuando se llame de nuevo la subrutina desde un lugar distinto del programa.
utiliza cuando los parámetros son unidades compuestas por varias palabras de memoria
Esta manera de manejar los operandos de entrada y salida, es lo que permite que la subrutina
localizadas sucesivamente, como en el caso de números de múltiple precisión, vectores
se escriba una sola vez y se ejecute saltando a ella desde diferentes lugares del programa.
(conjunto de datos arreglados en forma de tablas unidimensionales), matrices (conjuntos de vectores) o simplemente datos heterogéneos arreglados en posiciones sucesivas
de memoria.
Resumiendo las dos diferencias marcadas entre la subrutina abierta y la subrutina cerrada
son:
X
Paso de parámetros por la pila
1. La subrutina cerrada no se inserta en aquellas partes del programa donde se utilice,
En este procedimiento la pila es usada como medio para pasar parámetros de entrada
sino que más bien es un ente aislado, independiente del curso que sigue el programa y
o salida. Simplemente se apilan los datos o las direcciones donde se localizan, para los
se debe saltar fuera del programa principal para ejecutar la subrutina cerrada.
parámetros de entrada, el destinatario deberá leerlos teniendo el cuidado de recordar
que la dirección de retorno se encuentra en el tope de la pila y que luego de la lectura,
debe continuar en el tope y la pila deberá haber sido disminuida en el espacio usado
2. En la subrutina cerrada la transferencia de variables y resultados se lleva a cabo a
por los parámetros, este tipo de cuidado debe tomarse también al recibir parámetros
través de posiciones de memoria dedicadas para ese uso, debido a esto, la subrutina
de salida.
cerrada toma más tiempo al ser utilizada que una subrutina abierta, pero por otro lado,
A diferencia de la CPUCR existen microprocesadores que disponen de un registro asoci-
la subrutina abierta emplea más posiciones de memoria, ya que cada vez que se utiliza
ado a la pila con direccionamiento por índice, que permite extraer los datos de la pila sin
se copia toda su codicación. Sin embargo, esto no es necesariamente cierto en todos
necesidad de instrucciones de desapilado y además, disponen una instrucción de retorno
los casos y el análisis de su uso se deja como lo requiera el programador.
especial, RTS N, donde N es el número de palabras de pila que ocuparon los parámetros.
Esta instrucción lee primero la dirección de retorno y luego le resta N al puntero de pila.
55
56
X
Paso implícito de parámetros
Con signo: 0, 4 294 967 295
Sin signo: -2 147 483 648,0,2 147 483 647
El paso de un parámetro en forma implícita se usa cuando el parámetro puede tomar
unos pocos valores. La subrutina en un caso como este, tiene varios puntos de entrada
y asume un valor distinto para el parámetro por cada punto de entrada.
Esta forma de representación, se conoce como precisión múltiple. Para trabajar con estas
representaciones, se requiere que la programación tome en cuenta la naturaleza multipalabra
de los números y la forma de enlazar una operación de palabra a palabra es con el acarreo.
Macroinstrucciones
Por ejemplo, para sumar dos números representados con cuatro palabras de 8 bits cada
La macroinstrucción es una instrucción compuesta de varias instrucciones de máquina del
uno, se sigue el procedimiento que se muestra en la Figura 3.3. Primero se suman las palabras
computador, se puede colocar en cualquier parte del programa fuente y sirve para indicar-
menos signicativas de los operandos. La suma se almacena en la posición que corresponde
le al programa ensamblador su denición, una vez que se denidas las macroinstrucciones
a la palabra menos signicativa del resultado, pero de la suma pudo haberse producido un
simplemente se llaman por su nombre y se indican los argumentos con los que va a oper-
rebase del acumulador, por lo que se suma el contenido de la bandera de acarreo con la
ar. El macroensamblador, se encarga de crear la subrutina abierta según la denición de la
suma del siguiente par de palabras de los operandos. En esta forma, la bandera de acarreo
macroinstrucción y sus argumentos, y luego la inserta en la posición del programa que indicó
enlaza las sumas de cada una de las palabras que conforman el número. El acarreo que re-
el usuario.
sulte al sumarse las palabras más signicativas, es el llevo de la suma total de los dos números.
El comando MACRO, seguido del nombre de la subrutina y luego de sus argumentos,
especica el inicio de la macroinstrucción y el comando FINMAC, especica el nal de la
denición de la macroinstrucción. El cuerpo de la subrutina, debe colocarse entre estos dos
comandos.
Durante el proceso de ensamblaje, el ensamblador tomará todas las deniciones de las
macroinstrucciones y construirá un diccionario de ellas.
Figura 3.3: Suma múltiple precisión.
3.2.8.
Aritmética de Múltiple Precisión
Una de las aplicaciones más comunes de los computadores, es el procesamiento de datos
numéricos pues representa una vía ecaz y precisa de solucionar problemas matemáticos.
Desplazamiento a la izquierda
Esta subrutina, gira una posición a la izquierda todos los bits de un número de múltiple
Una palabra de m bits puede representar números sin signo en el ámbito de:
precisión. El bit menos signicativo del número adquiere el valor que tenía originalmente la
bandera de acarreo, mientras que el bit más signicativo pasa a ser el nuevo contenido de la
0, ( 2m - 1 )
O para números con signo en el ámbito de:
-( 2m−1 ), 0, ( 2m−1 - 1 )
Para una palabra de ocho bits como las de la CPUCR1 los ámbitos son:
misma bandera.
Desplazamiento a la derecha
A diferencia de la subrutina anterior, el número gira hacia la derecha. El bit más signicativo de la palabra asume el valor que originalmente tenía la bandera de acarreo, mientras
que el menos signicativo, se convierte en el nuevo valor de esa bandera. Para realizar correctamente la operación, se debe comenzar con la palabra más signicativa del número.
Con signo: 0,256
Sin signo: -128,0,127
Cuando se trabaja con datos numéricos, es frecuente usar más de una palabra para representar un número binario, ya que con solo una palabra, el tipo de cálculo que se puede
Complemento a dos
Para realizar un complemento a dos, primero complementa a uno el número y luego le
realizar es muy limitado. Sin embargo, si utilizamos cuatro palabras de 8 bits, los ámbitos
suma uno.
de representación serían:
Se hace palabra por palabra, antes de iniciar el lazo se setea la bandera del llevo, luego
comienza por la palabra menos signicativa, se complementa y luego se le suma la bandera
57
58
de llevo, se hace lo mismo para las siguientes palabras, solo que para estas la bandera de
acarreo ahora contiene el llevo generado de la suma que se realizó con las palabras anteriores.
Multiplicación binaria
N bits sin signo, produce a lo más, un resultado que
2N bits para representarse. Esto se puede demostrar, multiplicando el número más
N bits por si mismo, es decir:
La multiplicación de dos números de
requiere
grande de
N
(2
− 1) ∗ (2N − 1) = (22N − 1) ∗ (2N +1 − 2)
El primer término, requiere de
2N
bits para almacenarse, mientras que el segundo, es solo
una pequeña fracción del primero y por lo tanto, no altera el número de bits que se necesitan.
Además, el producto nunca generará un llevo más allá de los
2N
bits.
Para realizar la multiplicación, hay dos métodos:
1. Se suma uno de los operandos a si mismo un número de veces igual al valor del otro
Figura 3.4: Algoritmo para la multiplicación binaria de seis por tres
operando
2. Usar el procedimiento que se emplea al evaluar una multiplicación a mano.
El algoritmo puede realizarse utilizando cuatro posiciones de memoria como se ve en la
Figura 3.4. El producto se almacena en dos posiciones llamadas PROD. El multiplicador y
La primera opción es la más fácil, pero también la más ineciente pues su tiempo de
ejecución depende del valor de los operandos.
Para realizar una multiplicación con el algoritmo que se emplea al desarrollarla a mano
el multiplicador se va evaluando de derecha a izquierda. Si el bit que se observa es uno, el
multiplicando desplazado se suma a los productos parciales anteriores. Si el bit es cero, no
se suma nada, pero se mantiene el desplazamiento correspondiente.
Por ejemplo, en la multiplicación de seis por tres:
el multiplicando, ocupan MPDR y MPDO respectivamente. El bit LLEVO, corresponde a
la bandera de acarreo de la CPU. Una vez que se han almacenado los operandos en MPDR y MPDO, se pone en cero las posiciones de PROD y la bandera de llevo. En el paso
3, se realiza una rotación a la derecha en MPDR, quedando así el primer bit a evaluar del
multiplicador en el LLEVO. Se prueba el LLEVO y como contiene un uno, se le suma el
multiplicando a PROD (véase paso 4). Se puede observar que la suma se realiza sobre la
palabra más signicativa de PROD. Esto se debe a que así, se facilita el desplazamiento
y las sumas posteriores de los productos parciales. En el paso 5, se rota PROD hacia la
derecha, lo cual equivale a que el siguiente producto parcial quede desplazado a la izquierda en la siguiente suma. Además, como las sumas de los productos parciales pueden generar
acarreos, el desplazamiento a la derecha asegura que este no se pierda como en los pasos 7 y 8.
Todo el procedimiento anterior se puede resumir en los siguientes cuatro pasos:
1. Rote a la derecha el MPDR para evaluar el siguiente bit en la bandera de acarreo.
El primer bit a evaluar del multiplicador es uno, lo cual nos produce un 110 como primer
producto parcial, para el segundo bit del multiplicador, también se tiene el mismo producto
2. Si LLEVO=1, sume MPDO a la parte más signicativa de PROD. Si LLEVO=0, no le
sume nada.
parcial, pero se le desplaza una posición a la izquierda, para tomar en cuenta que este producto parcial es una potencia de dos mayor que el anterior. El proceso se continúa siempre
realizando el desplazamiento correspondiente, hasta que se evalúen todos los bits del multiplicador.
59
3. Rote a la derecha las posiciones PROD, para que el siguiente producto parcial quede
desplazado un lugar a la izquierda al sumarse.
60
4. Si ya se evaluaron todos los bits del MPDR, termine, de lo contrario váyase al paso 1.
registro de 12 bits se desplaza hacia la izquierda, introduciendo un cero en el bit menos signicativo de DIVDEND. De esta forma el dividendo va apareciendo, poco a poco, en RESIDU
El algoritmo que se acaba de presentar, se puede modicar para economizar la mitad
del almacenamiento empleado en PROD. Al respecto, se puede observar que cada vez que
PROD se desplaza, MPDR ya se desplazó, por lo que queda un bit vacante en su posición más
signicativa. Entonces MPDR se podría usar como la parte menos signicativa de PROD.
Una vez que se han evaluado todos los bits de MPDR, su contenido será la parte inferior
de PROD, también se puede extender el algoritmo a números de precisión múltiple. Esto se
efectúa con sencillez incorporando las rutinas de múltiple precisión que se presentaron en la
sección pasada. Las rotaciones y las sumas que demanda el algoritmo se podrían entonces
sustituir por llamadas a las correspondientes subrutinas de múltiple precisión, cargando previamente los argumentos necesarios. Si P es el número de palabras de N bits que representan
un operando, CONT se debe cargar con el número PxN.
donde se compara con el divisor.
El propósito de la comparación es determinar si la porción del divisor que se encuentra
en RESIDU es sucientemente grande para que se le pueda restar DIVSOR. Esto se logra
vericando que la condición "DIVSOR es menor o igual a RESIDU.es verdadera. Si es así se
ejecutan las instrucciones enmarcadas entre las sentencias IF y END IF.
La resta realizada corresponde, en realidad, a una resta donde se le quita al dividendo
el valor contenido en DIVSOR, multiplicado por una potencia de dos. En este caso las seis
iteraciones tratan de realizar las siguientes restas:
Iteración 1: (dividendo) - (DIVSOR ∗ 25 )
Iteración 2: (dividendo) - (DIVSOR ∗ 24 )
Iteración 3: (dividendo) - (DIVSOR ∗ 23 )
Iteración 4: (dividendo) - (DIVSOR ∗ 22 )
División binaria
El algoritmo de la división binaria de números positivos es muy similar al de la multiplicación pero en vez de realizar sumas se utilizan restas repetidas del divisor al dividendo.
Algoritmo para división de dos números positivos
Inicie CONT a 6
Inicie RESIDU a 0
DO WHILE CONT sea mayor que 0
Decremente CONT en 1
Desplace RESIDU y DIVDEND hacia la izquierda tal que el bit menos
significativo de DIVDEND reciba un cero y el bit más significativo
de DIVDEND pase a ser el menos significativo de RESIDU.
IF DIVSOR es menor o igual a RESIDU THEN
RESIDU := RESIDU - DIVSOR
Incremente DIVDEND en 1
END IF
END DO-WHILE
Donde CONT es un contador que contiene el número de bits en el dividendo, RESIDU es
una variable que contiene el residuo al nal de la división, DIVDEND y DIVSOR contienen
al dividendo y al divisor respectivamente y el resultado de la división queda almacenado en
DIVDEND.
Iteración 5: (dividendo) - (DIVSOR ∗ 21 )
Iteración 6: (dividendo) - (DIVSOR ∗ 20 )
Si una de las restas anteriores es posible entonces se hace y se contabiliza el hecho incrementando el resultado en 1. El resultado se desplaza a la izquierda en cada iteración logrando
así que se tome en cuenta la potencia de dos que multiplica a DIVSOR en la resta.
Nótese que el rol de DIVDEND es doble. Por un lado sostiene los bits menos signicativos del dividendo y por otro lado sostiene los más signicativos del resultado. En la sexta
iteración el dividendo ha sido trasladado a RESIDU y DIVDEND contiene el resultado.
Raíz cuadrada de múltiple precisión
Un problema más interesante consiste en desarrollar una subrutina para extraer la raíz
cuadrada a un número de múltiple precisión sin signo, para esto se toma el número y se
le restan sucesivamente los números impares, uno a uno, empezando por uno y en orden
ascendente, hasta que el resultado sea negativo. La raíz cuadrada del número, es decir el
resultado, es igual al número de restas que no provocaron un resultado negativo. Así por
ejemplo, para obtener la raíz de 4, primero le restamos uno y el resultado da 3; luego a este
El algoritmo comienza por almacenar un 6 en CONT indicando el número de bits del
dividendo. El residuo a este punto es cero. El lazo principal está enmarcado por la sentencia
DO WHILE y la sentencia END DO-WHILE. Las operaciones dentro de este lazo se llevarán
a cabo mientras la condición del DO WHILE sea verdadera. Esta condición es que ÇONT
resto, le quitamos el siguiente número impar y el resultado es cero. Si intentamos quitarle
5, (que es el siguiente número impar) al resto, que es cero, el resultado dará negativo. Así
que la raíz cuadrada del número es 2, ya que se realizaron dos restas que no provocaron un
resultado negativo.
sea mayor que 0". El lazo entonces se ejecutará un número de veces igual al número de bits
del dividendo.
3.2.9.
Dentro del lazo lo primero que se hace es decrementar a CONT en 1 para contabilizar el
número de iteraciones del lazo y las variables RESIDU y DIVDEND se manipulan como un
Punto Flotante
Los números en formato de punto otante están denidos como el producto de dos valores:
único registro de 12 bits donde RESIDU es la parte mas signicativa. En cada iteración este
Número en punto flotante = M x rE
61
62
Número Representación
510
=
=
=
=
=
1012
5.00 E+0
0.05 E+2
500. E-2
101.02 E+0
0.1012 E + 112
= 5.00 x 100
= ( 0x10−1 + 5x10−2 )102
= ( 1x2−1 + 0x2−2 + 1x2−3 )23
Figura 3.5: Representación en punto otante para la CPUCR
Tabla 3.4: Representaciones en punto otante
Donde, M es la mantisa y contiene los dígitos signicantes del número; r es la base en que
se representa el número y E es el exponente a que se eleva la base e indica la magnitud de
217. E-2
21.7 E-1
2.17 E+0
.217 E+1
.021 E+2
.002 E+3
los dígitos signicantes de la mantisa.
Un posible formato para almacenar números de punto otante en la CPUCR podría ser
Por ejemplo, la tabla 3.4 muestra diferentes representaciones en punto otante para el
el siguiente:
número cinco.
Este tipo de representación numérica tiene dos ventajas cuando se compara con la repre-
1. El exponente se almacena en una palabra, donde el bit más signicativo es el signo.
sentación en múltiple precisión:
Esto proporciona valores extremos en el exponente binario entre -128 y +127.
1. La posibilidad de poder representar números fraccionales manejando el signo del expo-
2. Para representar la mantisa, se pueden utilizar tres palabras de 8 bits, siendo el bit más
nente.
signicativo de la palabra más signicativa el signo de la mantisa. Los valores extremos
quedarán entre -131072 y +131071. El punto binario siempre estará implícitamente a
la derecha del bit de signo de la mantisa como se indica en la Figura 3.5.
2. La posibilidad de poder representar un amplio ámbito de valores con un número mínimo de posiciones de memoria.
El número puede ser almacenado en posiciones consecutivas de memoria empezando por
El número de bits usados para la mantisa determina la precisión con que se representa el
número, además, la precisión del número es igual al número de dígitos signicativos que este
tiene y el número de bits que denen el exponente, determinan las magnitudes máximas y
mínimas que se pueden representar con la precisión dada por la mantisa.
Ejemplo
Se desea expresar en punto otante el número 2,1704. Si la precisión que se tiene para la man-
la parte menos signicativa de la mantisa hasta el exponente.
Cualquier operación aritmética sobre un número representado en punto otante debe considerar dos factores:
X
Todos los operandos involucrados deberán ser normalizados para valerse de la mayor
precisión que pueda representar la mantisa.
tisa y exponente es de un dígito decimal, donde se pierden los valores decimales del número y
el ámbito de valores máximo y mínimo positivos distintos de cero que es posible representar
será de +9E +9 a +1E -9 por lo que se podría representar en una de las siguientes formas:
X
La operación aritmética a realizarse no solo afecta la mantisa sino que el exponente
debe corregirse según lo amerite.
2 E+0
.2 E+1
Normalización de números en punto otante
Ahora, si se aumenta la resolución del número a tres dígitos al aumentar el número de
Con el n de que las rutinas de aritmética en punto otante operen con el mayor grado
localizaciones de memoria para la mantisa, perdiéndose dos decimales y el número de órdenes
de exactitud posible, el valor de cada número debe ajustarse a su representación normalizada
de magnitud sigue estando entre -9 y +9, por lo que el número podría representarse en una
antes de realizar las operaciones. Un número está representado en forma normalizada cuando
de las siguientes formas:
su dígito más signicativo es un número diferente de cero.
63
64
Para normalizar un número, se desplaza la mantisa a la izquierda hasta que se eliminen
los ceros. Por cada desplazamiento a la izquierda, el exponente se debe decrementar para
mantener el valor real del número. Al nal de este desplazamiento el exponente se corrige
para tomar en cuenta el número de lugares corridos hacia la izquierda.
Suma de números en punto otante
Un algoritmo para realizar la suma de números en punto otante se muestra en la gura
3.6. La suma se realiza con el acumulador de punto otante, a partir de ACUMPF, y un
operando de punto otante, a partir de OPNDPF. El resultado queda en el acumulador de
punto otante. A partir de ahora nos referiremos simplemente al acumulador y al operando,
en el entendido que se trata de los correspondientes de punto otante.
Al inicio del algoritmo se pregunta si el acumulador es cero. Si es cero entonces se transere el operando al acumulador y se regresa. Si el acumulador no es cero pero el operando si
lo es, entonces el resultado ya está en el acumulador y se puede regresar.
En la mayoría de los casos tanto el acumulador como el operando van a ser distintos
de cero. Si sus exponentes son iguales entonces se puede proceder a realizar la suma de inmediato. Si los exponentes son distintos se debe trasladar el mayor de los números de punto
otante al acumulador y el menor debe permanecer como el operando. Esto prepara a ambos
números para el resto de los pasos del algoritmo y debe recordarse que el acumulador siempre
contiene al mayor de los dos.
Cuando los exponentes son distintos, la diferencia entre ellos no debe exceder al número
de bits disponibles para la magnitud de la mantisa. En nuestro caso esto es 17. Es decir, si el
exponente del número en el acumulador es 18 unidades mayor que el exponente del número en
el operando, entonces el operando es demasiado pequeño para afectar la mantisa del acumu-
Figura 3.6: algoritmo para suma de números en punto otante
lador y el resultado de la suma ya se encuentra en el acumulador. Si esta diferencia es menor
o igual a 17 entonces el contenido del operando debe tomarse en cuenta para realizar la suma.
La suma sólo se puede llevar a cabo cuando los dos exponentes son iguales. Previo a la
suma, debe desplazarse la mantisa del operando hacia la derecha un número de veces igual
a la diferencia que existe entre los dos exponentes. De esta forma se alinea el operando al
acumulador. Puesto que el desplazamiento a la derecha provocaría la pérdida de bits en la
mantisa del operando, la operación debe realizarse a cuádruple precisión, es decir, utilizando
en precisión cuádruple utilizando sus respectivas extensiones: ACUMEXT y OPNDEXT. Finalmente se realiza la suma de las dos mantisas.
Una vez hecha la suma, se llama a la subrutina que realiza la normalización del número
en el acumulador y luego se regresa con el resultado solicitado.
a la palabra OPNDEXT como la cuarta palabra de la mantisa. Durante el desplazamiento,
el bit menos signicativo de OPNDPF pasaría a ser el bit más signicativo de OPNDEXT.
Una vez alineado el operando, se puede proceder a la suma.
La suma se lleva a cabo usando las dos mantisas en precisión cuádruple, cuando los dos
exponentes son iguales. En esta operación se considera que las mantisas tienen cuatro palabras en vez de tres. Las palabras menos signicativas son ACUMEXT y OPNDEXT y las
más signicativas son ACUMPF+2 y OPNDPF+2, respectivamente. Como la suma puede
generar un llevo, y para evitar tener que probar esta condición, se desplazan ambas mantisas
a la derecha una posición más y se incrementan ambos exponentes. Las mantisas se desplazan
65
66
Capítulo 4
Sistemas de almacenamiento de datos
4.1.
Jerarquía de memorias
Ya se ha hablado acerca de la arquitectura básica de un microprocesador y su gran utilidad
a la hora de hacer operaciones matemáticas, pero es importante recordar que para que esto
sea posible es necesario que se cuente con medios en donde las operaciones e instrucciones
Figura 4.1: Jerarquía de memorias
sean guardadas físicamente. Los medios de almacenamiento de datos suelen clasicarse de
acuerdo a su velocidad y costo monetario, a esto se le conoce como jerarquía de memorias.
En la gura 4.1 el primer grupo de almacenamiento que se puede observar es el concerniente a los registros de control la CPU, acá se almacenan los algoritmos que controlan
el funcionamiento de la CPU. Con ella, la unidad de control es capaz de interpretar las instrucciones en binario que la CPU lee de la memoria principal. Aquí también se almacenan
las secuencias de operaciones elementales que son necesarias para realizar una operación como ADD, STA, JMP si fuese el caso de la CPUCR. Algunos computadores no tienen una
memoria de control como tal, pero requieren de cierto almacenamiento, para llevar el estado
en que se encuentra la unidad de control en la CPU.
En este grupo se puede encontrar los registros de almacenamiento de resultados, que en
el caso de la CPUCR son el acumulador, el puntero de pila, el contador de programa y el
registro estados, entre otros.
secundaria. Este tipo de almacenamiento posee una de las mayores capacidades alcanzado
el orden de los terabytes, es decir miles de gigabytes de capacidad. En los discos duros se
encuentran instalados los sistemas operativos y demás programas.
El último nivel corresponde a los dispositivos extraíbles como el oppy, el disco compacto,
el DVD, las memorias USB extraíbles, el Blu-ray con una capacidad de almacenamiento de
hasta 50 GB. Estos medios por lo general son los más baratos pero no cuentan con la increíble
velocidad que tienen las memorias caché por ejemplo.
4.1.1.
Memoria Virtual
La memoria virtual es una técnica que se utiliza para que un sistema aparente tener más
La memoria caché es una memoria sumamente rápida y cara, su objetivo es guardar las instrucciones más utilizadas por el CPU y de esta forma aumentar la eciencia del computador.
La memoria principal, es aquella que es directamente accesible a la CPU por medio de
sus instrucciones. En el caso de la CPUCR, nos referimos al arreglo de 65536 palabras de 8
bits que podemos manipular con las instrucciones, LDA, INA ,PHA ,etc. Esta memoria es
el núcleo principal en el sistema de almacenamiento de un computador, ya que únicamente
los programas almacenados en ella pueden ser ejecutados por la CPU. Inclusive, los datos en
memoria principal, son casi los únicos que la CPU tiene disponibles para manipular directamente.
memoria principal o RAM que lo que realmente tiene. Debido a que en muchas ocasiones es
imposible para un computador mantener todos los procesos guardados en memoria principal.
Con la aparición de la multitarea este problema se agravó aún más.
A un bloque de memoria virtual se le denomina página, por lo que a un fallo en memoria
virtual se denomina fallo de página, con la memoria virtual la unidad central de procesamiento (CPU) genera una dirección virtual que se traduce en una dirección sica que se utiliza
para acceder a memoria principal.
Para un computador que cuente con un bus de direcciones de 32 bits, el máximo de
memoria que puede acceder es de 4096 megabytes o 4 GB. Una memoria de ese tamaño en la
Debido a que la memoria principal tiene la característica de ser volátil, el almacenamiento
de datos en forma permanente no es posible en ella, por este motivo se recurre a la memoria
67
actualidad es muy común y barata, pero en los años noventa era sumamente cara, por este
motivo el método de memoria virtual se hizo extremadamente útil, ya que en el computador
68
se colocaba una cantidad de memoria pequeña y resto se simulaba mediante memoria virtual.
del número de bloque en la memoria asociativa no tendrá éxito. Está condición genera una
interrupción en la CPUCR ya que el programa que se estaba ejecutando sólo podrá contin-
Este tipo de método se puede implementar mediante Hardware o Software. Lo más sen-
uar si se carga el bloque que se necesita. La CPUCR entonces ejecuta un programa que se
cillo desde el punto de vista de un programador es que se haga por Hardware, para esto se
encarga de buscar el bloque en memoria secundaria, de trasladarlo a una zona de memoria
hace uso del memoria asociativa. Por software depende del programa en que se implemente,
principal y de cambiar el contenido de la memoria asociativa para que indique en que bloque
el sistema operativo como Microsoft Windows posee un sistema de memoria virtual propio y
físico se encuentra el bloque recién traído. Todo bajo la suposición que en la CPUCR esté car-
GNU/Linux implementa un área de intercambio que el usuario debe de crear previamente,
gado un sistema operativo capaz de realizar dicha tarea, o bien una subrutina de de búsqueda.
para librar a la memoria principal de procesos que no se estén utilizando en ciertos momentos.
El contenido de la memoria asociativa es como se indica en la gura 4.3. Las etiquetas
Pero para comprender mejor el funcionamiento de la memoria virtual se tomará por ejem-
todas son distintas, del 0000 al 1111, y corresponden a los 16 bloques físicos en memoria
plo a la CPUCR, esta vez se supondrá que en vez de contar con 16 líneas de direccionamiento
principal. El campo de datos es de 14 bits, con lo cual se puede almacenar cualquier número
se tienen 24. Lo que da un espacio de memoria de 16 megabytes. Si cada bloque del sistema de
del 0 al 16383. Conforme se van cargando bloques a memoria principal, los correspondientes
almacenamiento virtual es de 1024 palabras y queremos mantener un máximo de 16 de estos
números se van registrando en las posiciones de datos de la memoria asociativa. Cuando se
bloques en memoria principal, entonces la CPUCR deberá tener 16384 palabras de memoria
llena la memoria asociativa y se necesita traer un nuevo bloque, se busca cual bloque de
física, la gura 4.2 muestra la estructura del ejemplo.
memoria física ha sido usado menos. Este se restituye a memoria secundaria y entonces se
trae el nuevo bloque a ocupar su lugar.
Figura 4.3: Contenido de la memoria asociativa, memoria virtual.
4.1.2.
Memoria Cache
La función de la memoria cache es incrementar la velocidad de accesos a la memoria
principal, debido a que la memoria cache es una memoria pequeña y veloz que contiene una
Figura 4.2: Memoria virtual
copia de partes (bloques) de la memoria principal. Cuando el procesador solicita una palabra
a memoria principal se trae todo el bloque que la contiene a cache, a causa del fenómeno de
localidad es usual que se hagan referencias futuras a otras palabras del mismo bloque.
El corazón del sistema está en la memoria asociativa. Aquí se guarda una tabla que indica
en que bloque de memoria física se encuentra una determinada dirección lógica. La dirección
que genera la CPUCR sale en las 24 líneas de dirección. Las 10 líneas menos signicativas
dan la dirección dentro de las 1024 posiciones que contiene cualquier bloque. Las 14 líneas
más signicativas dan un número de bloque de los 16384 que se encuentran almacenados en
memoria secundaria. La memoria asociativa toma el número de bloque lógico y lo traduce a
un número de bloque físico. El número de bloque físico y las 10 líneas menos signicativas
de la dirección de la CPUCR constituyen la dirección física que se busca.
Figura 4.4: Procesador, memoria cache y memoria principal
Si el bloque lógico que se pide no se encuentra en memoria física entonces la búsqueda
69
70
Para ilustrar un poco mejor este comportamiento se ejemplica mediante una operación
de lectura en donde el procesador genera una dirección RA de la palabra que se desea leer,
si la palabra esta contenida previamente en cache se entrega al procesador, de lo contrario el
bloque que contiene dicha palabra es llevado a la cache y posteriormente la cache la entrega
al procesador, estas dos acciones se realizan en forma paralela, como es común de observar
en las organizaciones de cache actuales.
Figura 4.6: Caches y conexiones externas del procesador Pentium III
X
Cache L1 de instrucciones: contiene instrucciones de la RAM que fueron decodicadas.
X
Cache L1 de datos: contiene información de la RAM, así como información utilizada
recientemente durante el funcionamiento del procesador.
Cache L0
Figura 4.5: Flujo para la operación de lectura en cache.
Los accesos al cache de nivel uno (L1) consumen cerca del 27 % de la energía en el
procesador, se ha logrado reducir este consumo mediante el caché de nivel cero pues este
evita un acceso al caché de nivel uno.
Existen varios niveles de memoria caché, la caché L1 se encuentra ubicada dentro del
Además si un acceso crea un hit en el caché de nivel cero, el siguiente acceso ira nuevamente
microprocesador por lo que muchas veces complica el diseño del mismo, su capacidad oscila
al cache de nivel cero, si por el contrario el acceso produce un miss en el caché de nivel cero,
en el orden de los kilobytes. La caché L2 se encuentra entre el microprocesador y la memoria
el siguiente acceso se hará al caché de nivel uno.
principal y es más lenta que la L1, además la cache L3 y la victim cache.
Cache L3
Victim cache
El victim cache es la adición de un pequeño caché totalmente asociativo entre el caché L1
El cache de nivel 3 o L3 de caché soporta capacidades de 4 MB o incluso 6 MB, sin
y la memoria principal, cuando se produce un miss los bloques de caché que son descartados
embargo solo los microprocesadores más nuevos soportan este tipo de memoria.
se envían al victim cache en caso de que sean requeridos nuevamente en corto tiempo.
Cache L2
Pentium III.
A manera de ejemplo, la gura 4.6 representa los dos niveles de cache presentes en el
El cache de nivel dos es un intermediario entre el procesador con su caché interna y la
RAM, además es de mayor capacidad que el cache de nivel uno, puede acceder rápidamente
a la RAM aunque no tan rápido como la caché nivel uno.
Políticas de escritura
El proceso de escritura en cache se da directamente, se tiene que para trasladar información de la cache a la RAM, hay dos políticas de escritura fundamentales:
Cache L1
1. Write-back: La información se escribe directamente en la caché, sin actualizar la RAM
El cache de nivel uno es conocido también como cache interno, por estar ubicado muy
cerca del procesador, se compone de dos partes:
71
y cuando una posición de cache debe ser utilizada por otra posición de RAM diferente,
su contenido se traslada a la RAM, asegurando la coherencia entre ambas memorias.
72
2. Write-througth: En esta modalidad cada vez que se escribe en una línea de caché, se
actualiza la RAM, haciendo accesos continuos a la RAM decrementando el rendimiento.
4.1.3.
Memorias estáticas
La estructura de una memoria estática se basa en los ips-ops y biestables, tiene como
gran característica que los datos que contienen no tienen que ser refrescados constantemente
Protocolo MESI
a diferencia de las memorias dinámicas, sin embargo estos datos son volátiles y se pierden
Actualmente existen sistemas con más de un procesador, así que para proporcionar co-
cada vez que la alimentación es quitada.
herencia, la cache de datos implementa un protocolo conocido como MESI que incluye dos
bits de estado para representar cada uno de los cuatro estados que se muestran en la gura
La memoria estática de acceso aleatorio que se construye a base de transistores MOSFET,
se dice que son de acceso aleatorio ya que su información puede ser accesada en cualquier
4.7.
orden, no importa dónde en que posición se encuentre el dato deseado.
Figura 4.7: Diagrama de transición de estados del protocolo MESI
X
Modicado (Modied)
La línea de cache ha sido modicada y es distinta a su valor en memoria principal, así
que los datos están disponibles solo en esa cache.
X
Exclusivo (Exclusive)
Figura 4.8: Celda de una memoria SRAM
Como mínimo una celda SRAM ocupa 4 transistores para formar un biestable que almacene cada bit, en gura 4.8 los transistores M2, M4, M1 y M3 forman dicho elemento. La
señal WL controla el modo de operación de la celda.
Cuando se quiere realizar una escritura se activa la señal de control WL y se coloca el
BL
el dispositivo escribe el valor contrario. Para el proceso
La línea de cache tiene el mismo contenido que en memoria principal y no está presente
valor deseado en la línea BL, en
en ninguna otra cache.
de lectura se ponen en uno los buses de datos y luego se activa WL, al ocurrir esto el valor
contenido base a BL y su valor contrario a
X
BL. A parte de estos dos modos de funcionamiento
la celda cuenta con un estado de reposo, en el cual el dato se mantiene siempre y cuando esté
Compartido (Shared)
alimentado.
La línea de cache tiene el mismo contenido que en memoria principal y puede estar
contenido en otra cache.
X
4.2.
No válido (Invalid)
Características de los medios de almacenamiento
Los medios de almacenamiento poseen ciertas características que los hacen diferenciarse
La línea de cache no contiene datos válidos.
73
entre ellos:
74
1. Medio de almacenamiento.
4. Alterabilidad.
vez realizado el acceso a la localidad deseada, el dato que se encuentra ahí es destruido por
2. Tiempos de operación.
5. Permanencia.
el proceso de lectura y debe ser luego restituido. En estos casos, el tiempo de acceso viene
3. Modo de acceso.
6. Costo.
seguido por un tiempo de restitución y por lo tanto
tC
es mayor que
tA .
W
B=
tC
A continuación se procederá a explicar los principales detalles de cada uno de estos puntos, para que de esta manera se comprenda más a fondo estos dispositivos.
(4.1)
Donde w es el número de bits que se toman simultáneamente en un acceso a la memoria.
La cantidad de B viene dada en bytes por segundo.
4.2.1.
Medios de almacenamiento
Existes diferentes medios físicos para el almacenamiento de datos. Los primeros fueron
los del tipo mecánico, mediante la posición de engranajes era posible guardar datos. Luego
4.2.3.
Modos de acceso
vinieron los magnéticos, las primeras computadoras a partir de los años cincuenta utilizaban
La forma en que se puede acceder a una memoria es un factor determinante tanto el pre-
largas cintas en donde se guardaban los resultados de las distintas operaciones matemáticas,
cio como en la velocidad de la misma. Existen modos de accesos aleatorios, seudoaleatorio,
este mismo método se uso para el famoso oppy.
secuencial y asociativo.
A partir de los años noventa comenzaron a salir los discos compactos, los cuáles caracterizaron a los medios ópticos, estos presentaban la gran ventaja de ser más conables en
cuanto a la seguridad de los datos, ya que los medios magnéticos eran muy vulnerables a los
cambios climáticos y a los campos electromagnéticos.
Para el comienzo del nuevo milenio los medios extraíbles basados en memorias EEPROM
no volátiles se hicieron populares para el almacenamiento de datos, no se les utiliza única-
Acceso aleatorio
La memoria con acceso aleatorio permite que sus posiciones sean accesadas en cualquier
orden sin alterar el tiempo de acceso. Para que esto sea posible es necesario que cada posición
de memoria cuente con un dispositivo de escritura y lectura lo que aumente su complejidad
y costo.
mente para computadoras si no también para otros dispositivos.
4.2.2.
Tiempos de operación
Relacionados con este parámetro existen tres cantidades que se utilizan para describir
una memoria:
1. El tiempo de acceso
2. El tiempo de ciclo
tA
Figura 4.9: Esquema de acceso aleatorio a una memoria
tC
3. La razón de transferencia de datos B.
La gura 4.9 muestra como mediante la lógica de selección es posible acceder a cada
El tiempo de acceso para una memoria con acceso aleatorio, es el tiempo transcurrido
entre el momento en que se le presenta a la memoria la dirección de la localización deseada
bloque de forma independiente. Debido al costo que tienen este tipo de memorias la capacidad de los mismos son muy pequeñas.
y el momento en que aparece el dato
en la salida de la memoria. Para memorias con acceso distinto al aleatorio, el tiempo de
acceso viene dado por el tiempo transcurrido entre el momento en que se solicita un dato y el
momento en que es encontrado; sin que esto signique que el dato se haya leído. Este proceso
generalmente incluye la interacción entre el hardware de la memoria y un software especial
que maneja a la memoria desde el computador. El tiempo de ciclo nos indica el tiempo
mínimo posible entre dos accesos consecutivos a la memoria. En ciertos casos el tiempo de
Acceso seudoaleatorio
El modo de acceso seudoaleatorio reduce en forma signicativa la cantidad de transductores
1
que utiliza para acceder a los datos almacenados. Sin embargo la velocidad entre las
1 Dispositivos
electrónicos encargados de realizar la escritura y lectura en una memoria.
ciclo es igual al tiempo de acceso. Sin embargo, en memorias con lectura destructiva, una
75
76
operaciones se ve afectada considerablemente.
Como se ve en la gura 4.11 un único transductor está encargado de acceder a cada posición de memoria, por lo que tendrá que pasar por cada una hasta encontrar la que realmente
desea utilizar.
Acceso Asociativo
El contenido de una posición de memoria asociativa tiene dos componentes: la etiqueta
y los datos. La etiqueta hace la misma función que la dirección en los otros tipos de acceso.
Puede haber más de una etiqueta por posición. Los datos son únicamente información adicional y no pueden ser usados para direccionar la memoria.
Las memorias del tipo caché utilizan este tipo de acceso, esta alto desempeño va de la
mano con la complejidad y el costo de producción de la mismas por ende como se había
mencionado, la capacidad de las mismas es limitado.
Figura 4.10: Esquema de acceso seudoaleatorio a una memoria
4.2.4.
Por ejemplo en la gura 4.10 se puede apreciar que dos transductores se encargan de leer
16 posiciones de memoria, por lo tanto este tipo de medio de almacenamiento puede contar
con mayores capacidades que los de acceso aleatorio, y a un menor precio.
Alterabilidad
No todos los tipos de memoria son de lectura y escritura. El aspecto de la alterabilidad
corresponde a la disponibilidad de cambiar el contenido dentro de una medio de almacenamiento. A partir de esta característica se pueden diferenciar dos tipos memorias las ROM
(Read Only Memory ) y las RAM Random Access Memory, en el primer tipo únicamente es
posible introducir datos una única vez, y luego éstos solo estarán disponibles para la lectura.
Acceso secuencial
Para la memoria RAM es posible realizar escrituras y lectura todas las veces que se desean
Las memorias de acceso secuencial cuentan con la gran ventaja que su capacidad puede
limitado únicamente por la vida útil del dispositivo.
ser muy grande y su costo muy bajo, sin embargo la velocidad de lectura o escritura es mucho
más bajo que cualquier cosa.
4.2.5.
Permanencia
Ya que se ha hablado un poco acerca de la alterabilidad de algunos tipos de memorias es
importante señalar la duración que tienen los datos en las mismas. Tres características que
pueden presentar los datos de cierto medio de almacenamiento son:
1. Volatibilidad
2. Estabilidad
Volatibilidad
Este aspecto se reere a cuánto tiempo puede permanecer cierto dato dentro de un dispositivo, dependiendo básicamente de la alimentación que tenga el aparato aparato, un claro
ejemplo es la memoria RAM o memoria principal de un computador, una vez que la computadora sea apagada toda la información contenida es borrada.
Figura 4.11: Esquema de acceso secuencial a una memoria
77
78
Estabilidad
que permite reducir el tamaño del decodicador, el
Se pueden diferenciar dos tipos: las memorias estáticas, en las cuales los datos permanecen
en forma constante hasta que se les altere o se corte el suministro eléctrico (si fuesen volátiles)
y las memorias dinámicas, en estas los datos se están refrescando continuamente ya que la
capacidad de retención de los mismos es corto.
4.3.
direccionamiento coincidente.
Con este método de direccionamiento una celda es seleccionada si en ella coinciden las
salidas activas de dos decodicadores de dirección. Un decodicador produce las líneas de
selección X y el otro produce las líneas de selección Y. En la gura 4.13 se puede apreciar un
arreglo de memorias con direccionamiento coincidente.
Tipos de memorias
En esta sección se vera un poco más a fondo los tipos de memorias que hay si su modo
de funcionamiento.
4.3.1.
Memorias electrónicas de escritura y lectura
Las memorias de escritura y lectura en medio electrónico tienen como unidad elemental
estructural el ip op, el cual es capaz de mantener un dato y cambiarlo dependiendo de las
entradas que se le den. Al colocar un 1 lógico en la entrada S, se pone la salida Q también
en uno. Un 1 en R restituye el valor de Q a cero. En ningún caso debe llevarse las entradas
S y R simultáneamente a 1 ya que no es posible saber cual sería el resultado.
Figura 4.13: Arreglo de memoria con direccionamiento coincidente
Además del arreglo de memorias, los dispositivos actuales cuentan con más lógica para
controlar el tráco de datos dentro y fuera de la memoria. Un ejemplo se ve en la gura 4.14.
Figura 4.12: Diagrama de una celda de memoria
La señal CS, Chip Select, al ponerse en 1 lógico habilita las salidas del decodicador de
direcciones y permite que la salida de datos pueda ser habilitada por un R/W=1 y OD =O. Si
Además del ip-op, una celda básica de memoria debe contar con una lógica de selección
CS=O el decodicador de direcciones no selecciona ninguna palabra del arreglo de palabras
la cual controle el funcionamiento de la misma, como por ejemplo en el diagrama mostrado
y la salida de datos permanece en tercer estado. La entrada OD , Output Disable negado,
en la gura 4.12 se puede apreciar que la línea R/W dene la dirección de la transferencia
pone la salida de datos en un estado de alta impedancia (lo que se conoce también como
una vez que se selecciona la celda. Cuando R/W= 1 se lee de la celda, el dato aparece en la
tercer estado), cuando tiene un uno lógico. Gracias a esto, la salida de datos puede separarse
salida O. El dato en la entrada I es escrito en la celda cuando R/W= 0 y se selecciona la celda.
de la entrada sin que hayan çhoques"de datos.
A la hora de pensar en una arregle de celdas para conformar una memoria se puede optar
por dos maneras de hacer el direccionamiento de la mismas. El primer tipo es el
cionamiento lineal,
direc-
acá la lógica de selección del arreglo de celdas es controlada por un
4.3.2.
Memorias electrónicas dinámicas
decodicador, sin embargo este circuito se vuelve cada más grande y complejo al aumentar
Cuando se habló acerca de la estabilidad de algunos tipos de medios de almacenamiento
el tamaño del arreglo. Debido a estos inconvenientes existe un método de direccionamiento
se mencionó el término de memorias dinámicas. Una de las mayores ventajas que presentan
79
80
Figura 4.14: Estructura completa de una memoria estática sencilla
con respecto a otros tipos es su precio y su bajo consumo de energía.
La gura 4.15 muestra la estructura elemental de una celda para una memoria dinámica,
consta de principalmente de un transistor y un capacitor el cual contiene el dato lógico, uno
Figura 4.16: Memoria dinámica sencilla
si se encuentra cargado y cero si está descargado.
4.3.3.
Memorias electrónicas de solo lectura
Las memorias de solo lectura cuentan con la características de que su información no es
volátil como es el caso de las memorias dinámicas y algunas estáticas. Se pueden encontrar
cuatro variedades de memorias de sólo lectura.
Memorias ROM
En una memoria ROM los datos son escritos al momento de su fabricación, y nunca más
es posible alterar esos datos sin destruir el dispositivo.
Figura 4.15: Estructura de una celda dinámica
Debido a las fugas que presenta el capacitor por medio del transistor, es necesario que el
dato se esté actualizando constantemente, para esto se requiere de una circuitería extra que
se encargue de este trabajo. En la gura 4.16 se ve que una celda amplicadora de censado
AS, compara el valor que cada celda de memoria y restituye el dato leído. Además gracias
a otras señales como R/W y CE, es posible controlar la dirección del ujo de datos y la
actividad del circuito respectivamente.
81
82
y EEPROM entre otros.
Memorias EPROM
La programación de una memoria EPROM se realiza de la
misma manera que con la memoria PROM. Sin embargo con la
EPROM se puede revertir el proceso de grabación utilizando
una luz ultravioleta, debido a que las celdas que las componen
Figura 4.17: Memoria tipo ROM
Su estructura se compone de una celda capaz de almacenar únicamente un 1 lógico, para
representar un cero simplemente no se coloca la celda.
son foto sensibles provocando una descarga de la misma retornando de nuevo a un valor de cero.
La gura 4.19 muestra un chip que contiene una memoria EPROM, se aprecia una ventana translúcida exponiendo
el circuito, esto es para que se pueda utilizar un rayo de luz
Figura 4.19: Memoria tipo
ultravioleta en él.
EPROM
Memorias PROM
Las memorias PROM son programables por el usuario. La programación se lleva a cabo
alimentando la memoria con un voltaje mayor al de operación al mismo tiempo que se manipulan las líneas de dirección y de datos. Una vez programada, la PROM es irreversible por
lo que no hay cabida para errores.
Memorias EEPROM y Flash
La memoria EEPROM (Electrically Erasable Programmable Read Only Memory ) esta
constituida por un transistor CMOS de compuerta otante, al cual se le puede modicar su
estado eléctricamente, lo que lo hace mucho más práctico que las memorias tipo EPROM.
Este tipo de memoria tuvo una gran aceptación, incluso dio a paso para la creación de
las famosas memorias ash. Éstas poseen un tipo más avanzado de EEPROM, permitiendo
velocidades mayores de transmisión de datos y mayor densidad de los mismos.
Las memorias ash son tan usadas actualmente que se las pueden encontrar en cámaras
fotográcas, reproductores de música y dispositivos de almacenamiento portátiles entre otros.
De hecho a partir de es tipo de memorias se están empezando a crear los llamados discos de
estado sólido, que pretenden en un futuro reemplazar a los discos duros convencionales.
Figura 4.18: Memoria tipo PROM
La gura 4.18 muestra como se compone una celda para memorias PROM, como se puede
apreciar cuenta con un transistor y un fusible, cuando se quiere colocar un 1 en la celda simplemente se deja intacta la celda, pero si lo que se quiere es un cero lógico se rompe el fusible
cortando así el paso de la alimentación VCC a la salida.
Figura 4.20: Dispositivo de almacenamiento USB tipo ash
4.3.4.
Memorias electrónicas borrables
A parte de las memorias ROM y PROM, existes otras en las que es posible alterar los
datos previamente guardados, entre estos tipos se pueden distinguir las EPROM, EAPROM
83
84
4.3.5.
Discos Flexibles
El disco exible esta hecho de mylar
que su división se realiza en el momento en que se le da formato al disco. La pista entonces
2
grueso recubierto con una capa de óxido magnético
de hierro igual a la que se usa en la mayoría de las cintas de grabación para sonido, sin embargo su consistencia es más dura. Los discos vienen en varios tamaños: 8 pulgadas (20 cm),
5.25 pulgadas (13 cm) y 3.5 pulgadas (9 cm). Las capacidades típicas de almacenamiento son
entre 100 Kbytes y 1.4 Mbytes.
puede dividirse en el número de sectores que sea necesario de acuerdo al criterio de diseño
que tenga prioridad.
Anteriormente existían los discos hard sectored cuya división en sectores venía determinada por una secuencia de huecos equidistantes que se encontraba en el perímetro del círculo
donde está el hueco de índice. Los discos hard sectored solo tenían el número de sectores que
indicaban estos huecos, haciéndolos poco adaptables a otras aplicaciones e incompatibles entre sistemas con distinto número de sectores. Rápidamente perdieron popularidad y dejaron
de usarse.
A pesar que aún se les continúa usando los discos exibles se están volviendo obsoletos
y las unidades lectoras se están reemplazando por dispositivos lectores de memorias tipo ash.
4.3.6.
Discos Duros
Los discos duros son medios de almacenamiento con gran capacidad, hasta el momento
no existe otro tipo de dispositivo que lo pueda superar en cuanto a este aspecto. Los discos
duros más grandes alcanzan capacidades de hasta 2000 GB.
La estructura de un disco duro consiste principalmente en un arreglo de platos a los que
se le pueden escribir y borrar datos de forma magnética, por cada plato se encuentran las
cabezas o transductores de lectura y escritura. Un motor en corriente directa se encarga de
hacer girar los discos, de igual forma las cabezas lectoras se pueden mover hacia el centro y
hacia afuera de los platos.
En la gura 4.22 es posible apreciar de mejor forma las partes de este dispositivo. El
cerebro de la unidad lo conforma el circuito impreso, en él se encuentra los controladores
necesarios para coordinar todas las acciones.
Figura 4.21: Estructura de un disco exible
El disco se encuentra dentro de una cubierta protectora de plástico para evitar que sus
supercies se ensucien o rayen. Este sobre está recubierto por dentro de un material suave
que disminuye el roce con el disco y limpia su supercie cuando gira. El sobre tiene un oricio por donde la cabeza de grabación y reproducción puede acceder a la información que se
encuentra en la supercie del disco.
La información en los discos se almacena en anillos concéntricos llamados pistas. Existen 77 pistas en los discos de 8 pulgadas y de 35 a 80 pistas en los discos de 5.25 y 3.5 pulgadas.
Cada pista a la vez se divide en un cierto número de sectores. La división de las pistas en
sectores se realiza normalmente en la modalidad soft sectored, es decir de sectores suaves, ya
2 Tereftalato
de Polietileno, es un tipo de plástico muy utilizado para la fabricación de botellas y algunos
textiles.
85
86
4.3.7.
El disco compacto
El disco compacto o CD es un medio de almacenamiento óptico, está compuesto básicamente de distintas capas de distintos materiales como el policarbonato, aluminio, entre otros.
Su capacidad es 500 veces mayor que la de un oppy (700MB), sin embargo es menor a la de
los discos duros actuales.
Figura 4.23: Estructura y funcionamiento del disco compacto
En la gura 4.23 se aprecia a grandes rasgos la estructura descrita anteriormente, la capa
donde se encuentran presenta hundimientos y zonas lisas, un 1 lógico se representa mediante
un transición de una zona lisa a uno de estos hundimientos o viceversa, si no se presenta
Figura 4.22: Estructura interna de un disco duro
ninguna transición el dato se lee como un 0 lógico. Una unidad de disco compacto o CDROM cuenta con un láser capaz de incidir en la cara del disco y detectar los cambios en la
supercie del mismo mediante la reexión del rayo.
Los discos duros se pueden clasicar de acuerdo a su velocidad en la transmisión de datos.
Entre los más importantes se pueden encontrar:
Existen unidades que cuentan con dos tipos de láser, el encargado de realizar el proceso
lectura y otro capaz de modicar la supercie del disco o en otras palabras escribir en el
mismo.
1. IDE :La velocidad de transferencia de estos tipos de discos puede alcanzar hasta 133
MB/s (megabytes por segundo), fue el primer tipo de discos que salió al mercado.
Actualmente se están volviendo obsoletos.
2. SCSI: Sin duda alguno los discos tipos SCSI son los más costosos, utilizados principal-
Con el pasar de los años los materiales y las unidades de lectura/escritura han ido cambiando dando origen a nuevos medios ópticos de mayor capacidad y velocidad. El DVD (Disco
versátil digital) tiene una capacidad de hasta 8 GB y más recientemente el Blue-ray con capacidades de hasta 50 GB, más de 70 veces la capacidad de un disco compacto.
mente en servidores, estos discos pueden presentar velocidades de 640 MB/s.
3. SATA: Este tipo es el más reciente, y poco a poco va desplazando al IDE e incluso al
SCSI, su velocidad puede llegar hasta los 1.5 GBps.
87
88
4.4.
Sistemas de archivos
partición es de 2 GB. En el sistema FAT 32 es posible tener particiones de hasta 8 terabytes.
Los sistemas de archivos son formas de organización que se utilizan en muchos dispositivos de almacenamiento, con el n de hacer de manera más eciente el manejo de los cheros
dentro de los mismos.
4.4.2.
Sistema de archivos NTFS
Una de las grandes diferencias que presenta el sistema de archivos NTFS con respecto a
En dispositivos como los discos duros, la información no necesariamente se encuentra
los FAT es su alto nivel de seguridad. Con la aparición del sistema operativo Windows NT se
localizada toda junta, más bien en la mayoría de los casos los archivos se encuentran seg-
introdujo este nuevo sistema, que soporta particiones hasta de 256 terabytes. La gura 4.25
mentados por toda la unidad, es ahí donde el sistema de archivos juega su papel en decir
muestra la estructura de una partición formateada en NTFS.
que fragmento pertenece a un chero dado y cual es su jerarquía, es decir, en qué carpeta
se encuentra contenido. La eciencia en operaciones básicas de los sistemas operativos tales
como copiar, mover y buscar depende de la capacidad y estructura del sistema de archivos
que se esté usando.
En la actualidad cada sistema operativo cuenta con sus sistemas de archivos, por ejemplo
Microsoft utiliza los sistemas FAT y NTFS y los sistemas del tipo Unix como GNU/LINUX
o SOLARIS hacen uso de EXT2, EXT3, EXT4 y REISERFS.
Figura 4.25: Estructura de un sistema archivos NTFS
4.4.1.
Sistema de archivos FAT
De igual forma que en el FAT el sector de arranque contiene información del sistema.
El sistema de archivos FAT por sus siglas en inglés (File Allocation Table ), es un sistema
muy básico en el que la capacidad de la unidad de almacenamiento.
También es utilizada para cargar los archivos iniciales del sistema operativo. La tabla de
archivos principal o Master File Table, conforma un índice con información de cada archivo
de la partición, tal como la carpeta donde se encuentra, el nivel de seguridad que tiene dicho
La gura 4.24 muestra la estructura de un volumen o partición.
archivo y por supuesto los punteros a los bloques en los que está contenido el mismo. En los
archivos de sistema están contenidos cheros que no son accesibles para los usuarios y que
tienen que ver con el funcionamiento del mismo sistema.
Como se había mencionado anteriormente, el NTFS permite tener mayor control sobre
los archivos de una determinada partición, es posible establecer permisos de escritura o un
determinado usuario y de lectura a otro.
Figura 4.24: Estructura de un sistema archivos FAT
4.4.3.
Sistemas de archivos EXT2, EXT3 y EXT4
El sistema de archivos EXT2 fue el que más éxito obtuvo en los sistemas operativos Unix.
La estructura de un sistema de archivos es la siguiente:
Su introducción se dio en el año 1993 y su diseñador fue Rémy Card. Su estructura se basa
en grupos de bloques de datos, los cuales están conformados por:
Sector de arranque: En esta sección se encuentra almacenada información que utiliza el
sistema para acceder al volumen. Tablas de asignación de archivos FAT: Básicamente contiene un índice con las direcciones que los bloques que conforman una partición y además
contiene información del estado físico de los mismos. Esta tabla se repite para evitar pérdidas
de todo el sistema si la primera se daña.
Carpeta raíz y demás archivos: Acá se contiene la información básica de los archivos contenidos, como lo es la fecha de creación, tamaño del chero, último acceso entre otros. En
el FAT16 la dirección de cada clúster es de 16 bits por lo que la capacidad máxima de una
89
90
Capítulo 5
Arquitectura de computadores y diseño
de sistemas digitales
Figura 4.26: Estructura de un sistema archivos EXT2
Un súper bloque, donde se guardan lo archivos necesarios para el arranque del sistema,
este se encuentra copiado en cada grupo de bloques. Los descriptores de grupo de bloques
se encuentra en cada grupo como el súper bloque, contienen información de los grupos de
bloques de la partición. Los mapas de bits tanto de bloques como de inodos y la tabla de
inodos conforman una especie de índice para la localización los archivos. Los inodos con-
5.1.
5.1.1.
Segmentación (Pipelines)
La segmentación (Pipelining) es clave para hacer procesadores más rápidos hoy en día y
consiste en la ejecución de múltiples instrucciones a la vez, basándose en cuatro pasos:
tienen información de cada archivo tal como: el propietario del chero, los permisos y fecha
1.
de creación de los mismos.
Arquitectura de computadores: aspectos relevantes
Búsqueda (Fetch): Buscar la instrucción de la posición indicada por el contador de
programa.
El sistema EXT3, conservó la estructura del EXT2 pero se le implementó la funcionalidad
conocida como bitácora o en inglés journaling. Gracias a esto fue posible mantener la inte-
2.
3.
Ejecución (Execute): Ejecutar la instrucción.
4.
Escribir (Write): Escribir el resultado en el registro destino.
El en el sistema EXT2 se utilizaba la herramienta fsck (le system check ), con el inconveniente que se tenía que analizar toda la partición cuando habían incongruencias en el sistema
de archivos. Pero con EXT3 no era necesario leer todo la partición, ya que todas las modicaciones de los cheros son previamente guardadas en registros, los cuales son fácilmente
recuperables en caso de fallo.
Decodicación (Decode): Almacenar la instrucción en un registro de instrucciones,
decodicarla e incrementar el contador del programa.
gridad de los sistemas incluso aún cuando se presentaban pérdidas de potencia en los equipos.
La ejecución de cada una de las etapas no interere con la ejecución de las demás.
Sin embargo, esto puede llevarlo a pensar erróneamente creyendo que el pipeline va a
Desde el año 2006 se comenzó a trabajar en una nueva versión de la familia de archivos
extended, el EXT4 y que aún se encuentra en desarrollo, sin embargo para diciembre del 2008
fue incorporado al kernel de Linux. Entre las mejoras que presenta están: mayor capacidad
para el tamaño de las particiones, el cual pasó de 32 terabytes a 1 exabyte (un billón de
gigabytes), mejor velocidad en el acceso de archivos y chequeo de los mismos, así como un
sistema que procura que los archivos se vayan guardando continuamente lo más que sea posible.
acelerar la ejecución de una instrucción, por lo que hay que resaltar que la segmentación no
acelera la ejecución de una instrucción pero si de un conjunto de instrucciones.
El ejemplo más conocido y de fácil entendimiento es el método presentado por Henry Ford
en la línea de producción de automóviles con empleados especializados para cada labor y divididos en grupos, así los encargados de la construcción del chasis no tienen conocimiento de
pintura u otra labor del proceso de construcción del vehículo y mientras cada equipo trabaja
en su especialidad, los otros equipos esperan que el anterior termine para empezar, si cada
equipo tardara una hora en realizar su trabajo un automóvil estaría listo en cuatro horas.
Al querer mejorar la producción de la fábrica, es posible incrementar el rendimiento de cada
grupo, si se duplicara se producirían el doble de automóviles, pero no es suciente debido
a que no se optimizan recursos y la calidad de vida de los empleados disminuiría, ante esto
una buena idea sería crear una nueva línea de ensamblaje, pero esto llevaría a altos costos de
91
92
5.1.2.
inversión y mantenimiento.
Analizando los casos anteriores suena interesante la idea de trabajar en paralelo, con los
Limitaciones de la segmentación
Riesgos por dependencia de datos (data hazards)
mismos equipos especializados de trabajo; así mientras un equipo está en la etapa de insta-
Para el caso expuesto en la gura 5.1 las tres instrucciones ejecutadas eran independientes,
lación del motor, otro equipo puede ir construyendo un nuevo chasis, los equipos no esperan
por lo que ninguna utilizaba datos calculados por otra instrucción, pero si se diera el caso?
a que el anterior termine y mantienen un ritmo de trabajo constante, produciendo un carro
Es ahí cuando se producen errores por dependencias de datos, por ejemplo:
por hora, en lugar de uno cada cuatro horas.
sub
and
or
add
sw
Este brillante método es utilizado de manera análoga para la ejecución de instrucciones
en un computador. Por ejemplo, supongamos que se tiene la instrucción cargar palabra:
lw
y que esta instrucción tiene un tiempo total de ejecución de 800 picosegundos, además se
$2,$1,$3
$12,$2,$5
$13,$6,$2
$14,$2,$2
$15,100($2)
#
#
#
#
#
sub escribe al registro $2
el operando $2 depende de sub
el segundo operando $2 depende de sub
primer y segundo operando dependen de sub
el indice $2 depende de sub
cuenta con el siguiente código:
lw $1,100($0)
lw $2,200($0)
lw $3,300($0)
Nótese que sin el uso de la segmentación el tiempo de ejecución de las tres instrucciones
es de:
800 ps x 3 = 2400 ps = 2.4 ns
Y con el uso de la segmentación el tiempo de ejecución de la instrucción es el mismo pero
el de ejecución del grupo de instrucciones se reduce a 1400 ps, como se muestra en la gura 5.1.
Un concepto importante que cabe aclarar en este momento es que al número de etapas
que posee el pipeline es conocido como la profundidad del pipeline.
A simple vista todo lo descrito anteriormente luce maravilloso pero no hay que dejar pasar
por alto las limitaciones de la segmentación que se enumeran más adelante.
Figura 5.2: Secuencia de instrucciones con riesgos de dependencia
Existen diversas formas de evitar estos problemas de dependencia tales como las detenciones y la anticipación.
X
Detenciones
Consiste en detener las instrucciones en la segmentación insertando burbujas hasta que
se resuelva el riego, como se ilustra en la gura 5.5.
X
Anticipación
En este caso se toman las entradas a la ALU desde cualquier registro de segmentación,
con ayuda de multiplexores y utilizando un control con lo que se pueden ejecutar las instrucciones sin necesidad de burbujas, entonces se utilizan los resultados temporalmente
sin esperar que los registros sean escritos como se muestra en la gura 5.6.
Figura 5.1: Ejecución de tres instrucciones sin segmentación y con segmentación
93
94
Figura 5.5: Secuencia de instrucciones segmentada con burbujas insertadas para resolver el
riesgo de dependencia de datos.
Figura 5.3: Entradas a la ALU sin unidad de anticipación
Figura 5.6: Secuencia de instrucciones segmentada con anticipación para resolver el riesgo de
dependencia de datos.
Riesgos por saltos
Figura 5.4: Entradas a la ALU con unidad de anticipación
Como se ha visto anteriormente, con la segmentación se busca una instrucción nueva con
cada ciclo de reloj, pero en el caso de los saltos existe un retardo en determinar la instrucción
que se va a tomar pues es hasta en la etapa de memoria que se decide si el salto se va a tomar
o no.
En este caso se presentan dos soluciones:
95
96
X
Detenerse hasta que se complete el salto por completo, lo cual produce que se pierdan
7. La unidad de gestión de memoria (Memory Management Unit) solo puede usarse una
varios ciclos de reloj en la ejecuci[on de instrucciones.
X
Suponer que no se realiza el salto, en este caso se continua avanzando con el ujo de
dirección de dato por cada instrucción.
8. Se tienen cinco o más bits para un campo designado de registro entero, por lo que se
pueden reverenciar explícitamente al menos 32 registros enteros.
instrucciones y si se determina que el salto debe hacerse, entonces se descartan las
instrucciones que se habían buscado y decodicado.
9. Se tienen cuatro o más bits para un campo designado de registro de punto otante, por
lo que se pueden reverenciar explícitamente al menos 16 registros de punto otante.
Excepciones
Para explicar el riesgo de las excepciones se utilizara un ejemplo, asumiendo que la instrucción
add $1,$2,$1
presenta un desbordamiento aritmético, en ese caso se transere el
Existe la idea de que los diseños RISC y CISC pueden sacar provecho de la inclusión de
características de ambos en un mismo diseño.
control a la rutina de excepciones después de ejecutada dicha instrucción para evitar que un
valor no válido sea reejado en los registros o en la memoria, luego se va a la posición de la
rutina de excepción y se permite que uyan las instrucciones que siguen después del add y
se comienza a buscar instrucciones a partir de la nueva dirección.
5.1.3.
Computadoras con un conjunto de instrucciones complejo
5.1.5.
Superescalar
Un procesador superescalar maneja más de una instrucción por ciclo de reloj con una
estructura segmentada, conteniendo las siguientes etapas:
1. Lectura (fetch)
CISC: Complex Instruction Set Computer
2. Decodicación (decode)
Casi todas las arquitecturas CISC destacan por la microprogramación, lo cual signica
3. Lanzamiento (dispatch)
que cada instrucción de máquina es interpretada por un microprograma localizado en una
memoria en el circuito integrado del procesador, las instrucciones son largas y de longitud
desigual.
5. Escritura (writeback)
Mediante una serie de microinstrucciones almacenadas en una ROM interna de la máquina
se decodican internamente y se ejecutan las instrucciones compuestas, para esto se requieren
varios ciclos de reloj o al menos un ciclo por microinstrucción.
5.1.4.
4. Ejecución (execute)
Computadoras con un conjunto de instrucciones reducido
RISC: Reduced Instruction Set Computer
Por otro lado, el procesamiento de instrucciones RISC requiere instrucciones cortas, del
mismo tamaño y que pueden ser procesadas más rapidamente.
6. Finalización (retirement)
El procesamiento superescalar no altera el modelo de programación por lo que es transparente al programador, es decir, se cree que está ocurriendo una ejecución secuencial cuando
en realidad se está haciendo una ejecución en paralelo.
5.1.6.
Multiprocesadores
Hasta hace pocos años todos los computadores hacían uso de un único microprocesador
de uso general. Actualmente es posible encontrar diferentes marcas de microprocesadores de
dos incluso más núcleos que permiten mejorar el desempeño del computador al ejecutarse
varios hilos que corresponden a un mismo proceso o a procesos diferentes.
1. Tamaño típico de la instrucción: 4 bytes.
Dentro de las características de los multiprocesadores se destaca:
2. Reducido número de modos de direccionamiento.
3. No se usa direccionamiento indirecto que requiera hacer accesos a memoria para conseguir la dirección de memoria del operando.
X
Hay dos o más procesadores similares.
X
Los procesadores comparten la memoria principal asi los dispositivos de entrada y salida, están conectados de manera que los accesos tarden el mismo tiempo para cualquier
4. No se direcciona más de un operando de memoria por instrucción.
procesador.
5. No hay operaciones que combinen la carga u almacenamiento con cálculos aritméticos.
X
Los procesadores están en capacidad de realizar las mismas funciones.
6. Las instrucciones de carga o almacenamiento no permiten una alineación de datos
X
El sistema está controlado por un sistema operativo integrado que permite la interacción
arbitraria.
entre los microprocesadores.
97
98
Esta arquitectura presenta un problema de coherencia de cache, pues los microprocesadores comparten la memoria principal, pero cada uno cuenta con su propia memoria cache,
así que cuando un microprocesador escribe en una dirección de memoria lo hace sobre su
caché, de manera que si otro microprocesador tiene almacenada la misma dirección de memoria en su caché trabajará con una copia errónea del dato almacenado.
or U_or (y,asel,bsel);
endmodule
Como se puede apreciar el multiplexor está conformado por dos compuertas AND, una
OR y un inversor, las cuales están conectadas por las variables del tipo wire. Primero se
declara el tipo de la compuerta, que puede ser not, or o and, le sigue el nombre que se le
5.2.
Diseño de sistemas digitales
5.2.1.
Lenguajes de descripción de hardware
quiera dar para diferenciarla de las demás y por último entre paréntesis se declara la salida
y las entradas.
Descripción por comportamiento
Existen diversos lenguajes de descripción de hardware, que permiten el análisis y diseño
de un circuito electrónico, para el caso del estudiante de Ingeniería Eléctrica de la Universidad
de Costa Rica resultará muy familiar el uso Verilog en diversos cursos de su carrera.
En esta forma un circuito es construido haciendo mediante la descripción del funcionamiento de sus componentes, y no por su estructura física. Por ejemplo si quisiera obtener la suma
lógica de dos entradas A y B, no se implemente haciendo uso de la compuerta básica OR, si
5.2.2.
no que se representaría mediante la suma aritmética A + B.
Verilog
Verilog es un lenguaje por medio del cual se puede describir en forma completa un circuito
El siguiente código corresponde a un multiplexor de dos entradas.
digital y es muy utilizado para realizar simulaciones y diseños.
El programa Verilog fue creado en el año 1985 por Phil Moorby y durante cinco años
fue código privado. Debido a presiones externas que se generaban por su gran potencial,
la empresa Cadence Design Systems decidió liberarlo. En el año de 1991 se funda la OVI,
Open Verilog International, para mejorar el desarrollo del mismo implementando diversos
simuladores. La IEEE planteó un estándar para este lenguaje que comenzó a regir en 1995.
Un circuito en Verilog puede estar escrito estructuralmente o por comportamiento.
Descripción estructural
module mux_using_assign(
din_0
, // Entrada 1
din_1
, // Entrada 0
sel
, // Selector de entradas
mux_out
// Salida
);
//-----------Entradas--------------input din_0, din_1, sel ;
//-----------Salida--------------output mux_out;
//------------Variables Internas-------wire mux_out;
//-------------Código----------------assign mux_out = (sel) ? din_1 : din_0;
endmodule
//Fin del módulo
En el modo estructural se describe el circuito utilizando las compuertas básicas de los
circuitos digitales como las AND, OR, XOR, XNOR, entre otras. Interconectándose entre sí
A diferencia de la descripción estructural, la implementación del circuito en sí se base en
por medio de cables que son previamente declarados. Este modo es bastante preciso ya que
única linea. En donde la salida mux_out toma el valor de la entrada din_1 si la señal sel
presenta el circuito como tal y como es si fuese construido, sin embargo para modelos muy
está en uno, de lo contrario toma el valor de la entrada din_0.
grandes se vuelve bastante tedioso y difícil de entender.
Por ejemplo si se quisiera describir un multiplexor de dos entradas a un salida el código
sería el siguiente:
module mux_2to1_gates(a,b,sel,y);
//-----------Entradas--------------input a,b,sel;
//-----------Salida--------------output y;
//------------Variables Internas-------wire sel,a_sel,b_sel;
//------------Declaración de las compuertas lógicas-------not U_inv (inv_sel,sel);
and U_anda (asel,a,inv_sel), U_andb (bsel,b,sel);
99
100
Capítulo 6
Ejemplos y laboratorios
6.1.
Programas ejemplo
Los ejemplos presentados serán codicados en lenguaje de máquina de la CPUCR; la
extensión de estos conceptos a otros sistemas computador, es directa una vez que se conoce
la arquitectura del sistema y su conjunto de instrucciones.
6.1.1.
Operaciones de control
Un ejemplo de la estructura del programa con operaciones de control como la presentada
en la sección 3.2.3 puede darse con tres números sin signo que están almacenados en las
variables X, Y y Z respectivamente. Al colocarlos en orden ascendente en las variables A, B
Figura 6.2: Algoritmo para ordenar tres números en orden ascendente
y C. El mayor de ellos quedará almacenado en C.
6. En la codicación de este programa se han hecho varias suposiciones. Primero, las lo-
Solución:
calizaciones X, Y, Z, A, B y C se han ubicado en las direcciones que aparecen en la
Se utilizará la programación modular siguiendo los pasos de la sección 3.1 para resolver
Figura 6.1. Además el inicio del programa se escogió arbitrariamente en @0203.
el problema.
1. El problema se especica con el enunciado.
2. Datos de entrada X,Y y Z. Datos de salida A,B y C.
Figura 6.1: Localizaciones X, Y, Z, A, B y C
3. El formato de estas estructuras de datos se puede ver en la Figura 6.1.
4. El algoritmo se puede observar en la Figura 6.2.
5. Los bloques del algoritmo son lo sucientemente sencillos para comenzar a codicarlos
de inmediato.
101
Código: Programa para ordenar tres números en orden ascendente
*
A
B
C
=
=
=
=
@0400
*
* + 1
* + 2
;Inicie contador de posicion
;variable A en dirección @0400
;variable B en dirección @0401
;variable C en dirección @0402
102
TEMP = * + 3
;variable TEMP en dirección @0403
* = @0200
;reinicie contador de posición
X = *
;variable X en dirección @0200
Y = * + 1
;variable Y en dirección @0201
Z = * + 2
;variable Z en dirección @0202
* = * + 3
;contador de posición a @0203
INICIO LDA X
;INICIO está en @0203
SUB Y
BCC PROG1 ;compare magnitudes de X y Y
LDA X
STA B
;X va a B
LDA Y
STA A
;Y va a A
JMP PROG2 ;continue
;------------------------------------------------PROG1 LDA X
STA A
;X va a A
LDA Y
STA B
;Y va a B
;------------------------------------------------PROG2 LDA Z
SUB B
BCC PROG3 ;compare magnitudes de Z y B
LDA Z
;Z es el mayor, póngalo en C
STA C
FIN HLT
;fin del programa
;------------------------------------------------PROG3 LDA B
;Z<B entonces:
STA C
;B va a C
LDA Z
STA B
;y Z va a B
LDA B
SUB A
BCC PROG4 ;compare magnitudes de B y A
JMP FIN
;A<B termine el programa
;------------------------------------------------PROG4 LDA A
;B<A entonces cambie de lugar
STA TEMP
;B con A y termine
LDA B
STA A
LDA TEMP
STA B
JMP FIN
6.1.2.
1. El problema queda bien denido con el enunciado.
2. Estructuras de datos:
X
Un arreglo de 100 datos con su primer elemento almacenado en DATO.
X
Una variable de salida llamada RESULT.
X
Una variable llamada CONT que lleve la cuenta de los números que se han sumado.
X
de sumar.
3. Formatos:
X
El arreglo de datos estará almacenado a partir de la posición DATO=@0500 y
continuará, a palabra por número, hasta la posición @0643.
X
La variable RESULT únicamente ocupa una localización y se puede poner en
@0644.
X
Lazos
Una variable llamada APUNT que mantenga la dirección del número que se ha
Contador CONT deberá contar hasta 100 y por lo tanto requiere dos palabras de
memoria. La parte baja del contador la almacenaremos en @0645 y la parte alta
en @0646.
Sumar 100 números que se encuentran almacenados a partir de la posición DATO hasta
la posición DATO+@143. El resultado no debe considerar el llevo generado en las sumas. La
respuesta debe almacenarse en la dirección RESULT.
X
El apuntador APUNT debe contener una dirección por lo tanto necesita dos localizaciones de memoria. La dirección se debe almacenar, parte baja primero y
la parte alta después, para que pueda ser usada por una instrucción con direc-
Solución:
cionamiento indirecto. APUNT estará en @0647 y @0650.
Una alternativa de solución es efectuar una repetición (100 veces) del comando suma,
pero tal programación no es eciente. Si luego se deseara sumar los números almacenados en
1000 posiciones de memoria, habría que modicar sustancialmente el programa anterior y el
4. El algoritmo se puede ver en la Figura 3.9. Primero se inicializa el contador con el
nuevo programa ocuparía buena parte de la memoria. Utilizando un lazo se logra escribir un
valor 100. CONT será decrementado a través del lazo y cuando su contenido llegue a
programa más compacto y fácilmente adaptable a cualquier número de datos.
cero el lazo deberá terminarse. A APUNT se le inicializa con la dirección @0500 que
es la del primer número en el arreglo. El acumulador se borra y entonces se procede a
Resolviendo de acuerdo a los pasos dados para programación modular se tiene:
sumar el primer número. Una vez sumado el número se debe incrementar APUNT en
uno para que contenga la dirección del siguiente número a sumar. Además la variable
CONT se decrementa en uno para contabilizar la suma que se acaba de hacer. A este
103
104
RESULT = *
* = * + 1
CONT = *
* = * + 2
APUNT = *
CIEN = @0144
* = @0200
Figura 6.3: Algoritmo para ejemplo de utilización de lazos
punto se debe decidir si ya se sumaron los 100 números; esto se realiza preguntando
si el contenido de CONT es igual a cero. Observen que con solo modicar las variable
CONT y APUNT se puede cambiar el número de datos a sumar y la posición de inicio
del arreglo respectivamente.
INICIO LDA
STA
LDA
STA
LDA
STA
LDA
STA
CLA
SUME1 ADD
PHA
LDA
BNE
LDA
DCA
STA
LDA
SUME2 DCA
STA
LDA
INA
STA
BNE
LDA
INA
STA
SUME3 LDA
BNE
LDA
BEQ
SUME4 PLA
JMP
SUME5 PLA
STA
HLT
6.1.3.
; DECLARACIONES
#<CIEN ;--------------------------CONT
#>CIEN
CONT+1
#<DATO ;
INICIACION
APUNT
#>DATO
APUNT+1
;--------------------------(APUNT)
;
PROCESAMIENTO
CONT
;--------------------------SUME2
CONT+1
CONT+1 ;
CONT
CONT
APUNT
DECREMENTE CONT
;---------------------------
APUNT
SUME3 ;
APUNT+1
INCREMENTE APUNT
APUNT+1 ;--------------------------CONT
SUME4
CONT+1 ; PRUEBA Y DIRECCIONAMIENTO
SUME5
SUME1
;---------------------------
RESULT ;
FIN DEL LAZO
;---------------------------
Comparaciones entre números
Ejemplo:
Para averiguar si A>M donde A es el acumulador y M es alguna posición de memoria,
5. Existen dos módulos que necesitan detallarse más: cuando se incrementa APUNT y
cuando se decrementa CONT. Esto se deja como un ejercicio al lector. El programa
viene codicado en la Tabla 3.6. Observe como se almacena el acumulador en la pila
para poder realizar las rutinas de incremente y decremente sin que se modique el resultado parcial de la suma que se encuentra en el acumulador.
basta con vericar si el resultado de A-M es mayor o igual a cero. En la Figura 6.4, están
sintetizadas todas la combinaciones posibles de las banderas N, Z, C y V, para cada una de
las comparaciones que se pueden efectuar, después de realizar una operación de resta (SUB).
Las dos interpretaciones, corresponden a las situaciones de operandos sin signo y operandos con signo. Para desarrollar una prueba determinada, basta con agrupar, en el mapa de
Karnaugh correspondiente, aquellos mintérminos que corresponden a la comparación que se
busca. Todos aquellos mintérminos con una X, representan combinaciones de las banderas
que nunca se presentan y por lo tanto pueden ser libremente usadas en las agrupaciones que
Código: Programa para sumar 100 números
se formen.
Algunas agrupaciones, de todas las posibles en los mapas de Karnaugh de la Figura 6.4,
* = @0500
DATO = *
* = * + @144
aparecen en la Tabla 6.1. Los algoritmos para realizar las comparaciones X>M sin signo y
X>M con signo se pueden observar en la Figura 6.5.
105
106
Figura 6.4: Combinaciones posibles de las banderas N, Z, C y V
Resultado
de (A)-(M)
Igual a cero
Mayor que cero
Menor que cero
Mayor o igual a cero
Menor o igual a cero
Números
sin signo
Z=1
Z'C = 1
C' = 1
C=1
Z+C' = 1
Números
con signo
Z=1
Z'(NV+N'V') = 1
N'V+NV' = 1
NV+N'V' = 1
Z+N'V+NV' = 1
Tabla 6.1: Comparaciones más usadas entre dos números
Figura 6.5: Comparación de números
6.1.4.
Subrutina abierta
Un ejemplo de una subrutina abierta que calcula el valor promedio de dos valores A y B,
almacenando el resultado en la localización C. También, se muestra como se inserta la misma
Es importante observar, que los resultados que se obtienen después de realizar la operación
subrutina en un programa para operar con distintos argumentos.
SUB, se tabulan, en la Figura 6.4, como resultados con signo. En el mapa de Karnaugh para
los operandos sin signo, se presenta la condición ME, menor que cero, que se reere al signo
del resultado. Si no se requiere tomar en cuenta el signo del resultado, todas estas condiciones
cambiarían de ME a MA, siendo la única diferencia, la condición del llevo, C. Cuando C=1, el
resultado de la resta no se ha salido del ámbito de números positivos que se está usando. Una
resta de 5 en 20, causaría un llevo igual a 1. Por otro lado, si C=0, la resta ha causado que
el resultado quede fuera del ámbito de números positivos que el acumulador puede representar.
Cuando la operación realizada es una suma (ADD), la interpretación de los mapas de la
Figura 6.4 es distinta. Si se tiene únicamente operandos positivos, sin signo, la suma de ellos
sólo puede dar un resultado positivo; por lo tanto, se debe seguir la interpretación del mapa
Código de la subrutina:
PROM LDA A
ADD B
ROR
STA C
6.1.5.
Subrutina cerrada
En la Figura 6.6 se ve el ejemplo de la Tabla 6.2 adaptado a subrutinas cerradas.
de Karnaugh según se discutió en el párrafo anterior. Además, la condición de igual a cero
ya no es la misma. Cuando se realiza una suma, el acumulador puede llegar a cero por dos
razones: se sumó cero con cero o se sumaron dos números que rebasaron la capacidad del
acumulador y lo pusieron a cero. En el primer caso, el llevo resulta cero y sale la condición
N=0, V=0, Z=1 y C=0; la cual se encuentra marcada con una X. Esta condición, sí es válida
para la operación ADD, pero no existe para la operación SUB. El segundo caso es la condición
IG, que ya se encuentra marcada en ambos mapas. Cuando se suman números con signo, el
mapa de Karnaugh correspondiente se interpreta tal y como aparece en la Figura 6.4 y con
la inclusión de la nueva condición de igual a cero que se acaba de discutir.
107
108
Subrutina
Algoritmo
PROM LDA A
ADD B
ROR
STA C
Haga:
X3 = (X1+X2)/2
•••
Codicación
•••
LDA X1
ADD X2
ROR
STA X3
•••
LDA Y1
Haga:
ADD Y2
Y3 = (Y1+Y2)/2 ROR
STA Y3
•••
•••
LDA seguida de una instrucción STA. Esto implica que por cada dato de una palabra que
se desea movilizar entre el programa principal y la subrutina, se ocupan seis palabras de
programa, lo que implica que manteniendo esta relación para cualquier número de datos se
observa una ineciencia en el uso del espacio de memoria.
La pila permite manejar el anidamiento de subrutinas gracias al mecanismo que permite
salir de primero al último que entra, por lo que se dice que una subrutina H está anidada
en otra M, cuando H es llamada desde M. El anidamiento se puede llevar al nivel de profundidad que permite el tamaño de la pila, por ejemplo, un anidamiento es de quinto nivel, si
cinco subrutinas están anidadas entre sí: B llama a C, C a D, D a E y esta a su vez llama
a F, siendo B y F las de menor y mayor profundidad respectivamente. Las direcciones de
retorno se van almacenando una después de la otra en el orden de llamado, quedando en la
cumbre de la pila, la dirección de retorno de la subrutina que llamó a la que está anidada
Haga:
Z3 = (Z1+Z2)/2
LDA Z1
ADD Z2
ROR
STA Z3
•••
•••
regresar al programa que originó el primer llamado. En este momento, la pila queda total-
Tabla 6.2: Ejemplo de subrutinas abiertas
más profundamente. Cuando se termina de ejecutar esta última, se regresa al siguiente nivel,
recuperándose dos posiciones de la pila, conforme se van terminando de ejecutar subrutinas,
se van recobrando las direcciones de retorno en el orden inverso en que se almacenaron, hasta
mente "desprovista"de cualquier dirección de retorno.
Paso de parámetros directamente a memoria
En el ejemplo de la Figura 6.6, las posiciones de memoria A y B, se emplean para almacenar los datos de entrada, y el acumulador se usa para pasar el dato de salida de la subrutina.
En este caso, se combinan dos formas de pasar parámetros:
X
Directamente a memoria para los datos de entrada
X
Por medio de los registros de la CPU para los datos de salida.
Paso de parámetros indirectamente a memoria
Se desea hacer una subrutina BORRAR, para borrar (poner en cero) una sección de
memoria de longitud variable.
Código de la subrutina:
* = @0326
DIRFTE = *
* = *+2
CONT = *
* = @400
Figura 6.6: Ejemplo de subrutina cerrada
Observe como se deben transferir las variables de entrada y resultados entre el programa
principal y la subrutina, esto junto a los saltos y el retornos de la subrutina aumentan el
tiempo de ejecución. Cada dato que se transere a la subrutina, ocupa una instrucción de
109
;Borre posición apuntada por DIRFTE
BORRAR CLA
STA (DIRFTE)
;Borre posición
;Incremente (DIRFTE)
INCR DIRFTE
;Decremente (CONT)
DECR CONT
;¾CONT=0?
LDA CONT
110
ORA CONT+1
BNE BORRAR
RTS
Denición
Codicación
MACRO PROM A,B,C
•
LDA A
•
ADD B
PROM X1,X2,X3
ROR
•
STA C
•
FINMAC
PROM Y1,Y2,Y3
;Salte si (CONT) y
;(CONT+1) no son 0.
;Hecho
En este caso tenemos un solo tipo de datos sobre los cuales operar y ningún parámetro de
salida (la salida en este caso consiste en obtener una sección de memoria borrada). El bloque
de memoria a borrar es en realidad un dato de múltiples palabras ordenadas en posiciones
•
•
sucesivas, por lo que, se cargará en una palabra de doble precisión, un puntero que indique su
posición de inicio. Además, debe cargarse en una posición de memoria, o en el acumulador,
PROM Z1,Z2,Z3
el número de palabras del bloque, que nos indique, cúantas posiciones de memoria debemos
•
•
borrar en realidad. En cualquiera de los dos casos, el tamaño de palabra impone un límite
máximo de 64 palabras. Obviamente, si se deseara un valor mayor, no será posible usar el
acumulador y deberemos emplear un dato en memoria de doble precisión.
Tabla 6.3: Ejemplo de macroinstrucciones
La dirección del bloque la tomará la subrutina de DIRFTE (@0326) y la longitud del
bloque de la variable de doble precisión CONT (@0330). Como se puede apreciar, al nalizar
la subrutina BORRAR, quedan alterados los contenidos de DIRFTE y CONT. Si se desea
utilizar la subrutina en otro bloque de memoria es necesario colocar los valores requeridos en
DIRFTE y CONT para que la subrutina funcione correctamente de nuevo.
Paso implícito de parámetros
MACRO INCR VALOR
LDA VALOR
INA
STA VALOR
BNE LISTO+3
LDA VALOR+1
INA
LISTO STA VALOR+1
FINMAC
MACRO DECR VALOR
LDA VALOR
BNE SIGUE
LDA VALOR+1
DCA
STA VALOR+1
LDA VALOR
SIGUE DCA
STA VALOR
FINMAC
Código de la subrutina:
El uso de las macroinstrucciones del código anterior simplicaría mucho la construcción
ROTDE4
ROTDE3
ROTDE2
ROTDE1
ROR
ROR
ROR
ROR
RTS
de programas que utilicen punteros y contadores de dos palabras. Este procedimiento, se
puede generalizar construyendo otras macroinstrucciones, proporcionando así ventajas que
resultan evidentes: el programador escribe menos, su programa es más legible y le permite
insertar información variable en pequeños paquetes de programación. Esto puede extender-
La subrutina anterior rota el acumulador 1, 2, 3 o 4 veces, dependiendo del punto de
se hasta la denición de un nuevo lenguaje, cuyas instrucciones están denidas mediante
ingreso. En este caso, se pasa implícitamente el número de veces que se rotará el acumulador.
macrointrucciones. Es posible denir instrucciones tales como
Para rotar el acumulador tres veces, se hace el llamado JSR ROTDE3, si por el contrario se
ELSE”,
”FOR-NEXT”
”DO
WHILE”,
”IF-THEN-
y otras denidas en los lenguajes de alto nivel.
desea rotar el acumulador cuatro veces se hace el llamado JSR ROTDE4.
Como el ensamblador crea un diccionario con las macroinstrucciones al encontrar la codicación de la Tabla 6.3, consulta dicho diccionario y luego sustituye la codicación.
Macroinstrucciones
La tabla 6.3 presenta el ejemplo de la sección 6.1.4 modicado para utiliza macroinstrucciones.
6.1.6.
Aritmética de Múltiple Precisión y en Punto Flotante
En este ejemplo se realizará una subrutina que suma dos números representados con PAL
En el siguiente código se han codicado como macroinstrucciones, las subrutinas para
palabras cada uno (PAL<63). La dirección de uno de los números a sumar, se encuentra en
incrementar y decrementar números formados por dos posiciones de memoria sucesivas. La
DIRACU y DIRACU+1, y la del otro, se localiza en DIROPE y DIROPE+1. El resultado,
variable VALOR, contiene la parte baja del número y en VALOR+1, se almacena su parte
debe quedar a partir de la dirección contenida en DIRACU y DIRACU+1. Los números se
alta.
encuentran almacenados con la palabra menos signicativa de primero y las siguientes en las
direcciones ascendentes que le siguen.
Código de la subrutina: Macroinstrucciones para incrementar y decrementar variables de
doble precisión.
111
112
INCR DIROPE
PLS
JMP SUMA
Es interesante observar como las localizaciones apuntadas por DIRACU y DIRACU+1,
en realidad funcionan como un acumulador. En esa dirección, se almacena uno de los operandos y también el resultado después de la operación. Además PAL puede ser un número de
palabras jo a lo largo de toda la programación, por lo que se hace innecesario que antes del
llamado se requiera pasar como argumento de la subrutina su valor. Para hacer esto posible,
se debe iniciar la variable PAL con el número de palabras de los operandos al principio del
programa. Esto puede realizarse de dos modos:
NUMPAL = 7
.
.
LDA #NUMPAL
STA PAL
.
.
o también como:
.
.
LDA #7
STA PAL
.
.
En los dos casos se carga el acumulador con una constante igual al número de palabras
de los operandos, para luego transferirla a la posición de memoria de la variable PAL donde
será usada por el programa. Es preferible usar el primer modo al segundo ya que la denición
Figura 6.7: Subrutina para sumar dos números con PAL palabras de precisión
del número de palabras por operando queda
concentrada en la parte de declaraciones del programa, donde es mas fácil modicar la
constante. De esta forma, si NUMPAL se usa en varias secciones de un programa mas extenso,
Solución:
su modicación se puede realizar sin errores y con un
Se supone que el programa que llama a la subrutina, ya cargó las direcciones en DIRACU,
DIRACU+1, DIROPE y DIROPE+1, y la posición de memoria PAL con el número de pal-
mínimo de trabajo. Otra ventaja de este método es que el programa resulta más fácil de
leer y por lo tanto más fácil de corregir y modicar en el futuro.
abras de cada operando. Además, se utilizará la macroinstrucción INCR. La Figura 6.7, nos
muestra el diagrama de bloques de la subrutina, preste atención a la forma en que se transere el acarreo al acumulador, para que pueda ser sumado con el par de palabras.
Desplazamiento a la izquierda
Antes de llamar a la subrutina de desplazamiento a la izquierda para números de múltiple
precisión, DIRNUM y DIRNUM+1 se deben iniciar para apuntar a la palabra menos signi-
Código de la subrutina:
cativa del número.
SUMAMP CLC
SUMA CLA
ROL
ADD (DIRACU)
BCC S_SUMA
PHS
ADD (DIROPE)
JMP CONT
S_SUMA ADD (DIROPE)
PHS
CONT STA (DIRACU)
LDA PAL
DCA
STA PAL
BNE SIGA
PLS
RTS
SIGA INCR DIRACU
Código de la subrutina:
DESIZ LDA (DIRNUM)
ROL
STA (DIRNUM)
PHS
INCR DIRNUM
LDA PAL
DCA
STA PAL
BEQ RETIZ
PLS
JMP DESIZ
RETIZ PLS
RTS
113
114
Desplazamiento a la derecha
Para el caso de la subrutina de desplazamiento a la derecha para números de múltiple
precisión las instrucciones entre las etiquetas DESDER y DES1, cambian el contenido de las
direcciones DIRNUM y DIRNUM+1, para que apunten a la palabra más signicativa del
número de múltiple precisión. Luego, en el lazo de la subrutina, el contenido de DIRNUM y
DIRNUM+1, se decrementa, hasta que nalmente, apunta a la palabra menos signicativa
del número.
Código de la subrutina:
DESDER LDA PAL
DCA
ADD DIRNUM
STA DIRNUM
CLA
ROL
ADD DIRNUM+1
STA DIRNUM+1
CLC
DES1 LDA (DIRNUM)
ROR
STA (DIRNUM)
PHS
DECR DIRNUM
LDA PAL
DCA
STA PAL
BEQ RETDE
PLS
JMP DES1
RETDE PLS
RTS
Figura 6.8: Algoritmo para una subrutina para multiplicación de dos números sin signo
Complemento a dos
Subrutina de complemento a dos de un número de múltiple precisión:
Multiplicación binaria
El diagrama de bloques de la Figura 6.8, presenta el algoritmo para una subrutina para
multiplicación de dos números sin signo, donde CONT es un contador que lleva el número
Código de la subrutina:
de bits que tiene MPDR.
COMPLM SEC
COMP1 LDA (DIRNUM)
CPA
STA (DIRNUM)
CLA
ROL
ADD (DIRNUM)
STA (DIRNUM)
PHS
INCR DIRNUM
LDA PAL
DCA
STA PAL
BEQ RETCM
PLS
JMP COMP1
RETCM PLS
RTS
Código de la subrutina:
MULTIP CLA
STA
LDA
STA
CLC
MULT LDA
ROR
STA
LDA
ROR
STA
PHS
LDA
BEQ
115
PROD
#6
CONT
PROD
PROD
MPDR
MPDR
CONT
FIN
116
DCA
STA
PLS
BCC
LDA
ADD
STA
JMP
FIN PLS
RTS
Solución:
CONT
MULT
PROD
MPDO
PROD
MULT
Existen modicaciones al código presentado anteriormente para incluir números con signo. La modicación más sencilla consiste en inicialmente probar el signo del multiplicando y
el multiplicador para ver si ambos son iguales o distintos. Si son iguales entonces el signo del
resultado será positivo; pero si los signos son distintos el producto será negativo.
6.2.
Laboratorios
6.2.1.
Mapas de memoria
Laboratorio 1
Dado el siguiente programa para la CPUCR y utilizando la tabla 2.4 de instrucciones:
1. Obtenga el mapa de memoria suponiendo que todas las posiciones de memoria que se
utilizan tienen @46.
2. Ejecute el programa hasta que se de un lazo innito o la instrucción HLT, muestre el
Figura 6.9: Mapa de memoria para el laboratorio 1
valore de todos los registros internos.
Código
Calculos:
* = @0000
LDA
TAP
LDA
ADD
BMI
OT2 BEQ
OT1 JMP
OT STA
NOP
ADD
@63
(@0014)
@0022
OT1
OT
OT2
@0033
Ejecución del programa.
@44
117
118
Laboratorio 2
Ejecución del programa.
Según el mapa de memoria de la CPUCR mostrado en la solución.
1. Obtenga el código en lenguaje ensamblador de la CPUCR, se debe usar etiquetas si
existen saltos condicionales o incondicionales, y no direcciones o desplazamientos.
2. Que función realiza el programa?
Solución:
Código
CLA
STA
INA
STA
br2 LDA
ROR
ROR
BPL
CLA
STA
br LDA
INA
STA
BNE
HLT
@1000
@1001
(@1000)
br
(@1000)
@1000
@1000
br2
Figura 6.10: Mapa de memoria para el laboratorio 2
Direcciones de memoria después de un desplazamiento:
119
120
memoria donde se llamó inicialmente, osea, la posición @0000.
1. Discuta con sus compañeros qué realiza cada instrucción del programa (incluyendo su
modo de direccionamiento), si es necesario, consulte el libro de texto para la descripción detallada de cada instrucción. Discuta el valor nal de los registros y los valores
almacenados en las distintas posiciones de memoria.
2. Ensamble el programa presionando la tecla F9.
3. Ahora presione las teclas Alt-F9, aparecerá la pantalla de simulación. La pantalla consta
de cuatro ventanas. La mayor ventana que se ocupa la mitad de la pantalla es el ıMapa
de Memoria: éste indica todos los valores que se encuentran en todas las posiciones de
memoria. Además, a la derecha de cada valor, se encontrará el texto del programa que
acaba de introducir. Las otras ventanas muestran los registros (PC:
contador de programa, A: acumulador, P: puntero de pila, y las banderas), el contenido
de la pila (direcciones que comienzan con @77) y los puertos (éstos no los vamos a ver
hasta el nal del curso).
4. Para simular paso a paso el programa, apriete la tecla F8. Cada vez que lo haga, el
SIS ejecutará una sola instrucción, y actualizará todos los registros y valores en la
Figura 6.11: Diagrama de ujo para programa de laboratorio 2
memoria, si fueron alterados por la instrucción. Puede desplazar el mapa de memoria
con las teclas de dirección (arriba y abajo) para revisar si un valor fue almacenado en
alguna posición de memoria. Puede desplazarse más rápidamente si utiliza Page Up
Básicamente observamos que el programa realiza la función de tomar los números que es-
y Page Down. No importa la posición donde se encuentre observando el mapa, que si
tán en la pagina 100, y si el número es par no sufre alteraciones pero si es impar el programa
aprieta F8, se ejecutará la siguiente instrucción, debido a que es indicada por el registro
sobrescribe el contenido de la dirección de memoria en que se encuentra con @00.
PC (contador de programa).
5. Al terminar el programa en la instrucción HLT, revise todas las posiciones de memoria
6.2.2.
alteradas y compare con sus resultados calculados.
Programación CPUCR
6. Al terminar el programa en la instrucción HLT, revise todas las posiciones de memoria
Laboratorio 3
alteradas y compare con sus resultados calculados.
Dado el siguiente programa:
Laboratorio 4
Código
*=@0000
INICIO LDA
STA
INA
STA
CLC
ROL
STA
HLT
Para el siguiente programa:
Código
#@07
@1000
*=@1000
PUNTERO1 WRD
WRD
PUNTERO2 WRD
WRD
@1001
(@1000)
Notas: El asterisco le indica al SIS que los datos que siguen deben de introducirse comenzando en la posición de memoria @0000. La palabra INICIO es una etiqueta quiere decir
que cada vez que indicamos INICIO posteriormente, nos estamos reriendo a la posición de
121
*=@0000
INICIO LDA
STA
LDA
INA
BEQ
STA
@00
@20
@00
@21
(PUNTERO1)
(PUNTERO2)
PUNTERO1
FIN
PUNTERO1
122
STA PUNTERO2
JMP INICIO
FIN HLT
STA PAGDEST2
JMP OTRAPAG
FIN HLT
Realice un análisis y cuestiónese o discuta con sus compañeros lo siguiente:
1. ¾Qué función realiza el programa?
Laboratorio 6
Altere el programa del laboratorio 6.2.2 para que el número de datos a copiar sea denido
2. ¾Qué función realiza los punteros 1 y 2?
por un parámetro llamado NUMERO, denido al inicio del programa. (los parámetros se
denen: CONSTANTE = @valor). (dirección inicial fuente: @1500, dirección inicial destino:
3. ¾Para qué es la instrucción BEQ?
@7600).
4. ¾En qué posición de memoria se reere la etiqueta FIN?
Solución:
Notas: El comando wrd (word) introduce el valor indicado en la posición respectiva, o
sea, el primer comando introduce el valor @00 en la posición @1000, que tiene la etiqueta de
Puntero1.
Ahora, introduzca y simule el programa y compare sus respuestas.
Para ejecutar todo el programa sin parar, apriete CTRL-F9. Para volver a la pantalla de
edición, apriete Shift-F1.
Laboratorio 5
Altere el programa del laboratorio 6.2.2 para que los 64 datos de la página @15 se copien
a 64 posiciones de memoria comenzando en la posición @1234.
Solución:
*=@1000
PAGQUINC WRD
WRD
PAGDEST1 WRD
WRD
PAGDEST2 WRD
WRD
*=@0000
INICIO LDA
STA
LDA
INA
BEQ
STA
LDA
INA
BEQ
STA
JMP
FINAL JMP
OTRAPAG LDA
STA
LDA
INA
BEQ
STA
LDA
INA
NUMERO=@07
*=@1000
PAGQUINC WRD
WRD
PAGDEST1 WRD
WRD
*=@0000
INICIO LDA
STA
LDA
INA
BEQ
STA
STA
SUB
BEQ
JMP
FINAL
HLT
@00
@15
@00
@76
(PAGQUINC)
(PAGDEST1)
PAGQUINC
FINAL
PAGQUINC
PAGDEST1
#NUMERO
FINAL
INICIO
Laboratorio 7
@00
@15
@34
@12
@00
@13
Escriba un programa que cuente de 0 a 15 y almacene estos 16 números comenzando en
la posición de memoria @1313.
Solución:
(PAGQUINC)
(PAGDEST1)
PAGQUINC
NUMERO=@16
*=@1000
ALMACENA WRD @13
WRD @13
SUMA
WRD @00
FINAL
PAGQUINC
PAGDEST1
*=@0000
INICIO LDA
STA
LDA
INA
STA
LDA
INA
STA
SUB
BEQ
JMP
FIN
OTRAPAG
PAGDEST
INICIO
FIN
(PAGQUINC)
(PAGDEST2)
PAGQUINC
FIN
PAGQUINC
PAGDEST2
123
SUMA
(ALMACENA)
ALMACENA
ALMACENA
SUMA
SUMA
#NUMERO
FIN
INICIO
HLT
124
Laboratorio 8
dato que está en la pila y va a ser despilado es el resultado de la suma realizada dentro de la
Escribir una rutina que reciba parámetros por la pila. La rutina recibe 3 parámetros. El
subrutina, por lo que el programa ha realizado con éxito su función.
primero es un dato inmediato de 6 bits. Luego una dirección de 12 bits. La rutina debe sumar
DATO a la posición de memoria apuntada por el contenido de DIR y DIR + 1. El resultado
debe ser puesto en la pila de forma que el programa lo desapile al nalizar.
Laboratorio 9
Solución:
forma ascendente, para ello debe utilizar el algoritmo bubblesort. Este es el algoritmo de
Realice un programa en la CPUCR que ordene los números de la página (@2000) en
más básico para ordenar números, en el se inicia tomando el último dato del arreglo (el dato
*=@1000
DATO WRD @06
DIR DBWRD @0023
*=@0000
CLA
TAP
LDA
PHA
LDA
PHA
LDA
PHA
JSR
PLA
HLT
n)y se compara con en el dato anterior (n1), si es menor entonces se intercambian, en caso
contrario se mantienen sin cambio, después se comparan los datos n1 y n2 si n1 es menor que
n2 se intercambian en caso contrario se dejan igual. Así se continúa hasta llegar a los datos
1 y 2. Note como el dato menor empieza a subir, así se da el efecto burbuja.
DATO
DIR
CICLO=@77
DIR+1
*=@1000
N WRD
WRD
CONT WRD
CONT2 WRD
NCICLOS WRD
RUTINA
*=1100
RUTINA PLA
STA @1004
PLA
STA @1005
PLA
STA @1007
PLA
STA @1006
PLA
STA @1010
LDA (@1006)
ADD @1010
PHA
LDA @1005
PHA
LDA @1004
PHA
RTS
Este programa inicia poniendo en cero el acumulador y transriéndolo a P, esto con la
intención de iniciar la pila en @7700. Luego se carga DATO y se apila, seguidamente DIR y
DIR+1 también son cargados y apilados en el orden correspondiente, una vez hecho eso el
programa salta a ejecutar un subrutina llamada RUTINA, recordemos que al saltar a una
subrutina el programa automáticamente apila la dirección a donde deberá saltar al nalizarla,
entonces los dos primeros datos que desapilamos corresponden a esa dirección los cuales son
enviados a las posiciones @1004 y @1005, ahora recordemos que en una pila el último dato
en entrar es el primero en salir, lo que quiere decir que los próximos tres datos desapilados
serán DIR+1, DIR Y DATO en ese orden y son almacenados en @1007, @1006, y @1010
respectivamente, como tenemos en @1006 DIR y lo cargamos en el acumulador y luego lo
que hacemos es llamar un ADD @1010 donde le sumamos a DATO lo que hay en @1010
que corresponde a DIR, el resultado de esa suma se apila, luego apilamos la dirección que
habíamos guardado en @1005 y @1004 para que al terminar la subrutina se dirija a la siguiente instrucción, si observamos en el programa corresponde a un PLA, y si recordamos el
125
*=@0000
INICIO LDA
DCA
STA
LDA
STA
LDA
INA
STA
LDA
STA
SUB
BCC
LDA
DCA
STA
CUENTA LDA
DCA
STA
BEQ
JMP
INTERC LDA
STA
LDA
DCA
STA
LDA
STA
JMP
FIN HLT
NCICLO LDA
BEQ
DCA
STA
LDA
STA
LDA
STA
JMP
@77
@20
CICLO
CICLO
CICLO
N
N
(N)
@1006
N
N
(N)
@1005
@1006
INTERC
N
N
CONT
CONT
NCICLO
INICIO
@1006
(N)
N
N
@1005
(N)
CUENTA
CONT2
FIN
CONT2
NCICLOS
CONT
NCICLOS
N
INICIO
126
Tenemos que inicialmente N es @77, luego es decrementado y renombrado como @76 en-
2. Convierta el programa anterior en una subrutina, colocando un RTS al nal en vez de
tonces al ejecutar LDA (N), lo que haremos es cargar en el acumulador lo que se encuentra
un HLT. Ahora escriba un programa el cual tome la página entera @1000 y la sume a
en la dirección formada por la PB y PA de N, que en este caso la dirección seria @2076, su
la página siguiente (@1100), almacenado el resultado en la página @1200. Por ejemplo:
contenido lo guardamos en @1006, luego tomamos N nuevamente que seria @76 y lo incre-
sumar el contenido de la posición @1000 con el contenido de la posición @1100, y el
mentamos siendo ahora @77, entonces nuevamente ejecutamos LDA (N), ahora la dirección
resultado dejarlo en la posición @1200. Luego @1001 con @1101 y dejarlo en @1201,
seria @2077 y su contenido será almacenado en @1005, como ya tenemos el contenido de
y así sucesivamente. Utilice la subrutina anterior para incrementar los punteros de las
@2077 en el acumulador podemos restarle el contenido de @2076 que lo habíamos guardado
en @1006, si este es mayor que el otro valor se intercambian de posición como se describe
en el procedimiento con la etiqueta INTERC, de lo contrario el programa decrementara N
(esto lo hará hasta lograr comparar todas las posiciones de memoria de la página) y CONT,
si CONT no es cero realiza un nuevo ciclo, pero si es cero va a ejecutar un contador externo
CONT2 que se decrementa cada vez que el contador interno llega a cero, en el momento en
que se ejecuta la etiqueta NCICLO el CONT2 se decrementa y pone CONT con @77 para
que inicie otro ciclo, cuando CONT2 llegue a cero el programa se detendrá y tendremos los
números de toda la página ordenados de forma ascendente.
El hecho de que se utilicen dos contadores en el programa, uno externo y otro externo
es con el n de que el programa ordene completamente la página pues con un solo contado
tres páginas, utilizando la instrucción JSR. (ignore el rebase en el resultado de la suma).
3. Altere el programa anterior para que si el resultado de la suma es par, lo almacene en
la posición que le corresponde, pero si es impar, que almacene un @00 en vez. Salve el
programa en disco.
Práctica 2
1. Haga un programa que: tenga un área de datos con 4 etiquetas llamadas: NUM, DEN,
RSD, RESULT. El programa debe de dividir el numerador entre el denominador, y
guardar el resultado en RESULT y el residuo en RSD. Realice diferentes pruebas con
diferentes números.
se revisaría la pagina solo una vez y los valores se ordenarían a medias, en cambio con el
2. Convierta el programa anterior en una subrutina, y utilícela con el programa del punto
uso del contador externo se logra revisar la página @77 veces logrando el efecto burbuja que
4 de la siguiente manera: Divida cada término de la página de resultados (donde se
necesitamos.
almacenaron las sumas) y los divida entre 2. Almacene cada resultado de la división
en las posiciones de la página @13, y los residuos en la página @14. Si el programa
funciona, toda la página @14 estará en @00.
Practica 1
3. En una computadora hipotética, hay 6 LEDS que están encendidos o apagados según
Hay muchas maneras de hacer los programas que se solicitan a continuación, pero sólo
el valor de los 6 bits de la posición de memoria @5500. Haga un programa que haga
hay una forma mínima. Recuerde que entre más pequeño es un programa, más elegante es,
que haya solamente un LED prendido y 5 apagados, y que vaya cambiando el número
y más ingenioso es el programador.
del LED encendido, osea que el LED encendido se desplace hacia la derecha, y que
cuando llegue al nal, vuelva a aparecer en el extremo izquierdo y siga desplazándose.
Tome en cuenta que los algoritmos mostrados en la gura 6.12 pueden ayudarle a alcanzar
la solución deseada.
4. Ahora, cada vez que el usuario pulse un botón, el programa anterior va a interrumpirse
y saltará automáticamente a una subrutina especial el cual está localizado en la dirección indicado por las posiciones @7700 y @7701. (o sea el computador realiza un salto
indirecto como si fuera un JSR (@7700).) Al nalizar esta subrutina con la instrucción
RTI, el computador reinicia la ejecución el programa anterior como si nada hubiera
ocurrido. Esto se llama una interrupción por hardware. Programe esta subrutina especial (solamente la subrutina y si es necesario modique el programa anterior, el
resto es automático) que cada vez que se pulse el botón la dirección de desplazamiento
cambie (de derecha a izquierda o de izquierda a derecha). Utilice el programa del punto
6. El programa y la subrutina deben ser lo más pequeños posibles (mínimo número de
palabras).
Figura 6.12: Diagramas de ujo para práctica
Práctica 3
1. ¾Cómo haría Ud. un programa el cual consiste en un área de programa de N palabras
1. Escriba un pequeño programa el cual tome un puntero (cualquier etiqueta que Ud.
de longitud y poco a poco crezca en longitud mientras ejecuta y nalmente acapare
decida) y lo incremente en 1. Debe de revisar que cambie de página cada vez que la
la totalidad de la memoria? (totalidad de memoria excluyendo el área de datos, y la
parte baja tenga un rebase.
pila). Explique 3 posibles maneras diferentes de hacer esto.
127
128
Práctica 4
Selección única:
b. Se diferencia del direccionamiento lineal por la cantidad de decodicadores utilizados.
c. Puede manejar menos celdas que utilizando un direccionamiento lineal.
1. La memoria de control:
d. Utiliza decodicadores del mismo tamaño que el direccionamiento lineal, la difera. Almacena el algoritmo que controla el funcionamiento de la CPU.
b. Almacena el programa principal que ejecuta la CPU.
c. Siempre es modicable por el programador para que altere su comportamiento.
encia es el número de celdas que maneja.
e. Ninguna de las anteriores.
5. Observando el circuito de la gura 6.13, cuál es el contenido de la memoria? (de 0 a 3)
d. Consiste en todos los registros de uso general de la CPU.
a. @32, @53, @36, @23
e. Ninguna de las anteriores.
b. @26, @65, @36, @62
2. La memoria interna de la CPU:
c. @23, @36, @53, @32
a. Es la memoria cache disponible dentro del circuito integrado que permite guardar
d. @62, @36, @65, @26
los datos más utilizados.
e. Ninguna de las anteriores
b. Consiste en los registros internos como por ejemplo: el acumulador, puntero de
pila, contador de programa, estatus.
c. Es la memoria dinámica disponible para almacenar el programa que se ejecuta, a
diferencia de los programas almacenados en discos duros.
d. Es memoria estática para cálculos internos de la CPU, inaccesibles para el programador.
e. Ninguna de las anteriores.
3. La memoria principal:
a. También conocida como memoria cache o memoria estática, es direccionable utilizando los 12 bits del bus de direcciones.
b. Guarda todos los datos accesibles para la CPUCR, sea con las instrucciones de
Figura 6.13: Circuito para solucionar ejercicio 5.
un programa a ejecutar o datos en general.
c. Es la memoria más rápida disponible al computador, por lo cual es la que tiene
mayor capacidad.
6. De las siguientes armaciones, cuál es la incorrecta?
d. Es la memoria que consiste en memoria RAM, ROM, discos duros y compactos,
que guardan toda la información que puede accesar la CPUCR.
a. La bandera de rebase (V) se utiliza para situaciones de aritmética con signo
b. La bandera de signo (N) es copia el del bit más signicativo del acumulador
e. Ninguna de las anteriores
4. El direccionamiento coincidente de memoria:
a. Se diferencia del direccionamiento lineal por la cantidad de celdas que puede
c. La bandera de cero (Z) está en alto cuando todos los bits del acumulador están
en bajo
d. La bandera de acarreo (C) se activa cuando el resultado de una resta genera un
debo.
direccionar.
129
130
e. Las banderas V y C se modican automáticamente únicamente cuando se realiza
( ) Verdadero
una operación aritmética.
8. Una memoria EEPROM puede ser programada y reprogramada cualquier número de
Falso o verdadero
veces mientras no pierda su suministro de energía, pues pierde los datos.
1. La memoria ROM tiene un modo de acceso aleatorio.
( ) Falso
( ) Verdadero
( ) Falso
9. Una memoria ROM tiene la desventaja que no se puede cambiar su contenido, pero
( ) Verdadero
retiene sus datos indenidamente.
2. Las cintas magnéticas son un ejemplo de acceso secuencial.
( ) Falso
( ) Falso
( ) Verdadero
( ) Verdadero
10. El TLB se encarga de llevar el registro de los datos que están cache que son válidos.
3. En el acceso seudoaleatorio se dispone de un transductor de rápido acceso que lo hace
desempeñarse como un acceso aleatorio.
( ) Falso
( ) Verdadero
( ) Falso
11. Las memorias estáticas son más rápidas que las dinámicas dado que son más pequeñas.
( ) Verdadero
4. El acceso asociativo es típico para las memorias estáticas internas de la CPUCR para
acceder a registros de uso reciente.
( ) Falso
( ) Verdadero
( ) Falso
12. El esquema de mapeo directo es más difícil de establecer que el de asociatividad com( ) Verdadero
pleta dado el orden de los datos que se debe mantener en el primero.
5. La alterabilidad en los sistemas de almacenamiento se reere a la facilidad o dicultad
( ) Falso
para cambiar el contenido sin el suministro de energía.
( ) Verdadero
( ) Falso
13. En la política de escritura write-back lo datos se escriben en memoria cache y principal
( ) Verdadero
al mismo tiempo.
6. La estabilidad es una condición de permanencia que distingue a las memorias estáticas
( ) Falso
de las dinámicas.
( ) Verdadero
( ) Falso
14. En la celda de memoria CMOS se puede tener una línea de datos bidireccional al
( ) Verdadero
interconectar, directamente, la línea de entrada de datos con la línea de salida de datos.
7. Las memorias dinámicas son más baratas por estar compuestas por elementos pequeños
como diodos, a diferencia de las estáticas que contienen ip-ops.
( ) Falso
( ) Verdadero
( ) Falso
131
132
Práctica 5
Al estar en una marcha especíca pueden suceder dos cosas que se tenga que pasar a
En base a los conocimientos adquiridos en el curso de estructuras de computadores digitales conteste lo siguiente:
una mayor o menor dependiendo del puerto TACOMETRO. El bit menos signicativo del
puerto ALARMA está conectado al pin INT de la CPUCR, y se activará cuando se dé algún
evento grave, que obligue a que el sistema deba detenerse. El bit 1 se utiliza para indicar
1. Explique con detalle en qué consiste la jerarquía de memorias. Incluya tipos de acceso,
cuando el sistema está detenido, la reversa sólo se podrá activar si este bit está activo (el
y características de cada una de las memorias (permanencia, volatilidad, estabilidad,
sistema está detenido). El bit 2 se activa si el sistema está en reversa, si es así no se pueden
etc), ilustre con ejemplos cuando sea posible. Indique la importancia de utilizar una
activar las marcha de inicio hacia adelante. El sistema sólo puede arrancar hacia adelante si
jerarquía de memorias.
está detenido o si no está en reversa. El restode bits de ALARMA no tienen un signicado,
pero al leerse se desconoce su valor. Realice el programa para la CPUCR que controla este
2. Explique detalladamente el funcionamiento, incluya un diagrama de ujos, de un sis-
sistema, debe incluir diagramas de ujos y el código debe comentarse por bloques.
tema que incluye, memoria cache, memoria virtual, TLB y Tabla de Páginas. ¾Cómo
se establece la localización de un dato?, ¾Qué se hace al escribir un dato?
3. Utilizando celdas de memoria de 1Mega palabra de 8 bits construya una memoria de
3M palabras de 32 bits. Asuma que las memorias tienen las líneas /CS, /WE, /OD.
Debe indicar como conectar todas las líneas, y el número de líneas en cada uno de los
buses de datos y direcciones.
4. Construya una celda de memoria ROM de 8 por 4, utilice tanto direccionamiento coincidente como lineal.
Práctica 6
Se desea usar la CPUCR como el controlador automático de marchas en un sistema motorizado, para esto se tienen 2 puertos de entrada, ALERTA y TACOMETRO y un puerto
de salida CONTROL, los tres puertos son de 6 bits. El puerto CONTROL maneja las velocidades del sistema, y funciona en forma similar al sistema de marchas de un carro, los
bits van del 0 al 4, siendo el bit cero la marcha más fuerte y lenta, y el bit 4 la marcha más
rápida y débil. Para arrancar el sistema siempre se hace con la marcha más fuerte. El bit 5
corresponde a la reversa. Sólo un bit de este puerto puede estar activo a la vez. Si todos los
bits están apagados el sistema está detenido.
@46
...
@46
...
@66
@56
@46
...
@24
@00
...
@1746
...
@2305
...
@4617
@4620
@4621
...
@7700
@7701
...
El puerto TACOMETRO es la entrada la cual indica cuál marcha se debe utilizar, el bit
0 indica el arranque del sistema, para que el sistema funcione este bit debe estar en alto, si
está en bajo el sistema debe apagarse, del resto de bits sólo uno estará activo a la vez. Al
activarse unos de los bits del 1 al 4 se deberá activar el correspondiente bit de velocidad del
puerto CONTROL. Si se activa el bit 5 este indica que se debe activar la reversa, pero antes
se debe jar en el puerto ALARMA el cual se explicará más adelante.
133
134
[12] Wikipedia, 64 bits, http://es.wikipedia.org/wiki/64_bits.
[13] Hurtado,
Carlos.
El
n
de
la
era
de
los
MHz
y
Core,http://blogs.intel.com/latininsights/2007/07/el_
Bibliografía
el
n_
inicio
de_
de
la
la_
era
era_
Multide_
los_ mhz_ y.php.
[14] Corporate Timeline,http://www.intel.com/museum/corporatetimeline/.
[1] Hamacher, C. - Organización de computadores, quinta edición, McGraw Hill, España,
[15] Timeline of computing 2000-2009, http://en.wikipedia.org/wiki/Timeline_ of_ com-
2003.
puting_ 2000-2009.
[2] Hennessy, J. - Organización y diseño de computadores, segunda edicion, McGraw Hill,
[16] Apple
España, 1995.
Product
Timeline
Map,http://www.scribd.com/doc/176946/Apple-Product-
Timeline-Map.
[3] Parhami, B. - Arquitectura de computadoras, primera edición, McGraw Hill, India, 2007.
[17] AMD's
[4] Stallings, W. - Organización y arquitectura de computadores, sétima edición, Prentice
History
of
innovation,
http://breakfree.amd.com/en-
us/assets/AMD_Evolution.pdf.
Hall, España,2007.
[18] Intel Core i7, http://en.wikipedia.org/wiki/Intel_Core_3.
[5] Insertar
imágenes
en
Latex,
http://valar.wordpress.com/2004/01/30/
imagenes-en-
latex/.
[19] García, J.M. Informática para matemáticos, http://www.vc.ehu.es/campus/centros/farmacia/deptos-f/depme/temporal/infomate/infomate.htm.
[6] Manual
de
LaTeX,
Insertar
http://es.wikibooks.org/wiki/Manual_
guras
de_
en
un
LaTeX/Insertar_
documento,
guras_
en_
un_
documento.
[20] Rodríguez, Noelia. Conceptos avanzados de LaTeX,http://www.elrincondelprogramador.com/
default.asp?pag=articulos/leer.aspid=11.
[7] Manual sobre LaTeX, http://foro.simur.org/viewtopic.php?f=26t=166.
[21] Pakin,
Scott.
The
comprehensive
LaTeX
Symbol
list,http://www.ctan.org/tex-
archive/info/symbols/comprehensive/symbols-a4.pdf.
[8] Tips para usar Latex, http://www.fmat.cl/index.php?showtopic=6460.
[22] Botana,Raúl.
[9] Insertar
mi
imagen
con
latex
donde
yo
quiera,
Tablas
en
Latex,
http://www.lug..uba.ar/
documen-
tos/tablas/tablas.pdf.
http://ajayu.memi.umss.edu.bo/latexman/weblog/insertar-mi-imagen-latex-dondeyo-quiera.
[23] Historia de los microprocesadores, http://iteso.mx/ miguelbaz/cursos/ arqcomp-200508/presentaciones/cpuhistory.pdf.
[10] Lopez,
J.M.
Grácos
y
color
en
LaTeX,
http://metodos.fam.cie.uva.es/
la-
tex/gracosycolor.pdf.
[24] http://www.icknowledge.com/trends/4004b.jpg.
[11] Matthias
Andreas.
A
Demonstration
of
the
pdfpages
hep2.fzu.cz/tex/texmf-dist/doc/latex/pdfpages/pdf-ex.pdf.
135
Package,
http://www[25] http://www.icknowledge.com/trends/8080B.jpg.
136
[26] http://poshiitabella.les.wordpress.com/2007/10/apple.jpg.
[27] http://www.cpu-world.com/CPUs/8086/die/L_Fujitsu-MBL8086-2.jpg.
[28] http://www.icknowledge.com/trends/8086_8088B1.jpg.
[29] http://www.cpu-galaxy.at/CPU/Intel %20CPU/8088-80286/Intel %2080286 %20sectionDateien/286 %20Core.jpg.
Anexo A
Historia de las computadoras
[30] http://www.cpu-world.com/CPUs/80386/die/L_Intel-A80386DX-25.jpg.
Documento original elaborado por el profesor Lochi Yu.
[31] http://i32.tinypic.com/2cd7sds.jpg.
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
[32] http://i32.tinypic.com/2lmnkh4.jpg.
1
Historia de las Computadoras
Recopilado por Lochi Yu
Actualizado Agosto 2003
“Si el automóvil hubiera seguido la misma evolución que la computadora,
un Rolls Royce costaría hoy $100, rendiría un millón de millas por galón
de combustible, y explotaría una vez por año, matando a todos adentro.”
Robert X. Cringely
[33] http://i32.tinypic.com/2lmnkh4.jpg.
Las computadoras están en todas las áreas de nuestras vidas cotidianas, ahora todo está tan computarizado que no
podríamos vivir sin ellas. ¿Pero de dónde vino toda esta tecnología y hacia dónde va? Para entender mejor el impacto
de las computadoras y apreciar su influencia en nuestras vidas, es importante conocer su evolución.
Mecanismos primitivos de cálculo y sus inventores
El ábaco emergió hace más de 5 mil años en Asia, y todavía se encuentra en uso, y puede ser considerada la primera
computadora. Permite a los
El Ábaco
El valor asignado a cada ficha no está
usuarios realizar cómputos
determinado por su forma o color, sino
usando un sistema de fichas
por su posición: una ficha en una
posición particular tiene el valor de 1,
sobre alambres.
Fue
en la siguiente línea, tendrá el valor de
utilizado por los mercantes
10, y el siguiente de 100. Entonces,
dos fichas colocadas en la primera
para
realizar
sus
línea y otra en la siguiente dan el valor
transacciones. Pero el uso
de 12. Por este medio, se usan pocas
fichas para representar números
del papel y lápiz hizo que el
grandes
ábaco perdiera su importancia.
[34] http://i26.tinypic.com/b5jo1x.jpg.
[35] http://i29.tinypic.com/mwuvm9.jpg.
Más de 1000 años después del ábaco, no se logró mayor avance. Para los cálculos complejos, se requería múltiples
personas realizando el mismo largo cálculo: esta redundancia era para evitar errores.
En 1642, Blaise Pascal, hijo de un recolector de impuestos francés,
inventó lo que llamó calculadora numérica de rueda, para ayudar a su
padre con sus labores. Esta caja rectangular llamada Pascaline,
usaba 8 perillas para sumar cifras de hasta 8 dígitos. Su instrumento
utilizaba la base de 10 para lograrlo. Si se movía una perilla diez
[36] http://i26.tinypic.com/2vinh2r.jpg.
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
En 1694, Gottfried Wilhem von Leibniz, un filósofo y matemático alemán, mejoró el Pascaline creando una máquina
capaz de multiplicar. Como su predecesor, éste funcionaba con perillas y engranajes. Fue hasta 1820, cuando
Charles Xavier Thomas de Colmar, un francés, inventó una calculadora mecánica capaz de realizar las 4 operaciones
ariméticas básicas. Llamado el Arithómetro, podía sumar, restar, multiplicar y dividir. Con su gran versatilidad, fue
usado ampliamente hasta antes de la primera guerra mundial.
El comienzo verdadero de la computación, como la conocemos, fue por un profesor
inglés de matemáticas, Charles Babbage (1791-1871). Frustrado por los múltiples
errores en los cálculos de la Sociedad Real de Astronomía, exclamó: “Deseo por Dios
que estos cálculos fuera realizados por vapor!”. Esto se debió a que el vapor se
estaba utilizando como fuente de energía para la industria en esa época, pero con
esto, se inició la era de automatización de computadoras. En 1812 Babbage notó una
armonía natural entre máquinas y las matemáticas: las máquinas eran óptimas para
ejecutar tareas repetidamente y sin error; mientras que las matemáticas,
particularmente la producción de tablas matemáticas, requerían sencillamente de una
repetición de pasos. El problema se centró en la aplicar la habilidad de las máquinas
a las necesidades de las matemáticas. Su primer
intento de resolver este problema fue en 1822, cuando
propuso una máquina que resolviera ecuaciones
diferenciales, llamada Máquina Diferencial. Éste era impulsada por vapor, era tan
grande como un tren, y podía tener un programa almacenado y ejecutar cálculos e
imprimir los resultados automáticamente. Luego de trabajar
en la máquina diferencial por 10 años, Babbage decidió
trabajar sobre la primera computadora de uso general, que le
llamó la Máquina Analítica. La máquina analítica estaba
dividida funcionalmente en dos grandes partes: una que
[37] http://i25.tinypic.com/29wweb4.jpg.
[38] http://muycomputer.com/les/264-10358-FOTO/Intel %20Xeon %208-core %202.jpg.
[39] http://i30.tinypic.com/2z3t0gg.jpg.
[40] http://i32.tinypic.com/ibmgk3.jpg.
[41] http://i25.tinypic.com/15f6sd5.jpg.
137
2
lugares, o una vuelta completa, movía un lugar la perilla siguiente: la cifra de las decenas, y así sucesivamente. Su
principal limitación era que solamente podía sumar, además de que solamente Pascal podía repararlas, sin mencionar
que su costo era mayor que el de la mano de obra del personal “sustituido”. Aquí se comenzó a ver las primeras
señales de la “tecnofobia”, pues muchos matemáticos temían ser reemplazados por las máquinas.
138
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
3
ordenaba y otra que ejecutaba las órdenes. La que ejecutaba las órdenes era una versión muy ampliada de la máquina
de Pascal, mientras que la otra era la parte clave. La innovación consistía en que el usuario podía, cambiando las
especificaciones de control, lograr que la misma máquina ejecutara operaciones complejas, diferentes de las hechas
antes. Además contaba con una sección en donde se recibían los datos para trabajar. La máquina seguía las
instrucciones dadas por la unidad de control, las cuales indicaban qué hacer con los datos de entrada, para obtener
luego los resultados deseados.
En los años siguientes, otros ingenieros lograron otros
avances. Vannevar Bush desarrolló en 1931 una George Boole desarrolló su teoría tratando
calculadora para resolver ecuaciones diferenciales. La de describir la lógica con dos acciones
máquina permitió resolver ecuaciones diferenciales básicas:
1. acción 1 Y acción 2,
complejas que apremiaban por mucho tiempo los
2. acción 1 O acción 2.
científicos y matemáticos. La máquina era grande y
Fue una curiosidad matemática por casi un
compleja, difícil de utilizar, pues cientos de perillas eran requeridas para siglo, hasta que Claude Shannon en 1930 lo
representar los números y las relaciones entre ellas. Para eliminar estas re-descubrió cuando buscaba una manera
molestias, John V. Atanosoff, profesor del Iowa State College y su de describir el comportamiento de circuitos
estudiante de posgrado, Cliffor Berry, imaginaron una computadora digitales. Es un caso más donde la
totalmente electrónica, que aplicara álgebra de Boole a la circuitería de investigación básica nutre a la investigación
la computadora. George Boole trabajó en la mitad del siglo 19, en una aplicada.
clarificación del sistema binario de álgebra, que establecía que cualquier
ecuación matemática podía asignarse como verdadera o falsa.
Extendiendo este concepto a circuitos electrónicos en la forma de on u off (encendido o apagado). Atanasoff y Berry
desarrollaron la primera computadora completamente electrónica en 1940. Su proyecto fue perdiendo sus fondos y
eclipsado por otros desarrollos de otros científicos.
Su asistente, Augusta Ada King, fue fundamental para el diseño de esta máquina. Ayudó a revisar los planos, asegurar
fondos del gobierno inglés, y comunicarle los datos al público. También, su entendimiento de la máquina le permitió
crear las rutinas de instrucción que eran administradas a la computadora, haciéndola la primer programadora de
computadoras en el mundo. En los años 80s, el Departamento de Defensa Estadounidense nombró un lenguaje de
programación como ADA, en su honor.
Su máquina impulsada por vapor, nunca fue construida, y se vería primitiva para nuestros estándares actuales. No
obstante, delineó los elementos básicos de la computadora de uso general y fue un avance muy importante. Consistía
en más de 50 mil componentes, desde tarjetas perforadas, una memoria para 1000 números de hasta 50 dígitos
decimales. También contenía un “molino” con una unidad de control que permitía el procesamiento de instrucciones en
cualquier secuencia, y dispositivos de salida para producir los resultados impresos. Babbage tomó la idea de tarjetas
perforadas de Joseph-Marie Jacquard, que utilizó tarjetas perforadas para controlar los patrones de los hilares.
En 1889, un inventor estadounidense, Herman Hollerith, también aplicó el concepto de
Jacquar para la computación. Su primer tarea fue de encontrar una manera más fácil de
computar el censo estadounidense. Los censos previos de 1880, tomaban cerca de 7 años para
contabilizar, y con su población creciente, se calculaba que tomaría unos 10 años para
contabilizar el siguiente censo. A diferencia de Babbage, donde utilizó tarjetas perforadas para
instruir a la máquina, Hollerith utilizó las tarjetas para almacenar
información, que posteriormente era administrada a otra máquina la
cual los compilaba mecánicamente. Cada perforación en una tarjeta
representaba un número, y combinaciones de dos huecos
representaban una letra. Se podían almacenar hasta 80 variables en
una tarjeta. En vez de 10 años, los datos del censo fueron
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
Mientras tanto, en el Reino Unido, el matemático Alan Turing (1912-1954) presentó en 1936 el
trabajo “On Computable Numbers”, donde describía un dispositivo hipotético, la máquina Turing, que
presagiaba las computadoras programables. La máquina Turing fue diseñada para efectuar
operaciones lógicas, y podía leer, escribir o borrar símbolos escritos en cuadros en una cinta de
papel. Este tipo de máquina llegó a conocerse como una máquina de estados, debido a que en
cada paso del cómputo, la siguiente acción de la máquina era comparada contra una lista de
instrucciones de todos los estados posibles.
5
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
Primera Generación (1945-1956)
Con el inicio de la Segunda Guerra Mundial, los gobiernos buscaron desarrollar computadoras para explotar su
importancia estratégica potencial. Esto aumentó el financiamiento de los proyectos de desarrollo de proyectos y aceleró
el progreso tecnológico. En 1941, Konrad Zuse, ingeniero alemán, desarrolló la computadora Z3, para diseñar aviones
y misiles. La Z3 utilizaba perforaciones en film y el sistema de numeración binario, basados en 1s y 0s en vez del
sistema de numeración decimal. Las fuerzas aliadas hicieron más esfuerzo, y en 1943, los británicos completaron una
computadora para descifrar códigos secretos, llamado Colossus. El problema era que no era una computadora de uso
general, sino para decodificar mensajes alemanes secretos. Luego, fue mantenida en secreto hasta décadas luego de
la guerra.
6
una computadora de uso general, 1000 veces más rápida que la Mark I. Realizaba saltos
condicionales y era programable por medio de cables e interruptores, y la información era
administrado por medio de tarjetas perforadas (se duraba entre media hora y un día entero). En
1949 calculó el valor de la constante con 2037 decimales, lo cual requirió de 70 horas. Como ,
entre otras cosas, la máquina iba a reemplazar a un grupo de matemáticas que hacía cómputos
numéricos para una oficina especializada del gobierno estadounidense, tomó el nombre de ellas:
“computadoras”.
Las 5 Generaciones de Computadoras Modernas
Del lado americano, Howard H. Aiken, ingeniero de Harvard trabajando
para la IBM, produjo una calculadora totalmente electrónica en 1944. El
objetivo de esta era crear tablas balísticas para la Marina Estadounidense.
Era tan grande como media cancha de fútbol y tenía 500 millas de
alambrados. El Harvard-IBM Automatic Sequence Controlled Calculator, o
Mark I, era una computadora electrónica de relevadores. Usaba señales
electromagnéticas para mover las partes mecánicas. La máquina era lenta
(duraba 3 a 5 segundos por cálculo) e inflexible (en que la secuencias de
cálculos no podían cambiar), pero podía ejecutar aritmética básica así como
ecuaciones complejas. Podía realizar las 4 operaciones básicas, y
subrutinas para las funciones trigonométricas y logarítmicas.
4
contabilizados en solamente 6 semanas, con la máquina de Hollerith. Además de su velocidad, las tarjetas servían
como método de almacenamiento y reducían los errores computacionales. Hollerith fundó la Tabulating Machine
Company en 1896, para vender su idea al mundo de los negocios. En 1924 ser convirtió en la International Business
Machines (IBM).
En la mitad de los 40s, John von Neumann se unió al equipo de la Universidad
Von Neumann ayudó a cristalizar las
de Pennsylvania, formulando conceptos de diseño de computadoras que ideas proponiendo el EDVAC, y el
permanecieron centrales a la ingeniería en computación por los siguientes 40 memo distribuido llevaba solamente su
años. Von Neumann junto a los Eckert y Mauchly, diseñaron el EDVAC, nombre, sin el de Mauchly ni Eckert.
Electronic Discrete Variable Automatic Computer en 1945 con suficiente Posteriormente se le conoce como
memoria para almacenar un programa y los datos. Esta memoria almacenada Arquitectura de von Neumann, a pesar
que fueron Mauchly y Eckert los que
permitía parar la computadora en cualquier punto y reiniciar, permitiendo mayor contribuyeron en él. (ver final)
versatilidad a la programación de computadoras. El elemento clave en la
arquitectura era la unidad de procesamiento central, que permitía que todas las funciones de la computadora fueran
coordinadas por una misma fuente.
En 1951, el Universal Automatic
Computer, UNIVAC I, construida por
Remington Rand (la cual adquirió la
empresa de Eckert y Mauchly), fue de
las primeras computadoras disponibles
comercialmente para permitir utilizar
Otra computadora desarrollada por motivos de la guerra fue la Electronic
Numerical Integrator and Computer (ENIAC), producida entre el gobierno
estadounidense y la Universidad de Pennsylvania. Consistía en 18 mil tubos al
vacío, 70 mil resistencias, 5 millones de uniones soldadas en un área de 167
metros cuadrados, y la computadora consumía 160 KW de potencia eléctrica.
Desarrollada por John Presper Eckert y John W. Mauchly, el ENIAC sí era
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
7
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
estos avances. Uno de los primeros logros fue que predijo el ganador de la elección presidencial de 1952 en EEUU,
Dwight D. Eisenhower.
A los largo de los 60s, hubo un número de computadoras de segunda generación exitosos,
y utilizados en negocios, universidades, y en el gobierno. Eran de empresas como
Burroughs, Contro Data, Honeywell, IBM y Sperry-Rand. Estas computadoras también
eran de diseño de estado sólido, y contenían transistores en vez de tubos al vacío.
Contenían además todos los componentes que asociamos al presente a la computadora
moderna: impresoras, almacenaje en cinta, disco, memoria, sistemas operativos y
programas almacenados. Un ejemplo importante fue el IBM 1401 que era considerado el
Modelo T de la industria de la computación. En 1965, la mayoría de empresas grandes
procesaban la información financiera utilizando computadoras de segunda generación.
La IBM comenzó a fabricar computadoras hasta después de 1950. Previamente solo estaba en el negocio de las
tarjetas perforadas y automatización en la empresa. Introdujo su computadora IBM 701 en 1952 y eventualmente se
vendieron 19 unidades. Mucha gente pensaba que el mercado era muy limitado para estas máquinas “altamente
especializadas”.
La primera generación de computadoras era caracterizado por el hecho de que las En una ocasión la falla de
instrucciones de operación eran hechas a la medida para tareas específicas, donde la uno de los componentes
computadora iba a ser utilizada. fue provocado por una
“Una calculadora de hoy como el ENIAC, tiene 18000 tubos al
Cada computadora tenía un palomilla, lo cual desde
vacío, y pesa 30 toneladas, las computadoras del futuro
programa en lenguaje de entonces un error en un
puede ser que ocupen solo 1000 tubos y pesar solamente una
programa se le denomina
tonelada.”
máquina que indicaba su modo “bug”
o “pulga”.
1949, Popular Mechanics
de operación. Esto hacía que
fuera difícil de programar y limitaba su versatilidad y velocidad. Otras características distintivas era que utilizaban tubos
al vacío, consumiendo mucho espacio, potencia y mantenimiento, pues se quemaban frecuentemente, obligando a una
inspección lenta de todos los tubos.
El primer transistor fue
desarrollado
por
John
Bardeen y Walter Brattain,
bajo la supervisión de William
Shockley, en los laboratorios
Bell. Por este desarrollo,
ganaron el Premio Nóbel de
Física. Su primer prototipo se
muestra a continuación:
Fue el programa almacenable y el lenguaje de programación que le dio a las
computadoras la flexibilidad para finalmente ser efectivos y productivos para el uso
empresarial. El concepto de tener un programa almacenado significaba que las
instrucciones para una función en particular, que estaban dentro de la memoria, podían ser
rápidamente sustituidas por otro grupo de instrucciones (otro programa) para efectuar otra
función. Una computadora podía imprimir recibos a clientes y minutos después diseñar
productos o calcular pagos. Lenguajes más sofisticados de alto nivel como COBOL (Common Business Oriented
Language) y FORTRAN (Formula Translator) entraron en uso en este tiempo, y se han expandido hasta hoy. Estos
lenguajes reemplazaron el código binario del lenguaje de máquina con palabras, oraciones y fórmulas matemáticas,
haciendo fácil la programación de la computadora. Se crearon nuevos tipos de carreras (programador, analista de
sistemas) y toda la industria del software empezó con la segunda generación de computadoras.
Segunda Generación de Computadoras (1956-1963)
En 1948, la invención del transistor cambió radicalmente el desarrollo
de las computadoras. Éste reemplazó los tubos al vacío, en televisores,
radios y computadoras. Como resultado, toda la maquinaria electrónica
ha estado miniaturizándose desde entonces. El transistor ha estado en
computadoras desde 1956. Las computadoras de segunda generación
eran más pequeñas, más confiables, rápidas y eficientes que sus
predecesoras. Las primeras máquinas que aprovecharon esto fueron
las primeras supercomputadoras, Stretch de IBM y LARC de SperryRand. Ambos fueron creados para manejar grandes volúmenes de
datos en laboratorios de energía atómica. Eran costosas y no eran tan
atractivas. Las computadoras de segunda generación reemplazaron el
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
8
lenguaje de máquina con lenguaje ensamblador, permitiendo códigos abreviados en vez de códigos binarios extensos.
Tercera Generación de Computadoras (1964-1971)
En 1964 Digital Equipment Corporation (DEC) mostró su PDP-8, la primera minicomputadora comercial. Fue todo un
logro en cuanto al costo: menos de $20 mil.
Aunque los transistores era un mejoramiento sobre los tubos al vacío, todavía generaban
suficiente calor como para dañar las otras partes sensibles del computador. Robert Noyce (a
la izquierda, cofundador de Intel con Gordon Moore, mostrado a la derecha) trabajaba en
9
Fairchild Semiconductors en 1959, e ideó el plan de construir múltiples transistores en una misma pieza de silicio.
Noyce lo llamó “circuito integrado”, (IC): “Yo era perezoso, no tenía sentido poner a gente a soldar todos los
componentes cuando se podían fabricar todos juntos”. Ya Jack Kilby de Texas Instruments había intentado solucionar
este problema: había logrado fabricar componentes discretos en una misma
Ley de Moore
lámina de germanio, pero las interconexiones debían de ser soldadas a
Gordon Moore expresó la fa predicción que
mano. Este proceso no podía implementarse para producción en masa. El
la densidad de los circuitos integrados se
circuito integrado constituía transistores en un disco pequeño de silicio.
duplicaba cada 12 meses. Posteriormente lo
“readecuó” a 18 meses. Esta predicción,
Posteriormente las mejoras en tecnologías de fabricación permitían integrar
aunque improbable que se mantenga por
aún más componentes, haciendo que las computadoras disminuyeran más
muchos años más, se llegó a conocer como
de tamaño. Primero Noyce puso dos o tres componentes en un mismo
“Ley de Moore”, y se ha cumplido desde
integrado, luego decenas, centenares, y luego millares. Jack Kilby ganó el
entonces.
Premio Nóbel de Física por este desarrollo. Roberto Noyce hubiera sido
premiado también, pero ya había fallecido para entonces.
Otro desarrollo de tercera generación incluyó el sistema operativo, que permitía que diferentes programas corrieran al
mismo tiempo en con un programa central que monitorizaba y coordinaba el sistema con la memoria principal.
Cuarta generación (1971-al presente)
Luego de los circuitos integrados, la dirección fue El nacimiento del microprocesador
de disminuir aún más el tamaño. La integración La historia del 4004 comenzó con un pedido de la empresa japonesa Busicom
a gran escala integraba cientos de componentes a Intel, donde se solicitaba varios integrados para su línea de calculadoras, en
en un solo chip. Ya en los años 80s, la el año 1969. En vez de fabricar varios integrados a parte, Ted Hoff, ingeniero
de Intel, propuso la idea de diseñar un solo integrado que tuviera todos los
Integración a muy gran escala (VLSI) integraba elementos. Federico Faggin se encargó del diseño y Stan Mazor del software.
cientos de miles de componentes.
La El producto de esta trabajo fue el primer microprocesador, el 4004, de 4 bits,
integración de Ultra gran escala (ULSI) aumentó 16 patillas, 2300 transistores, memoria de 4096 posiciones.
el número a los millones. Este aumento de Fue utilizado en una calculadora Busicom, pero posteriormente los derechos
componentes junto con la disminución en el del integrado los adquirió de vuelta Intel (por $60mil), donde posteriormente
produjo otros microprocesadores comenzando con el 8008.
tamaño abarató los costos, e hizo más accesible
las computadoras
al público en general. También aumentó su potencia, eficiencia y confiabilidad. El
chip 4004 de
Intel, desarrollado en 1971, siguió un paso más allá al combinar todos los
componentes de
una computadora en un chip. Ahora un solo microprocesador podía cumplir varias
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
10
demandas según su configuración y programación. Pronto, artículos como hornos de microondas, televisores, y
automóviles incorporaron microprocesadores.
El procesador 8008 fue el sucesor del 4004, y en vez de tener 4 bits, tenía 8. Posteriormente
vino el 8080, el cual dio luz al primero computador: el Altair 8800 en 1975. Este computador
se programaba con interruptores en el frente y la salida se observaba por medio de LEDs en
el pánel. Su aparición en la revista “Popular Electronics” fue todo un suceso, pues
representaba que el usuario corriente podía tener su propia computadora y programarla.
Las computadoras llegaron entonces al público en general por ahí de los años 70s. Estas
minicomputadoras venían con software amigable, con muchas aplicaciones como procesador de
palabras, hojas de cálculo, etc. Los pioneros de este campo fueron Commodore, Radio Shack y Apple
Computer. En los años 80s, los video juegos como Pac Man y sistemas como la Atari, iniciaron el
interés del público por computadoras más sofisticadas y más programables. Steve Wosniak programó
el sistema operativo, diseñó, construyó la computadora Apple II en 1977 y con ello comenzó la era de computadoras
personales de bajo costo y alto volumen.
En 1981 IBM introdujo su computadora personal (PC) para el uso en el hogar,
oficina y escuelas. Posteriormente con el advenimiento de los PC-compatibles
o clones, hubo una expansión del uso de la computadora en esas tres áreas.
El número de computadoras personales en uso pasó de 2 millones en 1981 a
5.5 millones el año siguiente. Diez años después, 65 millones de PCs eran
usadas. Las computadoras fueron disminuyendo de tamaño, pasando a ser
portátiles, y luego a ser de bolsillo. La línea
Macintosh de Apple Computer pasó a ser una de
los rivales directos de IBM. Su atractivo era su
diseño amistoso, donde el sistema operativo
permitía mover íconos en la pantalla en vez de escribir instrucciones. El movimiento era
controlado por un mouse o ratón, que traducía el movimiento de la mano a la computadora.
Mercado
las PC-compatibles
Pequeñade
reseña
del ascenso de Microsoft
Bill Gates y Paul Allen eran los dueños de Microsoft, una pequeña empresa de lenguajes de programación en Seattle, Washington, allá en
1980. Cuando la IBM requería de un sistema operativo, buscó a Gary Kindall de la empresa Digital Research, que producía un sistema
operativo popular en ese entonces, CP/M. Debido al poco interés de Kindall, IBM se retiró, solamente para luego recibir una oferta de
Gates. A pesar de que Gates y Kindall tenían un acuerdo de no invadirse sus mercados, lenguajes y sistemas operativos, respectivamente,
Gates ofreció un sistema operativo llamado Microsoft Disk Operating System, conocido como MS-DOS, o sencillamente DOS. Se cerró el
trato, con la particularidad de que Microsoft no le vendía el software como tal, sino recibía una comisión por copia vendida, reteniendo la
patente. El sistema operativo sobre el que se basó DOS era un clon de CP/M, comprado a una pequeña empresa llamada Seattle
Computer Products.
MS-DOS fue basado sobre el QDOS, que significaba: “Quick
and Dirty Operating System”, a la vez clon de CP/M.
Pronto, al IBM dominar el mercado de las computadoras personales, hizo que a la vez Microsoft dominara con su sistema operativo.
Años después, Microsoft adquirió conocimiento de ambientes gráficos (no muy éticamente) de la empresa Apple, que estaba trabajando en
su computadora MacIntosh. Apple a la vez, lo adquirió de la empresa Xerox. Microsoft produjo el Windows, y hasta el momento es el
sistema operativo dominante en computadoras personales, pero el sistema operativo libre Linux es el candidato a cambiar la historia.
139
140
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
11
La IBM estaba dispuesta a entrar al mercado de las computadoras personales, y dispuso de solamente un año para que
su equipo de ingenieros en Boca Raton, Florida, lo diseñara. Debido al poco tiempo disponible, se decidió fabricarlo
casi completamente de componentes disponibles comercialmente en ese momento. Se decidió utilizar el
microprocesador 8086 de Intel, y el sistema operativo MS-DOS de Microsoft (el cual tenía derecho de venderle el
sistema operativo a otros fabricantes de computadoras).
La única pieza de la computadora, propietaria, o sea que estaba patentada por IBM, era el BIOS. El BIOS significa
Basic Input Output System, que es el programa residente en la tarjeta madre del computador que se encarga de servir
de puente entre el sistema operativo y el hardware subyacente. Es el primer programa que corre al encender la
computadora y es el encargado de cargar el sistema operativo y de la configuración básica.
Mientras las computadoras se volvían más populares en el trabajo, se formaron nuevas maneras de aprovechar su
potencial. Se comenzaron a conectar unas a otras, compartir recursos, y a comunicarse. Al contrario de las
supercomputadoras donde una computadora potente estaba conectada a muchos terminales, las computadoras en red
compartían entre todas todos los recursos. Utilizando redes locales, conexiones directas y líneas telefónicas, estas
redes surgieron y posteriormente creó una red global de computadoras. La Internet es el ejemplo de ello. LY
La IBM estaba confiada de la estrategia debido a que había patentado el BIOS y publicado su código fuente. Aún en el
caso de que pudieran crear otro BIOS, solamente IBM podría comprar los componentes en tan gran cantidad que sus
precios siempre serían los mejores. Además el hecho de haber publicado su código era un arma importante: un
programador, luego de haber visto aunque sea una vez ese código, le era extremadamente difícil no reproducir aún
parcialmente parte del mismo, violando la patente entonces. La única forma de hacerlo seguramente era que fuera
programado por ingenieros que nunca hubieran leído el código.
En febrero de 1982, tres ingenieros: Rod Canion, Jim Harris,
Bill Murto, se reunieron en un restaurante para discutir la
creación de una nueva empresa. Los tres eran managers
experimentados de Texas Instruments. Sus ideas finalistas
fueron dos: un restaurante de comida mexicana o una empresa
de computadoras. Se decidieron por la segunda opción.
Utilizando ingeniería reversa, tomando el BIOS de IBM como
una caja negra y estudiando sus entradas y salidas, pero sin
ver el código patentado, 15 programadores expertos lograron
reproducir un BIOS 100% compatible con la IBM. Este
esfuerzo les tomó casi un año y 1 millón de dólares. Esta
empresa
llegaría
a
conocerse
como Compaq Computer,
que creó la
12
primera computadora totalmente compatible con la IBM. Posteriormente otra empresa llamada Phoenix Technologies
produjo otra versión del BIOS y en vez de producir su propia computadora, empezó a vendérsela a otros fabricantes (a
$25 el chip). Pronto, aparecieron múltiples computadoras compatibles con la IBM. Esto inició el mercado de lo que se
conocía como las IBM compatibles, posteriormente PC compatibles, o clones. Seguidamente los fabricantes de los
“clones” iban con precios bastante competitivos, aprovechándose de los fabricantes de componentes de teclados,
discos duros, tarjetas, de Taiwán y Corea, donde sus precios eran una fracción de los de los estadounidenses. Esto
provocó una disminución progresiva de precios, que aumentó la accesibilidad de los equipos para el público en general,
el cual le encontró cada vez más usos. La industria del software floreció para lograr aún más dependencia y aumentar
más el mercado de las computadoras.
Links de la historia de las computadoras
http://www.digitalcentury.com/encyclo/update/comp_hd.html
Página base de este artículo
http://ei.cs.vt.edu/~history/
Página que contiene artículos que describen qué pasó en cada mes del año en toda la historia de las computadoras.
http://www.maxmon.com/timeline.htm
Línea de tiempo de eventos de la computación
http://lecture.eingang.org/
http://ei.cs.vt.edu/~history/
Dell Computer Corporation
Michael Dell ingresó a la Universidad de Texas en Austin con
el objetivo de convertirse en médico. Su pasión por las
computadoras fue lo que lo llevó a vender computadoras IBM
inicialmente directamente desde su cuarto en la universidad.
Fundó su empresa Dell Computer Corporation en 1984 con
un capital de $1000 y desarrolló un método donde el
consumidor realiza un pedido y posteriormente se le
ensambla el computador, todo sin la intervención de un
distribuidor. Unos 18 años después, Dell Computer es una
empresa que vale $31.8 mil millones de dólares, con
ganancias de $40 millones diarios, y 36 mil empleados en
todo el mundo, siendo la mayor empresa de ventas de
computadoras en línea en el mundo.
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
Libros
Levine, G. “Computación y programación moderna”. Pearson Education. 2001.
Patterson, Hennessy. “Computer Organization and Design”. Morgan Kaufman. 1999.
Libros de la historia de las computadoras
Kaplan, D. “The Silicon Boys and Their Valley of Dreams”. Perennial. 2000.
Freiberger, P. Swaine, M. “Fire in the Valley: The Making of the Personal Computer”. McGraw-Hill Trade. 1999.
Cringely, R. “Accidental Empires: How the boys of Silicon Valley make their millions, battle foreign
competition, and still can´t get a date”. HarperCollins Publishers. 1993.
Reid, T.R. “The Chip: How two americans invented the Microchip and launched a revolution”. Random House.
2001.
15
Procesador: Pentium Pro
Fecha de introducción: 1996
Frecuencia Inicial: 200 MHz
Transistores: 5.5 millones
Ancho de vías: 0.35 micrones
Procesador: Pentium 2
Fecha de introducción: 1997
Frecuencia Inicial: 300MHz
Transistores: 7.5 millones
Ancho de vías: 0.25 micrones
Procesador: Pentium 3
Fecha de introducción: 1999
Frecuencia Inicial: 500MHz
Transistores: 9.5 milllones
Ancho de vías: 0.25 micrones
Procesador: Pentium 4
Fecha de introducción: 2000
Frecuencia Inicial: 1.5 GHz
Transistores: 42 millones
Ancho de vías: 0.18
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
Procesador: Itanium
Fecha de introducción: 2001
Frecuencia Inicial: 800MHz
Transistores: 26 millones
Ancho de vías: 0.18 micrones
Películas recomendadas
The Pirates of Silicon Valley
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
13
IE – 503 Estructuras de Computadoras Digitales,
Universidad de Costa Rica – Prof. Lochi Yu
14
Procesador: Xeon
Fecha de introducción: 2001
Frecuencia Inicial: 1.7GHz
Transistores: 42 millones
Ancho de vías: 0.18 micrones
Breve reseña sobre los microprocesadores más importantes de la historia
Los procesadores posteriores del 8080 que sacó Intel fueron el 8086, 8088 (versión disminuida del 8086), 80286,
80386, 486, Pentium, Xeon e Itanium. Otros procesadores importantes fueron: 6502 (Apple II y Commodore), los de
motorota 68000, 68020, 68030, 68040, y PowerPC.
Procesador: 4004
Fecha de introducción: 1971
Frecuencia Inicial: 108Khz
Transistores: 2300
Ancho de vías: 10 micrones
Procesador: 80286
Fecha de introducción: 1982
Frecuencia Inicial: 6 MHz
Transistores: 134000
Ancho de vías: 1.5 microne
Procesador: 80386
Fecha de introducción: 1985
Frecuencia Inicial: 16 MHz
Transistores: 275000
Ancho de vías: 1.5 micrones
Procesador: 8080
Fecha de introducción: 1974
Frecuencia Inicial: 2 MHz
Transistores: 4500
Ancho de vías: 6 micrones
s
Procesador: 80486
Fecha de introducción: 1989
Frecuencia Inicial: 25MHz
Transistores: 1.2 millones
Ancho de vías: 1 micron
Procesador: 8086
Fecha de introducción: 1978
Frecuencia Inicial: 5 MHz
Transistores: 29000
Ancho de vías: 3 micrones
Procesador: Pentium 1
Fecha de introducción: 1993
Frecuencia Inicial: 66 MHz
Transistores: 3.1 millones
Ancho de vías: 0.8 micrones
Procesador: 8088
Fecha de introducción: 1978
Frecuencia Inicial: 5 MHz
Transistores: 29000
Ancho de vías: 3 micrones
141
142
16
Anexo B
Plantilla para proyectos
A continuación se muestra la plantilla creada para editar el documento en LATEX
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\Plantilla.tex
%
%
%
%
Miércoles, 19 de Agosto de 2009 01:36 p.m.
Universidad de Costa Rica.
Escuela de Ingeniería Eléctrica.
Plantilla para elaboración de informes de Proyecto Eléctrico en Latex.
Desarrollado por: María Teresa Fuentes Chacón.
\documentclass[12pt]{report}
% Para insertar paginas en pdf.
\usepackage{pdfpages}
% Estilo del documento
\usepackage{fancybox}
% Para poder usar varias columnas:
\usepackage{multicol}
\setlength{\columnsep}{0.5cm} % espacio entre columnas
% Para poder escribir acentos directamente:
%
\usepackage[latin1]{inputenc}
% linux
\usepackage[cp1252]{inputenc}
% para windows
% Para que el LaTeX sepa que el texto está en español:
\usepackage[spanish]{babel}
% Unidad de trabajo
\setlength{\unitlength}{1 cm}
% Paquetes de la AMS:
\usepackage{amsmath, amsthm, amsfonts}
% Color en fuentes
\usepackage{color}
% Símbolos
\usepackage{latexsym}
% Inclusión de gráficos. Soporte para utilizar \figura
\usepackage[pdftex]{graphicx}
\usepackage{wrapfig,picinpar}
% Inclusión de gráficos al lado de texto
\usepackage[rflt]{floatflt}
% Para meter figuras flotantes entre el texto
\usepackage{float}
% para poder insertar imagen: Here!
% Espaciado entre párrafos
%
\parskip=6mm
% Numeración de pagina, con números romanos, a partir de aquí
\pagenumbering{roman}
%Para agregar la bibliografía en el índice
\usepackage{tocbibind}
% Para manipular los márgenes
\usepackage{geometry}
\geometry{left=2.5cm, right=2.5cm, top=3cm, bottom=2cm}
% Letras
\usepackage[T1]{fontenc}
% Para tablas:
\usepackage{rotating}
\usepackage{multirow}
\usepackage{longtable}
\begin{document}
% Datos del proyecto
\newcommand{\estudiante}{Nombre del estudiante}
\newcommand{\proyecto}{Titulo del proyecto}
-1-
91
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\Plantilla.tex
Miércoles, 19 de Agosto de 2009 01:36 p.m.
\newcommand{\guia}{Ing. Guia.}
\newcommand{\lectorA}{Ing. Lector 1.}
\newcommand{\lectorB}{Ing. Lector 2.}
\newcommand{\fecha}{Mes, Año}
% Titulos renombrados
\renewcommand{\contentsname}{Índice General}
\renewcommand{\partname}{Parte}
\renewcommand{\chaptername}{Capítulo}
\renewcommand{\appendixname}{Anexo}
\renewcommand{\bibname}{Bibliografía}
\renewcommand{\figurename}{Figura}
\renewcommand{\listfigurename}{Índice de figuras}
\renewcommand{\tablename}{Tabla}
\renewcommand{\listtablename}{Índice de tablas}
%-------------------------------------------------------------------------% Portada
%-------------------------------------------------------------------------\thispagestyle{empty} % elimina numeración de página en esta página especifica
\begin{center}
% Encabezado
\textbf{{\Huge Universidad de Costa Rica}\\[0.5cm]
{\LARGE Escuela de Ingeniería Eléctrica}\\[0.5cm]
{\LARGE Facultad de Ingeniería}}\\[4.5cm]
% Titulo del proyecto
{\LARGE \textbf{\proyecto}}\\[3.5cm]
% Nombre del estudiante
{\Large Por:}\\[0.25cm]
{\Large \estudiante}\\[3cm]
% Lugar y fecha
{\Large Ciudad Universitaria Rodrigo Facio}\\[0.25cm] {\Large \fecha}\\
\end{center}
%-------------------------------------------------------------------------% Tribunal
%-------------------------------------------------------------------------\newpage{}
\thispagestyle{empty} % elimina numeración de página en esta página especifica
\begin{tribunal}
\begin{center}
\\[1.25cm]
{\LARGE \textbf{\proyecto}}\\[1.25cm]
{\Large Por:}\\[0.25cm]
{\Large \estudiante}\\[2cm]
Sometido a la Escuela de Ingeniería Eléctrica\\de la Facultad de Ingeniería\\de la
Universidad de Costa Rica\\
como requisito parcial para optar por el grado de:\\[0.25cm]
BACHILLER EN INGENIERÍA ELÉCTRICA\\[0.25cm]
-2-
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\Plantilla.tex
Miércoles, 19 de Agosto de 2009 01:36 p.m.
Aprobado por el Tribunal:\\[2.5cm]
% Profesor guia
\begin{tabular}{c}
\line(1,0){6.5cm}\\
\guia
\end{tabular}\\
Profesor guía\\[2.5cm]
% Profesores lectores
\begin{multicols}{2}
\line(1,0){6.5cm}\\
{\lectorA}\\Profesor lector\\
\line(1,0){6.5cm}\\
{\lectorB}\\Profesor lector\\
\end{multicols}
\end{center}
\end{tribunal}
%-------------------------------------------------------------------------% Dedicatoria
%-------------------------------------------------------------------------\include{Dedicatoria/Dedicatoria}
%-------------------------------------------------------------------------% Reconocimientos
%-------------------------------------------------------------------------\include{Reconocimientos/Reconocimientos}
%-------------------------------------------------------------------------% Indice General
%-------------------------------------------------------------------------\newpage{}
\begin{IndiceGeneral}
\tableofcontents
\end{IndiceGeneral}
%-------------------------------------------------------------------------% Indice de figuras
%-------------------------------------------------------------------------\newpage{}
\begin{IndiceDeFiguras}
\listoffigures
\end{IndiceDeFiguras}
%-------------------------------------------------------------------------% Índice de tablas
%-------------------------------------------------------------------------\newpage{}
\begin{IndiceDeTablas}
-3-
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\Plantilla.tex
Miércoles, 19 de Agosto de 2009 01:36 p.m.
\listoftables
\end{IndiceDeTablas}
%-------------------------------------------------------------------------% Nomenclatura
%-------------------------------------------------------------------------\include{Nomenclatura/Nomenclatura}
%-------------------------------------------------------------------------% Resumen
%-------------------------------------------------------------------------\include{Resumen/Resumen}
%-------------------------------------------------------------------------% Contenido del documento
%-------------------------------------------------------------------------\newpage{}
% Numeración de pagina normal a partir de aquí
\pagenumbering{arabic}
%-----------------------------------------------------------------% Capitulo 1
%-----------------------------------------------------------------\include{1/Cap1}
%-----------------------------------------------------------------% Capitulo 2
%-----------------------------------------------------------------\include{2/Cap2}
%-----------------------------------------------------------------% Capitulo 3
%-----------------------------------------------------------------\include{3/Cap3}
%-----------------------------------------------------------------% Capitulo 4
%-----------------------------------------------------------------\include{4/Cap4}
%-----------------------------------------------------------------% Bibliografía.
%-----------------------------------------------------------------\include{Bibliografia/Bibliografia}
%-----------------------------------------------------------------% Anexos
%-----------------------------------------------------------------\include{Anexos/Anexos}
\end{document}
-4-
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\Dedicatoria\Dedicatoria.tex
%
%
%
%
Este archivo es llamado por "Plantilla.tex"
mediante el comando: \include{Dedicatoria/Dedicatoria}
El contenido de este archivo aparecera en el documento final como
Dedicatoria.
%-----------------------------------------------------------------% Dedicatoria
%-----------------------------------------------------------------\newpage{}
\begin{Dedicatoria}
\begin{center} \textbf{\LARGE Dedicatoria} \end{center}
\begin{flushright}
\\[1.5cm]
\emph{Texto}
\end{flushright}
\end{Dedicatoria}
% Final del subdocumento -> Dedicatoria
-1-
Miércoles, 19 de Agosto de 2009 01:40 p.m.
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\Reconocimientos\Reconocimientos.tex
%
%
%
%
Este archivo es llamado por "Plantilla.tex"
mediante el comando: \include{Reconocimientos/Reconocimientos}
El contenido de este archivo aparecera en el documento final como
Reconocimientos.
%-----------------------------------------------------------------% Reconocimientos
%-----------------------------------------------------------------\newpage{}
\begin{Reconocimientos}
\begin{center} \textbf{\LARGE Reconocimientos} \end{center}
Texto
\end{Reconocimientos}
% Final del subdocumento -> Reconocimientos
-1-
Miércoles, 19 de Agosto de 2009 01:37 p.m.
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\Nomenclatura\Nomenclatura.tex
%
%
%
%
Este archivo es llamado por "Plantilla.tex"
mediante el comando: \include{Nomenclatura/Nomenclatura}
El contenido de este archivo aparecera en el documento final como
nomenclatura.
%-----------------------------------------------------------------% Nomenclatura
%-----------------------------------------------------------------\newpage{}
\begin{Nomenclatura}
\begin{center} \textbf{\LARGE Nomenclatura} \end{center}
\begin{multicols}{2}
\noindent
XX Descripción del símbolo \\
YY Descripción del símbolo
\end{multicols}
\end{Nomenclatura}
% Final del subdocumento -> Nomenclatura
-1-
Miércoles, 19 de Agosto de 2009 01:38 p.m.
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\Resumen\Resumen.tex
%
%
%
%
Miércoles, 19 de Agosto de 2009 01:37 p.m.
Este archivo es llamado por "Plantilla.tex"
mediante el comando: \include{Resumen/Resumen}
El contenido de este archivo aparecera en el documento final como
Resumen.
%-----------------------------------------------------------------% Resumen
%-----------------------------------------------------------------\newpage{}
\begin{Resumen}
\begin{center} \textbf{\LARGE Resumen} \end{center}
Incluir un resumen sobre el trabajo realizado, describiendo objetivo general,
la metodología empleada, las variables estudiadas, los resultados obtenidos y
el alcance del proyecto. Además se deben agregar las principales conclusiones
y recomendaciones a las que se llegó. Este apartado NO DEBE EXCEDER 1 página.
EL RESUMEN SE ESCRIBE AL FINALIZAR EL RESTO DEL TRABAJO
\end{Resumen}
% Final del subdocumento -> Resumen
-1-
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\1\Cap1.tex
%
%
%
%
Miércoles, 19 de Agosto de 2009 01:39 p.m.
Este archivo es llamado por "Plantilla.tex"
mediante el comando: \include{1/Cap1}
El contenido de este archivo aparecera en el documento final como
capitulo 1.
%-----------------------------------------------------------------% Capítulo 1
% Jerarquias de titulos:
%
\chapter{}
= nivel 1
%
\section{}
= nivel 2
%
\subsection{}
= nivel 3
%
\subsubsection{} = nivel 4
%-----------------------------------------------------------------\chapter{Introducción} \label{ch:capitulo1}
%-----------------------------------------------------------------% Contenido del capítulo
%-----------------------------------------------------------------En el CAPÍTULO 1: Introducción, se debe incluir una descripción de los objetivos,
la justificación del tema, la presentación del problema a resolver y la
metodología a utilizar. Los títulos de los capítulos deben tener estilo de párrafo
“Titulo 01”.\\
Dado que la tesis o el proyecto es un informe técnico, DEBE DE ESCRIBIRSE EN PASADO
IMPERSONAL.\\
La numeración del trabajo debe ser: para la Parte Introductoria deben usarse números
romanos en minúscula que irán en el centro del borde inferior. Para el Cuerpo del
Trabajo y la Parte Final se usarán números arábigos ubicados en el borde superior
a la derecha, excepto cuando sea el inicio de un capítulo, en cuyo caso se coloca
en el centro del borde inferior. Este documento contiene el formato para la numeración
en los capítulos aquí establecidos, sin embargo para agregar nuevos capítulos que
conserven la configuración establecida se deberá insertar una nueva “Sección” en el
documento. Para esto deberá colocarse al final del último capítulo e ir al menú de
“Insertar”, luego escoger “Salto” y seleccionar en “Tipos de salto de sección”
el de “Página siguiente”.\\
\section{Objetivos}
Deben incluirse los apartados necesarios haciendo la división de una manera lógica.
Los apartados deberán tener estilo de párrafo “Titulo 02”.
\subsection{Objetivo general}
Texto...
\subsection{Objetivos específicos}
Al igual que en el caso de los apartados deben de agregarse los necesarios.
Los sub-apartados deberán tener estilo de párrafo “Titulo 03”.
\section{Metodología}
texto...
% Final del subdocumento -> Capítulo 1
-1-
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\2\Cap2.tex
%
%
%
%
Miércoles, 19 de Agosto de 2009 01:40 p.m.
Este archivo es llamado por "Plantilla.tex"
mediante el comando: \include{2/Cap2}
El contenido de este archivo aparecera en el documento final como
capitulo 2.
%-----------------------------------------------------------------% Capitulo 2
% Jerarquias de titulos:
%
\chapter{}
= nivel 1, top nivel
%
\section{}
= nivel 2
%
\subsection{}
= nivel 3
%
\subsubsection{} = nivel 4
%-----------------------------------------------------------------\chapter{Desarrollo teórico} \label{ch:capitulo2}
%-----------------------------------------------------------------% Figuras
%-----------------------------------------------------------------% El codigo de abajo especifica de donde se importaran las figuras.
\ifpdf
\graphicspath{{FigCap2/figuras/PNG/}{FigCap2/figuras/PDF/}{FigCap2/figuras/}}
\else
\graphicspath{{FigCap2/figuras/EPS/}{FigCap2/figuras/}}
\fi
% Como introducirlas? Se introducen de la siguiente manera:
%
\figuremacro{1}{2}{3}{4} llama una serie de comandos para la figura.
% 1 = nombre de la figura sin extension; PNG, JPEG soportados; GIF no funciona.
% 2 = Titulo de la figura
% 3 = Descripcion
% \figuremacroW{1}{2}{3}{4}
% 1 = nombre de la figura sin extension; PNG, JPEG soportados; GIF no funciona.
% 2 = Titulo de la figura AND the name of the label for cross-linking
% 3 = Descripcion
% 4 = Tamano relativo al ancho de texto, escalable, el ancho de texto es descrito por
1,
%
menor a esto reduce el tamano de la figura.
%-----------------------------------------------------------------% Contenido del capítulo
%-----------------------------------------------------------------En el CAPÍTULO 2: Desarrollo Teórico, se debe incluir la teoría relevante del trabajo,
haciendo una descripción detallada en los temas que lo requieran.
\section{Relaciones matemáticas}
Las ecuaciones deben elaborarse con el editor de ecuaciones y estar centradas,
con numeración consecutiva después del número del apartado, justificada a la derecha, por
ejemplo:
\begin{equation}\label{eq:EQ1}
G(s) = X(s)
\end{equation}
-1-
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\2\Cap2.tex
Miércoles, 19 de Agosto de 2009 01:40 p.m.
\begin{equation}\label{eq:EQ2}
Y(s) = U(s)
\end{equation}
\\Uno puede referirse a ecuaciones así: ver ecuación (\ref{eq:EQ2}).
También se pueden mencionar algo de la bibliografía de esta forma: \cite{Libro1}.\\
Los GRAFICOS o FIGURAS deben estar centrados, y numerados e identificados al pié de forma
“Figura Nº X.Y – Descripción de la figura”, donde X correspondería al capítulo y Y al número
de figura. Por ejemplo:\\
\begin{figure}[H]
\begin{center}
\includegraphics[width=0.3\textwidth]{./2/FigCap2/logoEIE.jpg}
\caption{Logo EIE}
\label{fig:logoEIE} %\ref{fig:logoEIE}
\end{center}
\end{figure}
Las TABLAS deben estar centradas, y numeradas e identificadas en la primera línea de la tabla
“Tabla Nº X.Y – Descripción de la tabla”. donde X correspondería al capítulo y Y al número de
tabla.
Además la numeración de la tabla y su descripción deben tener estilo de párrafo “Tabla 01”, de
manera de poder actualizar el índice respectivo. Por ejemplo:\\
\begin{table}
\begin{center}
\begin{tabular}{|c|r|} \hline
Titulo1 & Titulo2 \\ \hline
val1 & val2 \\
val3 & val4 \\ \hline
\end{tabular}
\caption{Descripcion de la tabla}
\end{center}
\end{table}
% Final del subdocumento -> Capitulo 2
-2-
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\3\Cap3.tex
%
%
%
%
Miércoles, 19 de Agosto de 2009 01:40 p.m.
Este archivo es llamado por "Plantilla.tex"
mediante el comando: \include{3/Cap3}
El contenido de este archivo aparecera en el documento final como
capitulo 3.
%-----------------------------------------------------------------% Capitulo 3
% Jerarquias de titulos:
%
\chapter{}
= nivel 1, top nivel
%
\section{}
= nivel 2
%
\subsection{}
= nivel 3
%
\subsubsection{} = nivel 4
%-----------------------------------------------------------------\chapter{Otros capítulos} \label{ch:capitulo3}
%-----------------------------------------------------------------% Contenido del capítulo
%-----------------------------------------------------------------En el CAPÍTULO 3 y los siguientes, consiste en la elaboración misma del informe
de la tesis o del proyecto, por lo que se debe hacer una división a discreción
del estudiante.
\section{Subtitulo1}
Texto...
\section{Subtitulo2}
Y mas texto...
% Final del subdocumento -> Capitulo 3
-1-
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\4\Cap4.tex
%
%
%
%
Miércoles, 19 de Agosto de 2009 01:40 p.m.
Este archivo es llamado por "Plantilla.tex"
mediante el comando: \include{3/Cap3}
El contenido de este archivo aparecera en el documento final como
capitulo 4.
%-----------------------------------------------------------------% Capitulo 4
% Jerarquias de titulos:
%
\chapter{}
= nivel 1, top nivel
%
\section{}
= nivel 2
%
\subsection{}
= nivel 3
%
\subsubsection{} = nivel 4
%-----------------------------------------------------------------\chapter{Conclusiones y recomendaciones} \label{ch:capitulo4}
%-----------------------------------------------------------------% Contenido del capítulo
%-----------------------------------------------------------------Este debe ser el último capítulo del trabajo y en el se deben incluir las
principales conclusiones y recomendaciones a las que se llegó una vez
finalizada la investigación o el desarrollo.
% Final del subdocumento -> Capitulo 4
-1-
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\Bibliografia\Bibliografia.tex
%
%
%
%
Miércoles, 19 de Agosto de 2009 01:41 p.m.
Este archivo es llamado por "Plantilla.tex"
mediante el comando: \include{Bibliografia/Bibliografia}
El contenido de este archivo aparecera en el documento final como
Bibliografía.
%-----------------------------------------------------------------% Bibliografía.
%-----------------------------------------------------------------\begin{thebibliography}{99}
%Libros:\\
\bibitem{Libro2} Hamacher, C. - \emph{Organización de computadores}, quinta edición,
McGraw Hill, España, 2003. \\
%Paginas web:\\
\bibitem{web1} Insertar imágenes en Latex, http://valar.wordpress.com/2004/01/30/
imagenes-en-latex/.\\
\end{thebibliography}
% Final del subdocumento -> Bibliografía.
-1-
C:\Documents and Settings\mtfuente\Desktop\Plantilla proyecto\Anexos\Anexos.tex
%
%
%
%
Miércoles, 19 de Agosto de 2009 01:41 p.m.
Este archivo es llamado por "Plantilla.tex"
mediante el comando: \include{Anexos/Anexo1}
El contenido de este archivo aparecera en el documento final como
Anexos
%-----------------------------------------------------------------% Anexos
%-----------------------------------------------------------------\begin{Anexos}
\appendix
\addcontentsline{toc}{chapter}{Anexos}
\chapter{Titulo del anexo 1} \label{ch:Anexo1} \\
Descripción del anexo 1...\\
\end{Anexos}
\begin{Anexos}
\appendixB
%\addcontentsline{toc}{chapter}{Anexo B}
\chapter{Titulo del anexo 2} \label{ch:Anexo2} \\
Descripción del anexo 2...\\
\end{Anexos}
% Final del subdocumento -> Anexo 1
-1-
Descargar