Vous êtes sur la page 1sur 187

TELEMTICA

Arquitectura de Ordenadores I

Apuntes de
Arquitectura de
Ordenadores I
Norberto M. Ramos Calero EUITT
ARQUITECTURA DE ORDENADORES I

Apuntes de Arquitectura de
Ordenadores I

Norberto M. Ramos Calero


Universidad de Las Palmas de Gran Canaria
Campus de Tafira - Telecomunicacin Las Palmas
Telfono 928 45 8972 Fax 928 45 1243

Primera edicin
Impreso en:
Universidad de Las Palmas de Gran Canaria
Campus Universitario de Tafira
35017 Las Palmas
Octubre 2001

Fotocopiadora: Xerox
Modelo: DOCUTECH
N. serie: 1104516609

ISBN: 84-XXXXX-XX-X
Depsito legal: GC-920-2001

Todas las marcas comerciales o de equipos utilizados en este tomo son marcas registradas de sus respectivos propietarios.
Tabla de contenidos
TEMA 1.................................................................................................................1
INTRODUCCIN A LOS COMPUTADORES ..............................................................1
Organizacin Estructurada de Computadoras ..............................................1
Lenguajes, niveles y mquinas virtuales....................................................2
Mquinas multinivel contemporneas .......................................................4
TEMA 2...............................................................................................................11
CODIFICACIN Y REPRESENTACIN DE LA INFORMACIN .................................11
Marcas numricas........................................................................................11
Sistemas de agrupamiento sencillos ............................................................12
Numerales romanos .....................................................................................12
Sistemas numricos posicionales .................................................................12
NMEROS BINARIOS ..........................................................................12
NMEROS DE PRECISIN FINITA ................................................12
SISTEMAS NUMRICOS CON BASE .............................................14
CONVERSIN DE UNA BASE A OTRA .........................................17
NMEROS BINARIOS NEGATIVOS ..............................................18
ARITMTICA BINARIA ...................................................................21
Conversin entre bases ................................................................................22
Valores fraccionarios...................................................................................24
Memoria Primaria o Principal ....................................................................25
Bits ...........................................................................................................25
Direcciones de memoria.......................................................................26
Ordenamiento de bytes.........................................................................26
Cdigos para la correccin de errores..................................................29
Codificacin de los caracteres.....................................................................33
TEMA 3...............................................................................................................35
ARITMTICA DEL PROCESADOR.........................................................................35
UNIDAD ARITMTICO LGICA...............................................................35
REPRESENTACIN DE ENTEROS............................................................36
Representacin en signo y magnitud .......................................................36
Representacin en complemento a la base...............................................37
Conversin entre longitudes de bits diferentes ........................................39
Representacin en punto fijo....................................................................41
ARITMTICA CON ENTEROS....................................................................41

Arquitectura de Ordenadores I i
ndice

Negacin.................................................................................................. 41
REGLA DE DESBORDAMIENTO: .............................................. 44
REGLA PARA LA RESTA: ........................................................... 44
Multiplicacin.......................................................................................... 45
Enteros sin signo.................................................................................. 45
Multiplicacin en complemento a dos............................................. 47
Divisin ............................................................................................... 54
TEMA 4 .............................................................................................................. 35
ALU, UC Y MEMORIA PRINCIPAL .................................................................... 58
Introduccin ................................................................................................ 58
El FUNCIONAMIENTO DEL COMPUTADOR ......................................... 61
ORGANIZACIN DEL PROCESADOR ..................................................... 66
ORGANIZACIN DE LOS REGISTROS .................................................... 67
EL CICLO DE INSTRUCCION................................................................... 74
Flujo de datos .......................................................................................... 76
TEMA 5 .............................................................................................................. 78
LA RUTA DE DATOS.......................................................................................... 78
Introduccin ................................................................................................ 78
1 Esquemas de clculo ........................................................................... 79
SOLUCIN ......................................................................................... 79
2 Mquina algortmica............................................................................ 79
SOLUCION ......................................................................................... 80
3 Algoritmo interpretacin ..................................................................... 80
SOLUCIN ......................................................................................... 80
Los Componentes Fundamentales ............................................................... 80
La Unidad Aritmtico-Lgica (ALU) ..................................................... 81
Los registros ............................................................................................ 81
Registros de la ALU ............................................................................ 82
Banco de registros generales ................................................................... 84
Registros especiales............................................................................. 85
Los buses o lneas de interconexin ............................................................ 86
Bus de direcciones................................................................................... 87
Bus de datos............................................................................................. 87
Bus de control.......................................................................................... 87
Anlisis de Arquitecturas ............................................................................ 87
Camino de Datos Secuencializado con un bus ........................................ 88
Camino de Datos Secuencializado de dos buses ..................................... 91
Camino de Datos Secuencializado de tres buses..................................... 93
EL CAMINO DE DATOS DE LA MAQUINA SENCILLA .................................. 95
Unidad Aritmtico-Lgica de la MS ....................................................... 95
Los registros de la MS............................................................................. 98
Los buses de la MS.................................................................................. 99
EL CAMINO DE DATOS DE LA M+ ............................................................ 102
La Unidad Aritmtico-Lgica ................................................................... 103
Los registros .......................................................................................... 105
Buses de interconexin.......................................................................... 109

ii Arquitectura de Ordenadores I
ndice

TEMA 6.............................................................................................................112
INTRODUCCIN A LA PROGRAMACIN EN ENSAMBLADOR ..............................112
La magia del compilador ...........................................................................112
Estructura selectiva simple si ... entonces ... fin si....................................113
Los Saltos ...............................................................................................113
Estructura selectiva simple si ... entonces ... sino ... fin si........................114
Estructura repetitiva mientras ... hacer ... fin mientras ...........................115
Estructura repetitiva repetir ... hasta que ... .............................................116
Estructura repetitiva desde ... hasta ... hacer ... fin desde ........................116
Estructura selectiva mltiple segn ... hacer ... fin segn .........................118
Subprogramas ............................................................................................120
TEMA 7.............................................................................................................123
EL JUEGO DE INSTRUCCIONES ..........................................................................123
Clasificacin general de las instrucciones ................................................123
Instrucciones para la transferencia de datos...........................................123
Instrucciones aritmticas y lgicas ........................................................123
Instrucciones aritmticas....................................................................123
Instrucciones lgicas ..........................................................................123
Instrucciones de salto .............................................................................124
Instrucciones de llamada y retorno a subrutina......................................124
Instrucciones de control de interrupciones ............................................124
Instrucciones especiales .........................................................................124
El juego de instrucciones al completo .......................................................125
Instrucciones de transferencia de datos (12) ..........................................125
Instrucciones aritmticas (20) ................................................................125
Instrucciones lgicas (13) ......................................................................125
Instrucciones de transferencia de control (salto) (21)............................126
Instrucciones de manejo de cadenas (7).................................................126
Instrucciones de interrupcin (3) ...........................................................126
Instrucciones de control del procesador (12) .........................................127
TEMA 8.............................................................................................................129
DIRECCIONAMIENTO DE MEMORIA .................................................................129
Direccionamiento inmediato......................................................................130
Direccionamiento directo absoluto............................................................130
Direccionamiento directo relativo .............................................................131
Direccionamiento relativo al contador de programa PC........................132
Direccionamiento directo relativo a registro base .................................133
Direccionamiento directo relativo a registro ndice...............................134
Direccionamiento a pila.............................................................................136
Direccionamiento indirecto .......................................................................136
Indireccin de dos niveles......................................................................138
Direccionamiento inherente o implcito ....................................................138
Direccionamientos del IEEE 694...............................................................138
Problemas ..................................................................................................140
Buffer para el Puerto Serie.....................................................................140
Buffer circular para el Puerto Serie........................................................140

Arquitectura de Ordenadores I iii


ndice

Lectura del Buffer circular para el Puerto Serie.................................... 140


Subrutina de escritura en el buffer del puerto serie............................... 140
Subrutina de lectura del buffer del puerto serie .................................... 140
Puerto Serie ........................................................................................... 141
TEMA 9 ............................................................................................................ 143
INSTRUCCIONES DE CONTROL DE FLUJO ......................................................... 143
Saltos condicionales e incondicionales ..................................................... 143
La Pila ....................................................................................................... 143
Implementacin de la pila ..................................................................... 144
Subrutinas.................................................................................................. 146
TEMA 10 .......................................................................................................... 147
DISEO DE LA UNIDAD DE CONTROL .............................................................. 147
INTRODUCCIN...................................................................................... 147
OPERACIONES ELEMENTALES............................................................. 149
ESTRUCTURA DE UN COMPUTADOR ELEMENTAL Y SEALES DE
CONTROL ................................................................................................. 150
Memoria principal ................................................................................. 150
Unidad aritmtica .................................................................................. 153
Banco de registros ................................................................................. 154
rganos de Control................................................................................ 154
Temporizacin De Las Seales De Control: Periodos Y Fases ................ 155
Ejecucin De Instrucciones: Cronogramas .............................................. 156
ADD .4,.7............................................................................................... 156
LD .3,#734[.4++]................................................................................... 159
SUB .12,[#1734[.13]] ............................................................................ 161
BZ #1342[.6] ......................................................................................... 163
Instrucciones mayores o menores que la palabra .................................. 163
Asignacin de periodos a cada instruccin ........................................... 164
Diseo de la Unidad de Control................................................................ 165
UNIDAD DE CONTROL EN LGICA CABLEADA ................................ 166
UNIDAD DE CONTROL ALMACENADA: MICROPROGRAMACIN .. 167
Introduccin histrica............................................................................ 167
Concepto de microprograma ................................................................. 168
Ventajas de la microprogramacin........................................................ 169
Estructura bsica de la unidad de control microprogramada................. 170
Secuenciamiento explcito................................................................. 170
Secuenciamiento Implcito ................................................................ 171
Formato y codificacin de las microinstrucciones ................................ 172
Formato de la microinstruccin......................................................... 173
Codificacin de campos .................................................................... 173
Solapamiento de campos ................................................................... 174
Codificacin total .............................................................................. 174
Microinstrucciones de varios periodos. Nanocontrol........................ 175
Estructura completa de la unidad de control microprogramada........ 175
Microbifurcaciones condicionales..................................................... 176
Microbucles y microsubrutinas ......................................................... 176

iv Arquitectura de Ordenadores I
ndice

ARRANQUE DEL COMPUTADOR ..........................................................177

Arquitectura de Ordenadores I v
ndice

vi Arquitectura de Ordenadores I
Tema 1

Introduccin a los Computadores


Una computadora digital es una mquina que puede resolver problemas ejecutando
las instrucciones que recibe de las personas. Una secuencia de instrucciones que
describe cmo realizar cierta tarea se llama programa. Los circuitos electrnicos de
una computadora pueden reconocer y ejecutar directamente un conjunto limitado de
instrucciones sencillas, y todos los programas tienen que convertirse en una serie de
esas instrucciones para que la computadora pueda ejecutarlos. Dichas instrucciones
bsicas casi nunca son ms complicadas que
Sumar dos nmeros
Verificar si un nmero es cero
Copiar un dato de una parte de la memoria de la computadora a otra
Juntas, las instrucciones primitivas de una computadora constituyen un len-
guaje que permite a las personas comunicarse con la computadora. Dicho lenguaje se
llama lenguaje de mquina. Las personas que disean una computadora nueva
deben decidir qu instrucciones incluirn en su lenguaje de mquina. Por lo regular,
se trata de hacer las instrucciones primitivas lo ms simples posible, en congruencia
con el uso que se piensa dar a la computadora y sus requisitos de rendimiento, a fin
de reducir la complejidad y el costo de los circuitos requeridos. Casi todos los len-
guajes de mquina son tan simples que para las personas resulta difcil y tedioso
usarlos.

Con el paso de los aos, esta sencilla observacin ha dado pie a que las com-
putadoras se estructuren como una serie de abstracciones, donde cada una de stas se
apoya en la que est debajo de ella. De este modo es posible controlar la complejidad
y disear sistemas de cmputo de manera sistemtica y organizada. Llamamos a este
enfoque organizacin estructurada de computadoras. En la seccin que sigue des-
cribiremos el significado de este trmino.

Organizacin Estructurada de Computadoras


Como ya se mencion, hay una gran diferencia entre lo que es cmodo para las
personas y lo que es cmodo para las computadoras. Las personas quieren hacer X,
pero las computadoras slo pueden hacer Y. Esto crea un problema. El objetivo de
este curso es explicar cmo puede resolverse ese problema.

Arquitectura de Ordenadores I 1
Tema 1

Lenguajes, niveles y mquinas virtuales


Se puede atacar el problema de dos maneras; ambas implican disear un nuevo con-
junto de instrucciones que para las personas sea ms fcil de usar que el conjunto de
instrucciones de mquina original. Juntas, estas nuevas instrucciones tambin forman
un lenguaje, que llamaremos L1, as como las instrucciones de mquina originales
forman un lenguaje, que nombraremos L0. Las dos estrategias difieren en la forma en
que la computadora ejecuta los programas escritos en L1 ya que, como dijimos, la
computadora slo puede ejecutar programas escritos en su lenguaje de mquina, L0.

Un mtodo de ejecutar un programa escrito en L1 es sustituir primero cada


instruccin escrita en L1 por una sucesin equivalente de instrucciones en L0. El
programa resultante consiste exclusivamente en instrucciones de L0. Luego, la com-
putadora ejecuta el nuevo programa en L0 en lugar del antiguo programa en L1. Esta
tcnica se llama traduccin.

La otra tcnica consiste en escribir un programa en L0 que tome programas


en L1 como datos de entrada y los ejecute examinando sus instrucciones una por una
y ejecutando directamente la sucesin de instrucciones en L0 que equivale a cada
una. Con esta tcnica, no es necesario generar primero un nuevo programa en L0. La
tcnica se conoce con el nombre de interpretacin y el programa que la implementa
se denomina intrprete.

La traduccin y la interpretacin son similares. Con ambos mtodos las ins-


trucciones en L1 se ejecutan finalmente realizando sucesiones equivalentes de
instrucciones en L0. La diferencia es que, con la traduccin, todo el programa en L1
se convierte primero en un programa en L0, el programa en L1 se desecha, el nuevo
programa en L0 se carga en la memoria de la computadora, y se ejecuta. Durante la
ejecucin, el programa en L0 recin generado es el que se ejecuta y controla la com-
putadora.

Con la interpretacin, despus de que cada instruccin en L1 se examina y se


decodifica, se ejecuta inmediatamente. No se genera ningn programa traducido.
Aqu es el intrprete el que controla la computadora. Para l, el programa en L1 no es
ms que datos. Ambos mtodos se usan ampliamente, y cada vez se usa ms una
combinacin de los dos.

En lugar de pensar en trminos de traduccin o interpretacin, a menudo es


ms fcil imaginar la existencia de una computadora hipottica o mquina virtual
cuyo lenguaje de mquina es L1. Llamemos a esta mquina virtual Ml (y sea M0 la
mquina virtual que corresponde a L0). Si fuera posible construir tal mquina a un
costo razonable, no habra necesidad de tener L1 ni una mquina que ejecutara pro-
gramas en L1. La gente simplemente escribira sus programas en L1 y la
computadora los ejecutara directamente. Incluso si es demasiado costoso o compli-
cado construir con circuitos electrnicos la mquina virtual cuyo lenguaje es L1, es
posible escribir programas para ella. Tales programas podran interpretarse o tradu-
cirse con un programa escrito en L1 que la computadora existente puede ejecutar
directamente. En otras palabras, las personas pueden escribir programas para las
mquinas virtuales como si realmente existieran.

2 Arquitectura de Ordenadores I
Introduccin a los computadores

Para que la traduccin o interpretacin sea prctica, los lenguajes L0 y L1 no


deben ser "demasiado" diferentes. Esta restriccin a menudo implica que L1, aunque
mejor que L0, todava dista mucho de ser ideal para la generalidad de las aplicacio-
nes. Este resultado podra ser decepcionante si pensamos en que el propsito original
de crear L1 era evitar que el programador tuviera que expresar algoritmos en un
lenguaje ms apropiado para las mquinas que para las personas. No obstante, la
situacin no es desesperada.

La estrategia obvia es inventar un tercer conjunto de instrucciones que est


ms orientado hacia las personas y menos orientado hacia la mquina que L1. Esas
instrucciones tambin constituyen un lenguaje, al que llamaremos L2 (con una m-
quina virtual M2). Las personas pueden escribir programas en L2 como si en realidad
existiera una mquina virtual M2 cuyo lenguaje de mquina es L2. Esos programas
podran traducirse a L1 o ser ejecutados por un intrprete escrito en LI.

La invencin de una serie de lenguajes, cada uno ms cmodo que sus prede-
cesores, puede continuar indefinidamente hasta llegar a uno adecuado. Cada lenguaje
se basa en su predecesor, por lo que podemos pensar en una computadora que em-
plea esta tcnica como una serie de capas o niveles, uno encima del otro, como se
muestra en la Figura 1-1. El lenguaje o nivel ms bajo es el ms simple, y el lengua-
je o nivel ms alto es el ms sofisticado.

Existe una relacin importante entre un lenguaje y una mquina virtual. Cada
mquina tiene cierto lenguaje de mquina, que consiste en todas las instrucciones
que la mquina puede ejecutar. Efectivamente, una mquina define un lenguaje. De
igual modo, un lenguaje define una mquina, la mquina que puede ejecutar todos
los programas escritos en ese lenguaje. Desde luego, la mquina definida por un
lenguaje dado podra ser enormemente complicada y demasiado costosa para cons-
truirse directamente con circuitos electrnicos, pero eso no quiere decir que no
podamos imaginarla. Una mquina cuyo lenguaje de mquina es C++ o COBOL
sera en verdad compleja, pero con la tecnologa actual sera fcil construirla. No
obstante, hay razones de peso para no construir semejante computadora: no sera
econmica en comparacin con otras tcnicas.

Una computadora con n niveles puede verse como n mquinas virtuales dis-
tintas, cada una con diferente lenguaje de mquina. Usaremos los trminos "nivel" y
"mquina virtual" indistintamente. Los circuitos electrnicos slo pueden ejecutar
directamente programas escritos en el lenguaje L0 sin necesidad de traduccin ni
interpretacin. Los programas escritos en L1, L2, ..., Ln debern ser interpretados
por un intrprete que se ejecute en un nivel ms bajo, o traducirse a otro lenguaje
correspondiente a un nivel ms bajo.

La persona encargada de escribir programas para la mquina virtual del nivel


n no tiene que estar consciente de los intrpretes y traductores subyacentes. La es-
tructura de la mquina asegura que de un modo u otro esos programas se ejecutarn.
No interesa si un intrprete los ejecuta paso por paso, o si ese intrprete es a su vez
ejecutado por otro intrprete o por los circuitos electrnicos. El resultado es el mis-
mo en ambos casos: los programas se ejecutan.

Arquitectura de Ordenadores I 3
Tema 1

Figura 1-1 Niveles de los sistemas.

En general, a los programadores que usan una mquina de nivel n slo les in-
teresa el nivel ms alto, el que menos se parece al lenguaje de mquina que est hasta
abajo. En cambio, las personas interesadas en entender cmo funciona realmente una
computadora deben estudiarla en todos los niveles. Quienes se interesen en disear
nuevas computadoras o nuevos niveles (o sea, nuevas mquinas virtuales) tambin
debern familiarizarse con niveles distintos del ms alto. Los conceptos y tcnicas
para construir mquinas como una serie de niveles, y los detalles de los niveles
mismos, constituyen el tema principal de este libro.

Mquinas multinivel contemporneas


Casi todas las computadoras modernas constan de dos o ms niveles, y pueden llegar
a existir mquinas con hasta seis niveles, como se muestra en la Figura 1-2. El nivel
0, en la base, es el verdadero hardware de la mquina. Sus circuitos ejecutan los
programas en lenguaje de mquina de nivel 1. Con nimo totalizador, deberamos
mencionar la existencia de un nivel ms bajo de nuestro nivel 0. Este nivel, que no se
muestra en la citada Figura 1-2 porque queda dentro del mbito de la ingeniera
elctrica (y rebasa el alcance de estos apuntes), se llama nivel de dispositivos. En
este nivel, el diseador ve transistores individuales, que son las primitivas de ms
bajo nivel para los diseadores de computadoras. Si nos preguntamos cmo funcio-
nan internamente los transistores, entramos en la fsica del estado slido.

En el nivel ms bajo que estudiaremos, el nivel de lgica digital, los objetos


integrantes se llaman compuertas. Aunque se construyen con componentes analgi-
cos, como los transistores, las compuertas pueden modelarse con exactitud como
dispositivos digitales. Cada compuerta tiene una o ms entradas digitales (seales
que representan 0 1) y para generar su salida calcula alguna funcin sencilla de
dichas entradas, como AND u OR. Cada compuerta contiene unos cuantos transisto-
res como mximo. Podemos combinar pocas compuertas para formar una memoria
de un bit, capaz de almacenar un 0 un 1. Las memorias de un bit pueden combinar-
se en grupos de (por ejemplo) 16, 32 64 para formar registros. Cada registro puede
contener un solo nmero binario menor que cierto valor lmite. Las compuertas
tambin pueden combinarse para formar la mquina calculadora principal misma.
Figura 1-2 Niveles de un computador moderno.

4 Arquitectura de Ordenadores I
Introduccin a los computadores

El siguiente nivel hacia arriba es el nivel de micro arquitectura. En este ni-


vel vemos una coleccin de (tpicamente) 8 a 32 registros que forman una memoria
local y un circuito llamado ALU (anidad de aritmtica lgica, Arithmetic Logic Unit)
que puede efectuar operaciones aritmticas sencillas. Los registros se conectan a la
ALU para formar una trayectoria de datos por donde fluyen los datos. La operacin
bsica de la trayectoria de datos consiste en seleccionar uno o dos registros, hacer
que la ALU opere con ellos (sumndolos, por ejemplo), y almacenar despus el
resultado en algn registro.

En algunas mquinas un programa llamado microprograma controla la opera-


cin de la trayectoria de datos. En otras mquinas la trayectoria de datos est bajo el
control directo del hardware. En ediciones anteriores de este libro llamamos a este
nivel el nivel de microprogramacin porque en el pasado casi siempre se trataba de
un intrprete en software. Puesto que ahora es comn que el hardware controle direc-
tamente la trayectoria de datos, hemos cambiado el nombre para que refleje este
hecho.

En las mquinas con control por software de la trayectoria de datos, el micro-


programa es un intrprete de las instrucciones en el nivel 2: obtiene, examina y
ejecuta las instrucciones una por una, utilizando la trayectoria de datos para hacerlo.
Por ejemplo, para una instruccin ADD (sumar), se obtendra la instruccin, se loca-
lizaran sus operandos y se colocaran en registros, la ALU calculara la suma, y por
ltimo el resultado se enviara al lugar correcto. En una mquina con control por
hardware de la trayectoria de datos, se llevaran a cabo pasos similares, pero sin un
programa almacenado explcito que controle la interpretacin de las instrucciones del
nivel 2.

Arquitectura de Ordenadores I 5
Tema 1

En el nivel 2 tenemos un nivel que llamaremos nivel de arquitectura del con-


junto de instrucciones (Instruction Set Architecture) o nivel ISA. Cada fabricante de
computadoras publica un manual para cada una de las computadoras que vende,
intitulado Manual de referencia del lenguaje de mquina o Principios de opera-
cin de la computadora Western Wombat Model 100X o algo parecido. Estos
manuales se ocupan realmente del nivel ISA, no de los niveles subyacentes. Cuando
describen el conjunto de instrucciones de la mquina, estos manuales estn descri-
biendo realmente las instrucciones que el microprograma o los circuitos de ejecucin
en hardware ejecutan de forma interpretativa. Si un fabricante de computadoras
incluye dos intrpretes en una de sus mquinas, para interpretar dos niveles ISA
distintos, tendr que proporcionar dos manuales de referencia del "lenguaje de m-
quina", uno para cada intrprete.

El siguiente nivel suele ser un nivel hbrido. Casi todas las instrucciones de su
lenguaje estn tambin en el nivel ISA. (No hay razn para que una instruccin que
aparece en un nivel no pueda estar presente tambin en otros niveles.) Adems, hay
un nuevo conjunto de instrucciones, una diferente organizacin de memoria, la capa-
cidad para ejecutar dos o ms programas al mismo tiempo, y varias caractersticas
ms. Entre los distintos diseos de nivel 3 hay ms variacin que entre los de los
niveles 1 2.

Las nuevas funciones que se aaden en el nivel 3 son desempeadas por un


intrprete que se ejecuta en el nivel 2, que histricamente se conoce como sistema
operativo. El microprograma (o el control por hardware), no el sistema operativo,
ejecuta directamente las instrucciones del nivel 3 que son idnticas a las del nivel 2.
En otras palabras, algunas de las instrucciones del nivel 3 son interpretadas por el
sistema operativo y otras son interpretadas directamente por el microprograma. A
esto es a lo que nos referimos con el trmino "hbrido". Llamamos a este nivel el
nivel de mquina del sistema operativo.

Existe una discontinuidad fundamental entre los niveles 3 y 4. Los tres nive-
les ms bajos no estn diseados para que sean usados por un programador ordinario.
Su propsito primordial es la ejecucin de los intrpretes y traductores que se necesi-
tan para apoyar a los niveles superiores. Estos intrpretes y traductores son escritos
por personas llamadas programadores de sistemas que se especializan en el diseo
e implementacin de mquinas virtuales nuevas. Los niveles 4 y superiores pertene-
cen a los programadores de aplicaciones que tienen un problema que resolver.

Otro cambio que ocurre en el nivel 4 tiene que ver con el mtodo de apoyo de
los niveles superiores. Los niveles 2 y 3 siempre se interpretan. Los niveles del 4 en
adelante por lo regular se traducen, aunque no siempre es as.

Una diferencia ms entre los niveles 1, 2 y 3, por un lado, y los niveles del 4
en adelante, por el otro, es la naturaleza del lenguaje empleado. Los lenguajes de
mquina de los niveles 1, 2 y 3 son numricos. Los programas escritos en ellos cons-
tan de largas series de nmeros, lo cual es magnfico para las mquinas pero malo
para las personas. A partir del nivel 4, los lenguajes contienen palabras y abreviatu-
ras que tienen un significado para las personas.

6 Arquitectura de Ordenadores I
Introduccin a los computadores

El nivel 4, el nivel de lenguaje ensamblador, es en realidad una forma simb-


lica de uno de los lenguajes subyacentes. Este nivel ofrece a las personas un mtodo
de escribir programas para los niveles 1, 2 y 3 en una forma no tan incomprensible
como los lenguajes de mquina virtuales. Los programas en lenguaje ensamblador
primero se traducen a un lenguaje de nivel 1, 2 3 y luego se interpretan por la
mquina virtual o real apropiada. El programa que realiza la traduccin se llama
ensamblador.

El nivel 5 por lo regular consta de lenguajes diseados para ser usados por
programadores de aplicaciones que quieren resolver problemas. Tales lenguajes
suelen llamarse lenguajes de alto nivel, y hay literalmente cientos de ellos. Entre
los ms conocidos estn BASIC, C, C++, Java, LISP y Prolog. Los programas escri-
tos en estos lenguajes generalmente se traducen a lenguajes de nivel 3 4 con
traductores llamados compiladores, aunque ocasionalmente se interpretan en vez de
traducirse. Los programas en Java, por ejemplo, a menudo se interpretan.

En algunos casos, el nivel 5 consiste en un intrprete para un dominio de apli-


cacin especfico, como las matemticas simblicas. El nivel proporciona datos y
operaciones para resolver problemas de este dominio en trminos que la gente que
conoce el dominio puede entender fcilmente.

En sntesis, lo ms importante que debemos recordar es que las computadoras


se disean como una serie de niveles, cada uno construido sobre sus predecesores.
Cada nivel representa una abstraccin distinta, y contiene diferentes objetos y opera-
ciones. A1 disear y analizar las computadoras de esta manera, podemos suprimir
temporalmente los detalles que no son pertinentes y as reducir un tema complejo a
algo ms fcil de entender.

El conjunto de tipos de datos, operaciones y caractersticas de cada nivel es


su arquitectura. La arquitectura se ocupa de los aspectos que el usuario de ese nivel
puede ver. Las caractersticas que el programador ve, como la cantidad de memoria
disponible, forman parte de la arquitectura. Los aspectos de implementacin, como el
tipo de tecnologa de chips empleado para implementar la memoria, no forman parte
de la arquitectura. El estudio del diseo de las partes de un sistema de cmputo que
los programadores pueden ver se llama arquitectura de computadoras. En la prc-
tica comn, la arquitectura de las computadoras y la organizacin de las
computadoras significan prcticamente lo mismo.

Existe una discontinuidad fundamental entre los niveles 3 y 4. Los tres nive-
les ms bajos no estn diseados para que sean usados por un programador ordinario.
Su propsito primordial es la ejecucin de los intrpretes y traductores que se necesi-
tan para apoyar a los niveles superiores. Estos intrpretes y traductores son escritos
por personas llamadas programadores de sistemas que se especializan en el diseo e
implementacin de mquinas virtuales nuevas. Los niveles 4 y superiores pertenecen
a los programadores de aplicaciones que tienen un problema que resolver.

Arquitectura de Ordenadores I 7
Tema 1

Otro cambio que ocurre en el nivel 4 tiene que ver con el mtodo de apoyo de
los niveles superiores. Los niveles 2 y 3 siempre se interpretan. Los niveles del 4 en
adelante por lo regular se traducen, aunque no siempre es as.

Una diferencia ms entre los niveles 1, 2 y 3, por un lado, y los niveles del 4
en adelante, por el otro, es la naturaleza del lenguaje empleado. Los lenguajes de
mquina de los niveles 1, 2 y 3 son numricos. Los programas escritos en ellos cons-
tan de largas series de nmeros, lo cual es magnfico para las mquinas pero malo
para las personas. A partir del nivel 4, los lenguajes contienen palabras y abreviatu-
ras que tienen un significado para las personas.

El nivel 4, el nivel de lenguaje ensamblador, es en realidad una forma simb-


lica de uno de los lenguajes subyacentes. Este nivel ofrece a las personas un mtodo
de escribir programas para los niveles 1, 2 y 3 en una forma no tan incomprensible
como los lenguajes de mquina virtuales. Los programas en lenguaje ensamblador
primero se traducen a un lenguaje de nivel 1, 2 3 y luego se interpretan por la
mquina virtual o real apropiada. El programa que realiza la traduccin se llama
ensamblador.

El nivel 5 por lo regular consta de lenguajes diseados para ser usados por
programadores de aplicaciones que quieren resolver problemas. Tales lenguajes
suelen llamarse lenguajes de alto nivel, y hay literalmente cientos de ellos. Entre los
ms conocidos estn BASIC, C, C++, Java, LISP y Prolog. Los programas escritos
en estos lenguajes generalmente se traducen a lenguajes de nivel 3 4 con traducto-
res llamados compiladores, aunque ocasionalmente se interpretan en vez de
traducirse. Los programas en Java, por ejemplo, a menudo se interpretan.

En algunos casos, el nivel 5 consiste en un intrprete para un dominio de apli-


cacin especfico, como las matemticas simblicas. El nivel proporciona datos y
operaciones para resolver problemas de este dominio en trminos que la gente que
conoce el dominio puede entender fcilmente.

En sntesis, lo ms importante que debemos recordar es que las computadoras


se disean como una serie de niveles, cada uno construido sobre sus predecesores.
Cada nivel representa una abstraccin distinta, y contiene diferentes objetos y opera-
ciones. Al disear y analizar las computadoras de esta manera, podemos suprimir
temporalmente los detalles que no son pertinentes y as reducir un tema complejo a
algo ms fcil de entender.

El conjunto de tipos de datos, operaciones y caractersticas de cada nivel es


su arquitectura. La arquitectura se ocupa de los aspectos que el usuario de ese nivel
puede ver. Las caractersticas que el programador ve, como la cantidad de memoria
disponible, forman parte de la arquitectura. Los aspectos de implementacin, como el
tipo de tecnologa de chips empleado para implementar la memoria, no forman parte
de la arquitectura. El estudio del diseo de las partes de un sistema de cmputo que
los programadores pueden ver se llama arquitectura de computadoras. En la prctica
comn, la arquitectura de las computadoras y la organizacin de las computadoras
significan prcticamente lo mismo.

8 Arquitectura de Ordenadores I
Introduccin a los computadores

Arquitectura de Ordenadores I 9
Tema 2

Codificacin y Representacin de la
Informacin
La memoria es la parte de la computadora en la que se almacenan progra-
mas y datos. Algunos especialistas en ordenadores emplean el trmino almacn o
almacenamiento en lugar de memoria, aunque cada vez se extiende ms el uso de
almacenamiento para referirse a almacenamiento en disco. Sin una memoria en
la cual los procesadores puedan leer y escribir informacin, no existiran las com-
putadoras digitales de programa almacenado. Toda la informacin que queramos
almacenar en la memoria debe ser codificada o representada de tal manera que la
computadora la pueda entender.

En esta seccin veremos tcnicas sencillas para representar nmeros.


Nuestro objetivo es analizar los sistemas numricos posicionales. Sin embargo,
antes de hacerlo consideraremos otros tres sistemas numricos: marcas numricas,
sistemas de agrupamiento y el sistema de numerales romanos.

Es conveniente hacer una pausa y considerar qu son los nmeros antes de


estudiar las tcnicas especficas para su representacin. Los nmeros no son obje-
tos fsicos sino entes abstractos, aunque se emplean con frecuencia en la
descripcin de objetos fsicos. Por ejemplo, al describir un manzano puede decirse
que el rbol tiene 56 manzanas; si hay que representar un huerto de manzanos,
podra representarse cada manzano de acuerdo con el nmero de frutos del rbol.
As, al analizar la representacin de nmeros, en realidad estamos analizando la
representacin de una representacin.

Marcas numricas
Consiste en sustituir un objeto muy grande por otro que sea ms pequeo y mane-
jable que lo represente. Por ejemplo, algunos pastores de pocas antiguas
sustituan sus animales por piedras que guardaban en un zurrn. El zurrn era la
libreta de notas o memoria. Con este sencillo cdigo podan contar su ganado y
hacer operaciones sencillas con ellas.

Arquitectura de Ordenadores I 11
Tema 2

Sistemas de agrupamiento sencillos


Los pastores muy afortunados y con mucho ganado podan tener problemas por el
peso de las piedras, as que sustituyendo una determinada cantidad de ellas por
otra de un color diferente podan resolver su problema. Hoy en da se siguen
utilizando estos mtodos, un ejemplo lo tenemos en las monedas.

Numerales romanos
Suponen un tipo de agrupamiento complejo que permite contar hasta cifras muy
elevadas, pero adolece de no tener cero y tener una aritmtica muy complicada,
por no decir imposible.

Sistemas numricos posicionales


Son aquellos donde las cifras tienen un valor diferente segn la posicin que
ocupen, normalmente una cifra tiene un valor que se calcula mediante su valor
intrnseco multiplicado por la base elevada al exponente que representa su posi-
cin relativa al que se considera primer dgito.

NMEROS BINARIOS
La aritmtica que las computadoras usan difiere en ciertos aspectos de la aritmti-
ca que aplica la gente. La diferencia ms importante es que las computadoras
realizan operaciones con nmeros cuya precisin es finita y fija. Otra diferencia es
que casi todas las computadoras usan el sistema binario en lugar del decimal para
representar nmeros. Estos temas son materia del presente apndice.

NMEROS DE PRECISIN FINITA

A1 efectuar aritmtica, pocas veces pensamos en cuntos dgitos decimales se


necesitan para representar un nmero. Los fsicos pueden calcular que existen
1078 electrones en el Universo sin preocuparse por el hecho de que se requieren 79
dgitos decimales para escribir este nmero con todas sus cifras. Alguien que
calcula el valor de una funcin con lpiz y papel y que necesita una respuesta con
seis cifras significativas simplemente guarda resultados intermedios con siete,
ocho, o las que se necesiten. El problema de que el papel no tenga la anchura
suficiente para nmeros de siete dgitos nunca se presenta.

Con las computadoras las cosas son muy distintas. En casi todas las com-
putadoras, la cantidad de memoria con que se cuenta para almacenar un nmero se
lija en el momento en que se disea la mquina. Con algo de esfuerzo, el progra-
mador puede representar nmeros dos, tres o incluso ms veces ms grandes que
esta cantidad fsica, pero hacerlo no altera la naturaleza de este problema. La
naturaleza finita de la computadora nos obliga a manejar slo nmeros que se

12 Arquitectura de Ordenadores I
Codificacin y Representacin de la Informacin

puedan representar con un nmero fijo de dgitos, tales nmeros se conocen como
nmeros de precisin finita.

A fin de estudiar las propiedades de los nmeros de precisin finita, exa-


minemos el conjunto de enteros positivos que pueden representarse con tres
dgitos decimales, sin punto decimal y sin signo. Este conjunto tiene exactamente
1000 miembros: 000, 001, 002, 003, ..., 999. Con esta restriccin, es imposible
expresar cierto tipo de nmeros, como
1. Nmeros mayores que 999.
2. Nmeros negativos.
3. Fracciones.
4. Nmeros irracionales.
5. Nmeros complejos.
Una propiedad importante de la aritmtica del conjunto de todos los ente-
ros es la cerradura respecto a las operaciones de suma, resta y multiplicacin. En
otras palabras, para todo par de enteros i y j, i + j, i - j e i * j son tambin enteros.
El conjunto de enteros no est cerrado respecto a la divisin, porque existen valo-
res de i y j para los cuales i / j no puede expresarse como un entero (Ej., 7/2 y
1/0).

Los nmeros de precisin finita no estn cerrados respecto a ninguna de


estas cuatro operaciones bsicas, como se muestra enseguida usando nmeros
decimales de tres dgitos

como ejemplo:
600 + 600 = 1200 (demasiado grande)
003 - 005 = -2 (negativo)
050 * 050 = 2500 (demasiado grande)
007 / 002 = 3,5 (no es entero)
Las violaciones pueden dividirse en dos clases mutuamente exclusivas:
operaciones cuyo resultado es ms grande que el nmero ms grande del conjunto
(error de desbordamiento) o ms pequeo que el nmero ms pequeo del conjun-
to (error de subdesbordamiento), y operaciones cuyo resultado no es ni demasiado
grande ni demasiado pequeo; simplemente no es miembro del conjunto. De las
cuatro violaciones anteriores, las primeras tres son ejemplos del primer caso, y la
cuarta es un ejemplo del segundo.

Puesto que las computadoras tienen memorias finitas y por tanto forzosa-
mente realizan aritmtica con nmeros de precisin finita, los resultados de
ciertos clculos sern, desde el punto de vista de las matemticas clsicas, equivo-
cados. Un dispositivo de clculo que da una respuesta errnea aunque est
funcionando perfectamente podra parecer extrao a primera vista, pero el error es
una consecuencia lgica de su naturaleza finita. Algunas computadoras tienen
hardware especial que detecta errores de desbordamiento.

El lgebra de los nmeros de precisin finita es diferente del lgebra nor-


mal. Por ejemplo, consideremos la ley asociativa:

Arquitectura de Ordenadores I 13
Tema 2

a+(b-c)=(a+b)-c

Evaluemos ambos miembros para a = 700, b = 400, c = 300. Para calcular


el miembro izquierdo, calculemos primero (b - c), que es 100, y sumemos luego
esta cantidad a a, lo que da 800. Para calcular el miembro derecho, calculemos
primero (a + b), que produce un desbordamiento en la aritmtica finita de enteros
de tres dgitos. El resultado depende de la mquina que se est usando, pero no
ser 1100. Restar 300 a un nmero que no es 1100 no da 800. La ley asociativa no
se cumple. El orden de las operaciones es importante.

Como ejemplo adicional, consideremos la ley distributiva:

a x (b - c) = a x b - a x c

Evaluemos ambos miembros para a = 5, b = 210, c = 195. El miembro iz-


quierdo es 5 x 15, que da 75. El miembro derecho no es 75 porque a x b causa un
desbordamiento.

A juzgar por estos ejemplos, podramos concluir que si bien las computa-
doras son dispositivos de propsito general, su naturaleza finita los hace poco
apropiados para la aritmtica. Claro que esta conclusin no es correcta, pero sirve
para ilustrar la importancia de entender cmo funcionan las computadoras y qu
limitaciones tienen.

SISTEMAS NUMRICOS CON BASE

Un nmero decimal ordinario como los que todos conocemos consiste en una
serie de dgitos decimales y, posiblemente, un punto decimal. La forma general y
su interpretacin usual se muestran en la Figura 2-1. Se tom la decisin de usar
10 como base para la exponenciacin porque estamos usando nmeros decimales,
es decir, base 10, porque aprendimos a contar con los dedos de las manos. Al
tratar con computadoras, a menudo es mejor utilizar bases distintas de 10. Las
bases ms importantes son 2, 8 y 16. Los sistemas de numeracin basados en estas
bases se llaman binario, octal y hexadecimal, respectivamente.

Un sistema de numeracin base k requiere k smbolos distintos para repre-


sentar los dgitos del 0 a k1. Los nmeros decimales se representan normalmente
con los diez dgitos decimales,

0123456789
pero se podran utilizar otros smbolos cualesquiera. Como ejemplo vamos a
definir un sistema de numeracin de 9 smbolos, los cuales son de forma correla-
tiva, los siguientes,

con estos smbolos se puede escribir cualquier nmero, por ejemplo el 1234d
sera:

14 Arquitectura de Ordenadores I
Codificacin y Representacin de la Informacin

Figura 2-1. Forma general de un nmero decimal.

En contraste, los nmeros binarios no usan estos diez dgitos; todos se re-
presentan exclusivamente con los dos dgitos binarios

01

Los nmeros octales se representan con los ocho dgitos octales

01234567

En el caso de los nmeros hexadecimales, se necesitan 16 dgitos. Por tan-


to requerimos seis smbolos nuevos. La convencin es usar las letras maysculas
de la A a la F para los seis dgitos que siguen al 9. As, los nmeros hexadecima-
les se representan con los dgitos

0123456789ABCDEF

La expresin dgito binario, que se refiere al 1 al 0, dio origen al tr-


mino bit (BInary digiT). Figura 2-2 muestra el nmero decimal 2001 expresado
en forma binaria, octal y hexadecimal. El nmero 7B9 obviamente es hexadeci-
mal, porque el nmero B slo puede ocurrir en nmeros hexadecimales. Sin
embargo, el nmero 111 podra estar en cualquiera de los cuatro sistemas de
numeracin que hemos mencionado. A fin de evitar la ambigedad, se usa un
subndice de 2, 8, 10 16 para indicar la base se aada una letra como sufijo
cuando no es obvio por el contexto.

Como ejemplo de la notacin binaria, octal, decimal y hexadecimal, consi-


dere la Figura 2-3, que muestra una serie de enteros no negativos expresados en
cada uno de estos cuatro sistemas. Tal vez algn arquelogo miles de aos en el
futuro descubrir esta tabla y la usar como Piedra Roseta para descifrar los sis-
temas de numeracin de unes del siglo XX y principios del siglo XXI

Arquitectura de Ordenadores I 15
Tema 2

Figura 2-2 El nmero 2001 en binario, octal y hexadecimal.

Decimal Binario Octal Hex


0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 3 3
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10
20 10100 24 14
30 11110 36 1E
40 101000 50 28
50 110010 62 32
60 111100 74 3C
70 1000110 106 46
80 1010000 120 50
90 1011010 132 5A
100 11001000 144 64
1000 1111101000 1750 3E8
2989 101110101101 5665 BA
Figura 2-3 Nmeros decimales y sus equivalentes binarios, octales y
hexadecimales.

16 Arquitectura de Ordenadores I
Codificacin y Representacin de la Informacin

CONVERSIN DE UNA BASE A OTRA

La conversin entre nmeros octales o hexadecimales y nmeros binarios es fcil.


Para convertir un nmero binario en octal, basta con dividirlo en grupos de tres
bits, de modo que los tres bits que estn inmediatamente a la izquierda (o derecha)
del punto decimal (en este caso llamado punto binario) formen un grupo, los tres
bits que siguen a la izquierda formen otro grupo y as. Cada grupo de 3 bits se
puede convertir directamente en un solo dgito octal, del 0 al 7, segn la conver-
sin dada en las primeras ocho lneas de la Figura 2-3. Podra ser necesario
aadir uno o dos ceros a la izquierda o a la derecha para completar un grupo de 3
bits. La conversin de octal a binario es igualmente trivial. Cada dgito octal
simplemente se sustituye por el nmero binario de tres bits equivalente. La con-
versin de hexadecimal a binario es en lo esencial igual a la de octal a binario,
slo que cada dgito hexadecimal corresponde a un grupo de 4 bits, en lugar de 3
bits. La Figura 2-4 da algunos ejemplos de conversiones.

La conversin de nmeros decimales a binarios puede efectuarse de dos


formas distintas. El primer mtodo es consecuencia directa de la definicin de
nmeros binarios. Se resta al nmero la potencia de 2 menor que el nmero. Lue-
go se repite el proceso con la diferencia. Una vez que el nmero se ha
descompuesto en potencias de 2, el nmero binario puede armarse con unos en las
posiciones de bit que corresponden a potencias de 2 usadas en la descomposicin,
y ceros en las dems posiciones.

El otro mtodo (slo para enteros) consiste en dividir el nmero entre 2. El


cociente se escribe directamente debajo del nmero original y el residuo, 0 1, se
escribe junto al cociente. Luego se considera el cociente y se repite el proceso
hasta llegar a un cociente de 0. El resultado de este proceso es dos columnas de
nmeros, los cocientes y los residuos. Ahora el nmero binario puede leerse direc-
tamente de la columna de los residuos comenzando desde abajo. La Figura 2-5
muestra un ejemplo de conversin de decimal a binario.

Los enteros binarios tambin pueden convertirse a decimal de dos mane-


ras. Un mtodo consiste en obtener la sumatoria de las potencias de 2 que
corresponden a los bits 1 del nmero. Por ejemplo,
10110 es 24 + 22 + 21 = 16 + 4 + 2 = 22
En el otro mtodo, el nmero binario se escribe verticalmente, con un bit
en cada lnea, con el bit de la extrema izquierda hasta abajo. La lnea de hasta
abajo se llama lnea 1, la que est arriba, lnea 2, etc. El nmero decimal se cons-
truye en una columna paralela junto al nmero binario. Comenzamos escribiendo
un 1 en la lnea 1. La entrada de la lnea n corresponde a dos veces la entrada de la
lnea n - 1 ms el bit que est en la lnea n (0 1). La entrada de la lnea de hasta
arriba es la respuesta. En la Figura 2-6 se da un ejemplo de este mtodo de con-
versin de binario a decimal.

Arquitectura de Ordenadores I 17
Tema 2

Figura 2-4 Ejemplos de conversin de decimal a binario y de hexadecimal


a binario.

La conversin de decimal a octal y de decimal a hexadecimal puede efec-


tuarse convirtiendo primero a binario y luego al sistema deseado, o restando
potencias de 8 de 16.

NMEROS BINARIOS NEGATIVOS

Se han usado cuatro sistemas distintos para representar nmeros negativos en las
computadoras digitales en un momento u otro de la historia. El primero se llama
magnitud con signo. En este sistema el bit de la extrema izquierda es el bit de
signo (0 es + y 1 es -) y los bits restantes contienen la magnitud absoluta del
nmero.

El segundo sistema, llamado complemento a uno, tambin tiene un bit de


signo, y se usa 0 para el signo positivo y 1 para el signo negativo. Para negar un
nmero, sustituya cada 1 por 0 y cada 0 por 1. Esto tambin se hace con el bit de
signo. El complemento a uno ya es obsoleto.

El tercer sistema, llamado complemento a dos, tambin tiene un bit de


signo que es 0 para el signo positivo y 1 para el signo negativo. La negacin de un
nmero es un proceso de dos pasos. Primero, cada 1 se sustituye por un 0 y cada 0
por un 1, igual que en el complemento a 1. Luego se suma 1 al resultado. La suma
binaria es igual a la suma decimal, excepto que se genera un acarreo si la suma es
mayor que 1, no si la suma es mayor que 9. Por ejemplo, la conversin de 6 a
complemento a dos se efecta en dos pasos:
00000110 (+6)
11111001 (-6 en complemento a uno)
11111010 (-6 en complemento a dos)

18 Arquitectura de Ordenadores I
Codificacin y Representacin de la Informacin

Figura 2-5 Conversin del nmero decimal 1492 a binario por divisin
sucesiva entre 2, comenzando desde arriba y trabajando hacia abajo. Por
ejemplo, 93 dividido entre 2 da un cociente de 46 y un resto de 1, que se
escribe en la lnea de abajo.

Si hay un acarreo hacia la izquierda del bit de la extrema izquierda, se de-


secha.

Figura 2-6 Conversin del nmero binario 101110110111 a decimal por


duplicacin sucesiva, comenzando desde abajo. Cada lnea se forma du-
plicando la de abajo y sumndole el bit correspondiente. Por ejemplo, 749
es dos veces 374 ms el bit 1 que est en la misma lnea que 749.

Arquitectura de Ordenadores I 19
Tema 2

El cuarto sistema, que para nmeros de m bits se llama exceso de 2m-1,


representa un nmero almacenndolo como la suma del mismo nmero y 2m-1.
Por ejemplo, en el caso de nmeros de 8 bits, m = 8, el sistema se llama exceso de
128, y un nmero se almacena como su valor verdadero ms 128. As, -3 se con-
vierte en -3 + 128 = 125, y -3 se representa con el nmero binario de 8 bits que
corresponde a 125 (01111101). Los nmeros de -128 a +127 se transforman en los
nmeros de 0 a 255, todos los cuales pueden expresarse como un entero positivo
de 8 bits. Resulta interesante que este sistema es idntico al de complemento a dos
pero con el bit de signo invertido. La Figura 2-7 proporciona ejemplos de nme-
ros negativos en los cuatro sistemas.

Los sistemas tanto de magnitud con signo como de complemento a uno tie-
nen dos representaciones para el cero: un cero positivo y un cero negativo. Esta
situacin es indeseable. El sistema de complemento a dos no tiene este problema
porque el complemento a dos de ms cero tambin es ms cero. Sin embargo, este
sistema tiene una singularidad distinta. El patrn de bits que consiste en un 1
seguido solamente de ceros es su propio complemento. El resultado es que la
gama de nmeros positivos y negativos es asimtrica; hay un nmero negativo
que no tiene contraparte positiva.

La razn de estos problemas no es difcil de encontrar; queremos un siste-


ma de codificacin que tenga dos propiedades:
Slo una representacin para el cero.
Exactamente tantos nmeros positivos como negativos. El problema es
que cualquier conjunto de nmeros que tenga tantos nmeros positivos
como negativos y slo un cero tendr un nmero impar de miembros,
mientras que m bits dan origen a un nmero par de patrones de bits.
Siempre habr un patrn de bits de ms o de menos, sea cual sea la re-
presentacin que se escoja. Este patrn de bits extra se puede usar para
-0 o para un nmero negativo grande, o para algo ms, pero sea cual sea
el uso que se le d, siempre ser un problema.

-N -N
N N -N -N
mag. exceso en
decimal binario comp. a 1 comp. a 2
c/signo 128
1 00000001 10000001 11111110 11111111 01111111
2 00000010 10000010 11111101 11111110 01111110
3 00000011 10000011 11111100 11111101 01111101
4 00000100 10000100 11111011 11111100 01111100
5 00000101 10000101 11111010 11111011 01111011
6 00000110 10000110 11111001 11111010 01111010
7 00000111 10000111 11111000 11111001 01111001
8 00001000 10001000 11110111 11111000 01111000
9 00001001 10001001 11110110 11110111 01110111
10 00001010 10001010 11110101 11110110 01110110
20 00010100 10010100 11101011 11101100 01101100
30 00011110 10011110 11100001 11100010 01100010
40 00101000 10101000 11010111 11011000 01011000

20 Arquitectura de Ordenadores I
Codificacin y Representacin de la Informacin

-N -N
N N -N -N
mag. exceso en
decimal binario comp. a 1 comp. a 2
c/signo 128
50 00110010 10110010 11001101 11001110 01001110
60 00111100 10111100 11000011 11000100 01000100
70 01000110 11000110 10111001 10111010 00111010
80 01010000 11010000 10101111 10110000 00110000
90 01011010 11011010 10100101 10100110 00100110
100 01100100 11011010 10011011 10011100 00011100
127 01111111 11111111 10000000 10000001 00000001
128 No existe No existe No existe 10000000 00000000
Figura 2-7 Ejemplos de nmeros negativos en magnitud con signo,
complemento a 1, complemento a 2 y execso 128.

ARITMTICA BINARIA

La tabla de la suma para nmeros binarios se da en la Figura 2-8.


Sumando 0 0 1 1
Sumando +0 +1 +0 +1
Suma 0 1 1 0
Acarreo 0 0 0 1
Figura 2-8 Tabla de suma en binario

Dos nmeros binarios pueden sumarse comenzando en el bit de la extrema


derecha y sumando los bits correspondientes de los dos sumandos. Si se genera un
acarreo, se lleva una posicin a la izquierda, igual que en la aritmtica decimal.
En aritmtica de complemento a uno, un acarreo generado por la suma de los bits
de la extrema izquierda se suma al bit de la extrema derecha. Este proceso se
llama acarreo al otro extremo. En aritmtica de complemento a dos, un acarreo
generado por la suma de los bits de la extrema izquierda simplemente se desecha.
En la Figura 2-9 se muestran ejemplos de aritmtica binaria.

Figura 2-9 Suma en complemento a uno y en complemento a dos.

Si los sumandos tienen signos opuestos, no puede haber un error de des-


bordamiento. Si tienen el mismo signo y el resultado tiene el signo opuesto, ha
ocurrido un error de desbordamiento y la respuesta no es correcta. En aritmtica
tanto de complemento a uno como de complemento a dos, ocurre un desborda-
miento si y slo si el acarreo hacia el bit de signo difiere del acarreo desde el bit
de signo. Casi todas las computadoras conservan el acarreo desde el bit de signo,

Arquitectura de Ordenadores I 21
Tema 2

pero el acarreo hacia el bit de signo no es visible cuando se examina la respuesta.


Por esto casi siempre se incluye un bit de desbordamiento especial.

Conversin entre bases


Al trabajar con varios sistemas numricos, muchas veces habr que con-
vertir representaciones de un sistema numrico a otro. Por ejemplo, quizs se
tenga que convertir la representacin binaria de un nmero a su representacin
decimal, o viceversa.

La conversin de una representacin al sistema numrico decimal desde


cualquier otro sistema numrico es bastante sencilla: basta con efectuar el clculo
aritmtico que presentamos en el punto anterior.
Ejemplo 1
Podramos valernos de la misma tcnica para convertir una representacin
del sistema numrico decimal a cualquier otro sistema numrico. Sin embargo,
pare este mtodo es necesario efectuar los clculos aritmticos en el sistema nu-
mrico de destino, esta estrategia no es muy buena porque la mayora de nosotros
no tenemos mucha habilidad para hacer clculos aritmticos en otros sistemas
numricos.
Ejemplo 2
Por fortuna existe un algoritmo que nos permite usar la aritmtica decimal
para los clculos necesarios. Para la presentacin de este algoritmo comenzaremos
por un ejemplo.
Ejemplo 3
En general, usted puede efectuar una divisin entre la raz del sistema nu-
mrico de destino para determinar los dgitos del resultado. El dgito de la derecha
en la representacin es el residuo (resto) que se obtiene de la divisin del cociente
en el paso anterior entre la raz. Este proceso se repite hasta que el cociente sea
menor que la raz.
Ejemplo 4
Si necesita convertir una representacin entre dos sistemas numricos dife-
rentes, por lo regular es ms fcil convertir la representacin a decimal y luego al
sistema numrico de destino. Esta estrategia le permite usar aritmtica decimal
para todos los clculos requeridos.

Hay casos especiales en los cuales es ms sencillo realizar una conversin


directa entre sistemas numricos diferentes (sin tener que pasar por el sistema
numrico decimal). Por ejemplo en la Figura 2-10 se presenta la informacin
necesaria para la conversin directa entra las representaciones binaria y octal. Si
necesita convertir de octal a binario, basta con reemplazar cada dgito octal con el
patrn binario correspondiente que se presenta en la tabla. La conversin inversa
se lleva a cabo dividiendo la representacin binaria en grupos de tres dgitos,
comenzando por la derecha (rellenaremos de ceros por la izquierda para formar el

22 Arquitectura de Ordenadores I
Codificacin y Representacin de la Informacin

ltimo dgito octal). Despus puede reemplazar cada grupo de tres dgitos binarios
con el dgito octal correspondiente que aparece en la Figura 2-10.
Binario Octal

000 0

001 1

010 2

011 3

100 4

101 5

110 6

111 7

Figura 2-10 Binario y octal


Ejemplo 2-1

Convierta 17048 a binario.

17048 =001 111 000 1002 = 11110001002


Ejemplo 2-2

Convierta 110101000012 a octal.

110101000012 = 011 010 100 0012 = 011 010 100 0012 =32418

Utilizando reglas mnemotcnicas de este estilo, las conversiones entre bi-


nario y hexadecimal tambin son sencillas. La Figura 2-11 muestra la
informacin necesaria para estas conversiones.
Figura 2-11 Binario y hexadecimal

Binario Hexadecimal

0000 0

0001 1

0010 2

0011 3

0100 4

0101 5

0110 6

0111 7

1000 8

Arquitectura de Ordenadores I 23
Tema 2

Binario Hexadecimal

1001 9

1010 A

1011 B

1100 C

1101 D

1110 E

1111 F

Ejemplo 2-3

Convierta 1BF16 a binario.

1BF16 = 0001 1011 11112 = 0001101111112


Ejemplo 2-4

Convierta 110101000012 a hexadecimal.

110101000012 = 0110 1010 00012 = 6A116

La forma de indicar la base en la que se encuentra un nmero se indica


como un subndice a la derecha del primer dgito. Por comodidad, lo vamos a
indicar a partir de ahora con la inicial del nombre de la base a la derecha del
nmero.
Ejemplo 2-5

1BF16 = 1BFh

110101000012 = 11010100001b

17048 =1704o

Valores fraccionarios
Con los sistemas numricos posicionales tambin se pueden representar
valores fraccionarios. Los valores fraccionarios se expresan escribiendo dgitos a
la derecha de un punto decimal. El trmino punto decimal se emplea para repre-
sentar el smbolo de separacin de la parte fraccionaria en cualquier sistema
numrico, aunque est ms familiarizado con su uso en el sistema numrico deci-
mal. Los dgitos escritos despus del punto decimal representan potencias cada
vez ms pequeas de la raz, comenzando por 1. En otras palabras,

.d1d2d3...dn

Representa el valor

24 Arquitectura de Ordenadores I
Codificacin y Representacin de la Informacin

.d1r-1+ d2r-2+ d3r-3+ +dnr-n

En este punto vamos a dejar los valores fraccionarios ya que se estudiarn


con mayor profundidad en la asignatura de Arquitectura de Ordenadores II.

Memoria Primaria o Principal


Llegados a este punto tenemos que hacer una breve mencin a la memoria
para poder comprender la necesidad de codificar y representar la informacin. La
memoria digital est basada en bits.

Bits
La unidad bsica de memoria es el dgito binario, llamado bit. Un bit pue-
de contener un 0 un 1; es la unidad ms simple. Esto es as debido a que la
tecnologa actual puede diferenciar fcilmente entre dos valores de tensin o
intensidad almacenados en una clula de memoria.

Suele decirse que las computadoras emplean aritmtica binaria porque es


"eficiente". Lo que quiere decirse (aunque pocas veces se es consciente de ello) es
que es posible almacenar informacin digital distinguiendo entre diferentes valo-
res de alguna cantidad fsica continua, como un voltaje o corriente. Cuantos ms
valores sea necesario distinguir, y menor separacin haya entre valores adyacen-
tes, menos confiable ser la memoria. El sistema de numeracin binario slo
requiere distinguir entre dos valores; por tanto, es el mtodo ms confiable para
codificar informacin digital. Si no est familiarizado con los nmeros binarios,
vea el apndice A.

En la publicidad de algunas computadoras, como las mainframes IBM


grandes, se alardea de que tienen aritmtica decimal adems de binaria. Este truco
se logra utilizando 4 bits para almacenar un dgito decimal empleando un cdigo
llamado BCD (decimal codificado en binario, Binary Coded Decimal). Cuatro
bits se pueden combinar de 16 formas, diez de las cuales se usan para los dgitos
del 0 al 9; seis combinaciones no se usan. A continuacin se muestra el nmero
1944 codificado en decimal y en binario puro, empleando 16 bits en cada ejemplo:

decimal: 0001 1001 0100 0100 binario: 0000011110011000

Diecisis bits en el formato decimal pueden almacenar los nmeros del 0


al 9999, lo que da slo 10,000 combinaciones, mientras que un nmero binario
puro de 16 bits puede almacenar 65,536 combinaciones distintas. Por esto deci-
mos que el almacenamiento binario es ms eficiente.

Sin embargo, considere lo que sucedera si algn joven y brillante ingenie-


ro elctrico inventara un dispositivo electrnico altamente confiable que pudiera
almacenar directamente los dgitos del 0 al 9 dividiendo la regin de 0 a 10 voltios
en 10 intervalos. Cuatro de estos dispositivos podran almacenar cualquier nmero
decimal del 0 al 9999, y podran formar 10,000 combinaciones. Tambin podran

Arquitectura de Ordenadores I 25
Tema 2

usarse cuatro de esos dispositivos para almacenar nmeros binarios, pero slo
empleando 0 y 1. En tal caso, slo podran almacenar 16 combinaciones. Con
tales dispositivos, el sistema decimal obviamente es ms eficiente.

Direcciones de memoria

Las memorias consisten en varias celdas (o localidades), cada una de las


cuales puede almacenar un elemento de informacin. Cada celda tiene un nmero,
su direccin, con el cual los programas pueden referirse a ella. Si una memoria
tiene n celdas, tendrn las direcciones 0 a n - 1. Todas las celdas de una memoria
contienen el mismo nmero de bits. Si una celda consta de k bits, podr contener
cualquiera de 2k combinaciones de bits distintas. En Figura 2-12 se muestran tres
diferentes organizaciones para una memoria de 96 bits. Observe que celdas adya-
centes tienen direcciones consecutivas (por definicin).

Las computadoras que emplean el sistema de numeracin binario (inclui-


das las notaciones octal y hexadecimal para nmeros binarios) expresan las
direcciones de memoria como nmeros binarios. Si una direccin tiene m bits, el
nmero mximo de celdas direccionables es 2m. Por ejemplo, una direccin em-
pleada para referirse a la memoria de la Figura 2-12(a) necesita al menos 4 bits
para expresar todos los nmeros del 0 al 11. En cambio, basta una direccin de 3
bits para las Figura 2-12(b) y (c). El nmero de bits de la direccin determina el
nmero mximo de celdas direccionables directamente en la memoria y es inde-
pendiente del nmero de bits por celda. Una memoria que tiene 212 celdas de 8
bits cada una, y una que tiene 212 celdas de 64 bits cada una, necesitan ambas
direcciones de 12 bits.

En la Figura 2-13 se da el nmero de bits por celda de algunas computa-


doras que se han vendido comercialmente.

La importancia de la celda es que es la unidad direccionable ms pequea.


En aos recientes casi todos los fabricantes de computadoras han adoptado como
estndar una celda de 8 bits, que recibe el nombre de byte. Los bytes se agrupan
en palabras. Una computadora con palabras de 32 bits tiene 4 bytes/palabra,
mientras que una con palabras de 64 bits tiene 8 bytes/palabra. La importancia de
las palabras es que casi todas las instrucciones operan con palabras enteras; por
ejemplo, suman dos palabras. As, una mquina de 32 bits tiene registros de 32
bits e instrucciones para manipular palabras de 32 bits, mientras que una mquina
de 64 bits tiene registros de 64 bits e instrucciones para transferir, sumar, restar y
manipular de otras maneras palabras de 64 bits.

Ordenamiento de bytes

Los bytes de una palabra pueden numerarse de izquierda a derecha o de


derecha a izquierda. A primera vista podra parecer que esta decisin carece de
importancia pero, como veremos en breve, tiene implicaciones importantes. En la
Figura 2-14(a) se muestra parte de la memoria de una computadora de 32 bits
cuyos bytes se numeran de izquierda a derecha, como la SPARC o las grandes

26 Arquitectura de Ordenadores I
Codificacin y Representacin de la Informacin

mainframes de IBM. En la Figura 2-14(b) se aprecia la representacin anloga de


una computadora de 32 bits que usa numeracin de derecha a izquierda, como la
familia Intel. El primer sistema, en el que la numeracin comienza por el extremo
"grande" (es decir, de orden alto), se llama computadora big endian, en contraste
con la little endian de la Figura 2-14(b). Estos trminos provienen de la obra Los
viajes de Gulliver, donde Jonathan Swift haca una stira de los polticos que
declararon una guerra a causa de su disputa respecto a si los huevos deban rom-
perse por el extremo ancho (big end, en la obra original en ingls) o por el
extremo angosto (little end). Los trminos se usaron por primera vez aplicados a
la arquitectura de computadoras en un delicioso artculo escrito por Cohen (1981).

Figura 2-12 Tres formas de organizar una memoria de 96 bits.

Computadora Bits / celda


Burroughs B1700 1
IBM PC 8
DEC PDP-8 12
IBM 1130 16
DEC PDP-15 18
XDS 940 24
Electrologica X8 27
XDS Sigma 9 32
Honeywell 6180 36
CDC 3600 48
CDC Cyber 60
Figura 2-13 Tamao de memoria de algunas computadoras comperciales.

Es importante entender que tanto en los sistemas big endian como en los
little endian, un entero de 32 bits con el valor numrico de, digamos, 6, se repre-
senta con los bits 110 en los tres bits de la extrema derecha (de orden bajo) de una
palabra, con ceros en los 29 bits de la izquierda. En el esquema big endian, los
bits 110 estn en el byte 3 ( 7, u 11, etc.), mientras que en el esquema little en-

Arquitectura de Ordenadores I 27
Tema 2

dian estn en el byte 0 (o 4, u 8, etc.). En ambos casos, la palabra que contiene


este entero tiene la direccin 0.

Figura 2-14 (a) Memoria big endian. (b) Memoria little endian.

Si las computadoras slo almacenaran enteros, no habra problemas, pero


muchas aplicaciones requieren una mezcla de enteros, cadenas de caracteres y
otros tipos de datos. Considere, por ejemplo, un sencillo registro de personal que
consiste en una cadena (nombre de empleado) y dos enteros (edad y nmero de
departamento). La cadena termina con uno o ms bytes 0 para rellenar una pala-
bra. La representacin big endian para Jim Smith, de 21 aos, en e1 departamento
260 (1 x 256 + 4 = 260) se muestra en la Figura 2-15(a); la little endian, en
Figura 2-15(b).

Ambas representaciones son excelentes y son congruentes internamente.


Los problemas comienzan cuando una de las mquinas trata de enviar el registro a
la otra por una red. Suponemos que la big endian enva el registro a la little endian
byte por byte, comenzando con el ate 0 y terminando con el byte 19. (Seremos
optimistas y supondremos que los bits de los bytes se invierten durante la transmi-
sin, pues ya tenemos suficientes problemas.) As, el byte 0 la big endian se
coloca en el byte 0 de la memoria de la little endian, y as sucesivamente, como se
muestra en la Figura 2-15(c).

Cuando la little endian trata de imprimir el nombre, no hay problema, pero


la edad aparece como 21 x 224, y el departamento es igualmente absurdo. Esta
situacin surge porque la transmisin invirti el orden de los caracteres de una
palabra, como debera, pero tambin invirti los bytes de los enteros, cosa que no
debi hacer.

Una solucin obvia es hacer que el software invierta los bytes de una pala-
bra despus de efectuar el copiado. Esto conduce a la Figura 2-15(d) y hace que
los dos enteros queden bien pero convierte la cadena en " MUTIMS" "H". Esta
inversin de la cadena ocurre porque al leerla, la computadora primero lee el byte
0 (un espacio), luego el byte 1 (M), etctera.

No existe una solucin sencilla. Un remedio que funciona, pero es


ineficiente, es incluir una cabecera frente a cada dato que indique el tipo de datos
que sigue (cadena, entero u otro) 4u longitud tiene. Esto permite al receptor
efectuar slo las conversiones que sean necesarias. En todo caso, es evidente que
la falta de un estndar para el ordenamiento de los bytes genera problemas

28 Arquitectura de Ordenadores I
Codificacin y Representacin de la Informacin

de un estndar para el ordenamiento de los bytes genera problemas innecesarios al


intercambiar datos entre diferentes mquinas.

Figura 2-15 (a) Registro de personal en una mquina big endian. (b) El
mismo registro en una mquina little endian. (c) Resultado de transferir el
registro de una big endian a una little endian. (d) Resultado de
intercambiar los bytes de (c).

Cdigos para la correccin de errores

Las memorias de las computadoras pueden cometer errores ocasionales a causa de


picos de voltaje en la lnea de alimentacin u otras causas. Para protegerse contra
tales errores, algunas memorias emplean cdigos para deteccin o correccin de
errores. Cuando se usan esos cdigos, se aaden bits extra de una forma especial a
cada palabra de la memoria. Cuando se lee una palabra de la memoria, se verifi-
can los bits adicionales para ver si ha ocurrido algn error.

Para entender cmo pueden manejarse los errores, es necesario examinar


de cerca la naturaleza de los mismos. Supongamos que una palabra de memoria
consiste en m bits de datos a los cuales aadiremos r bits redundantes, o de verifi-
cacin. Sea la longitud total n (es decir, n = m + r). Una unidad de n bits que
contiene m bits de datos y r bits de verificacin se conoce como palabra de cdi-
go de n bits.

Dadas dos palabras de cdigo cualesquiera, digamos 10001001 y


10110001, es posible determinar cuntos bits correspondientes difieren. En este
caso, tres bits difieren. Para determinar cuntos bits difieren basta calcular el OR
EXCLUSIVO boleado bit por bit de las dos palabras de cdigo, y contar el nme-
ro de bits 1 en el resultado. El nmero de posiciones de bit en las que dos palabras
de cdigo difieren se denomina distancia de Hamming (Hamming, 1950). La
importancia de esta cifra es que si dos palabras de cdigo estn separadas por una
distancia de Hamming d, se requieren d errores de un solo bit para convertir una
palabra en la otra. Por ejemplo, las palabras de cdigo 11110001 y 00110000
estn separadas por una distancia de Hamming de 3 porque se requieren tres
errores de un solo bit para convertir una en la otra.

En el caso de una palabra de memoria de m bits, estn permitidos los 2'" pa-
trones de bits, pero a causa de la forma en que se calculan los bits de verificacin,
slo 2' de las 2" palabras de cdigo son vlidas. Si al leer la memoria se obtiene una
palabra de cdigo no vlida, la computadora sabr que ocurri un error de memo-

Arquitectura de Ordenadores I 29
Tema 2

ria. Si se conoce el algoritmo para calcular los bits de verificacin, es posible


construir una lista completa de las palabras de cdigo permitidas, y encontrar en
esta lista las dos palabras de cdigo cuya distancia de Hamming es mnima. Esta
distancia es la distancia de Hamming de todo el cdigo.

Las propiedades de deteccin y correccin de errores de un cdigo depen-


den de su distancia de Hamming. Para detectar d errores de un solo bit se necesita
un cdigo con una distancia de d + 1, porque con un cdigo as no es posible que
d errores de un solo bit conviertan una palabra de cdigo vlida en otra palabra de
cdigo vlida. De forma similar, para corregir d errores de un solo bit se requiere
un cdigo con una distancia 2d + 1 porque as las palabras de cdigo vlidas estn
tan lejanas unas de otras que aun con d cambios la palabra de cdigo original est
ms cerca de la palabra con errores que cualquier otra palabra de cdigo vlida, y
es posible determinarla de forma inequvoca.

Como ejemplo sencillo de cdigo con deteccin de errores, considere un


cdigo en el que se anexa un solo bit de paridad a los datos. El bit de paridad se
escoge de modo que el nmero de bits 1 en la palabra de cdigo sea siempre par
(o impar). Un cdigo as tiene una distancia de 2, ya que cualquier error de un
solo bit produce una palabra de cdigo con la paridad equivocada. En otras pala-
bras, se requieren dos errores de un solo bit para pasar de una a otra palabra de
cdigo vlida, y el cdigo puede servir para detectar errores sencillos. Siempre
que se lee de la memoria una palabra con la paridad incorrecta, se indica una
condicin de error. El programa no puede continuar, pero al menos no se calculan
resultados incorrectos.

Como ejemplo sencillo de cdigo con correccin de errores, considere un


cdigo que slo tiene cuatro palabras de cdigo vlidas:

0000000000, 0000011111, 1111100000 y 1111111111

Este cdigo tiene una distancia de 5, lo que implica que puede corregir
errores dobles. Si llega la palabra de cdigo 0000000111, el receptor sabe que la
palabra original tiene que haber sido 0000011111 (si no hubo ms de dos errores).
Por otra parte, si un triple error convierte 0000000000 en 0000000111, el error no
podr corregirse.

Imagine que quiere disear un cdigo con m bits de datos y r bits de veri-
ficacin que permita corregir todos los errores de un solo bit. Cada una de las 2m
palabras de memoria vlidas tiene n palabras de cdigo no vlidas a una distancia
de 1. stas se forman invirtiendo por turno cada uno de los n bits de la palabra de
cdigo de n bits que se forma a partir de la palabra de memoria vlida. As, cada
una de las 2m palabras de memoria vlidas requiere n + 1 patrones de bits dedica-
dos a ella (para los n posibles errores y el patrn correcto). Puesto que el nmero
total de patrones de bits es 2n, necesitaremos que (n + 1)2m <= 2n. Si usamos
n = m + r, este requisito se convierte en (m + r + 1) <= 2r. Dado m, esto fija un
lmite inferior para el nmero de bits de verificacin que se requieren para corre-

30 Arquitectura de Ordenadores I
Codificacin y Representacin de la Informacin

gir errores sencillos. En la Figura 2-16 se muestra el nmero de bits de verifica-


cin necesarios para diversos tamaos de palabra de memoria.
Tamao de Bits de Tamao total Porcentaje de gasto extra
Palabra verificacin
8 4 12 50
16 5 21 31
32 6 38 19
64 7 71 11
128 8 136 6
256 9 265 4
512 10 522 2
Figura 2-16 Nmero de bits de verificacin para un cdigo que puede co-
rregir un solo error.

Este lmite inferior terico puede lograrse empleando un mtodo ideado


por Richard Hamming (1950). Antes de examinar el algoritmo de Hamming,
veamos una sencilla representacin grfica que ilustra claramente la idea de un
cdigo de correccin de errores para palabras de 4 bits. El diagrama de Venn de la
Figura 2-17(a) contiene tres crculos, A, B y C, que juntos forman siete regiones.
Como ejemplo, codifiquemos la palabra de memoria de 4 bits 1100 en las regio-
nes AB, ABC, AC y BC, un bit por regin (en orden alfabtico). Esta codificacin
se muestra en la Figura 2-17(a).

Ahora aadimos un bit de paridad a cada una de las tres regiones vacas a
modo de producir una paridad par, como se ilustra en la Figura 2-17(b). Por
definicin, la suma de los bits de cada uno de los tres crculos, A, B y C, es ahora
un nmero par. En el crculo A tenemos los cuatro nmeros 0, 0, 1 y 1, que suman
2, un nmero par. En el crculo B, los nmeros son 1, 1, 0 y 0, que tambin suman
2, un nmero par. Por ltimo, en el crculo C tenemos la misma situacin. En este
ejemplo da la casualidad que todos los crculos son iguales, pero en otros ejem-
plos podra haber tambin sumas de 0 y 4. Esta figura corresponde a una palabra
de cdigo con 4 bits de datos y 3 bits de paridad.

Supongamos ahora que el bit de la regin AC es errneo y cambia de 0 a 1,


como se muestra en la Figura 2-17(c). La computadora detecta que los crculos A
y C tienen la paridad equivocada (impar). El nico cambio de un solo bit que
corrige la situacin es restaurar AC a 0, lo que corrige el error. De este modo, la
computadora puede reparar errores de memoria de un solo bit automticamente.

Veamos ahora cmo podemos usar el algoritmo de Hamming para cons-


truir cdigos con correccin de errores para palabras de memoria de cualquier
tamao. En un cdigo de Hamming, se aaden r bits de paridad a una palabra de
m bits para formar una nueva palabra de m + r bits. Los bits se numeran a partir
de 1, no de 0, siendo el bit 1 el de la extrema izquierda (bit de orden alto). Todos
los bits cuyo nmero es una potencia de 2 son bits de paridad; los dems se utili-
zan para datos. Por ejemplo, con palabras de 16 bits se aaden cinco bits de
paridad. Los bits 1, 2, 4, 8 y 16 son bits de paridad, y todos los dems son bits de
datos. En total, la palabra de memoria tiene 21 bits (16 de datos, 5 de paridad).
Usaremos (arbitrariamente) paridad par en este ejemplo.

Arquitectura de Ordenadores I 31
Tema 2

Cada bit de paridad examina posiciones de bit especficas; el bit de paridad


se ajusta de modo que el nmero total de unos en las posiciones verificadas sea
par. Las posiciones de bit que verifica cada bit de paridad son

Bit 1 verifica los bits 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21.

Bit 2 verifica los bits 2, 3, 6, 7, 10, 11, 14, 15, 18, 19.

Bit 4 verifica los bits 4, 5, 6, 7, 12, 13, 14, 15, 20, 21.

Bit 8 verifica los bits 8, 9, 10, 11, 12, 13, 14, 15.

Bit 16 verifica los bits 16, 17, 18, 19, 20, 21.

Figura 2-17 (a) Codificacin de 1000. (b) Adicin de paridad par. (c) Error
en AC.

En general, el bit b es verificado por los bits b1, b2, ..., bn. tales que
b1 + b2+ ... + bn = b. Por ejemplo, el bit 5 es verificado por los bits 1 y 4 porque
1 + 4 = 5. El bit 6 es verificado por los bits 2 y 4 porque 2 + 4 = 6, etctera.

La Figura 2-18 muestra la construccin de un cdigo de Hamming para la


palabra de memoria de 16 bits 1111000010101110. La palabra de cdigo de 21
bits es 001011100000101101110. Para ver cmo funciona la correccin de erro-
res, consideremos qu sucedera si el bit 5 se invirtiera por un pico en la
alimentacin elctrica. La nueva palabra de cdigo sera
001001100000101101110 en lugar de 001011100000101101110. Verificamos los
cinco bits de paridad, con los siguientes resultados:
Paridad del bit 1 incorrecta (1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 contienen cinco
unos).
Paridad del bit 2 correcta (2, 3, 6, 7, 10, 11, 14, 15, 18, 19 contienen seis unos).
Paridad del bit 4 incorrecta (4, 5, 6, 7, 12, 13, 14, 15, 20, 21 contienen cinco
unos).
Paridad del bit 8 correcta (8, 9, 10, 11, 12, 13, 14, 15 contienen dos unos).
Paridad del bit 16 correcta (16, 17, 18, 19, 20, 21 contienen cuatro unos).
El nmero total de unos de los bits 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 y 21 de-
bera ser par, porque estamos usando paridad par. El bit incorrecto debe ser uno
de los bits verificados por el bit de paridad 1: el bit 1, 3, 5, 7, 9, 11, 13, 15, 17, 19
21. El bit de paridad 4 es incorrecto, lo que implica que uno de los bits 4, 5, 6, 7,
12, 13, 14, 15, 20 21 es incorrecto. El error debe estar en uno de los bits de

32 Arquitectura de Ordenadores I
Codificacin y Representacin de la Informacin

ambas listas, o sea 5, 7, 13, 15 0 21. Sin embargo, el bit 2 es correcto, lo que elimi-
na al 7 y al 15. As mismo, el bit 8 es correcto, lo que elimina al 13. Por ltimo, el
bit 16 es correcto, lo que elimina al 21. El nico bit que queda es el 5, que es el
que tuvo el error. Puesto que se ley como 1, debera ser 0. Es as como se corri-
gen los errores.

Un mtodo sencillo para encontrar el bit incorrecto consiste en calcular


primero todos los bits de paridad. Si todos son correctos, no hubo error (o hubo
ms de uno). Luego se suman todos los bits de paridad incorrectos, contando 1
por el bit 1, 2 por el bit 2, 4 por el bit 4, etc. La suma que se obtiene es la posicin
del bit incorrecto. Por ejemplo, si los bits de paridad 1 y 4 son incorrectos pero los
2, 8 y 16 son correctos, el bit 5 (1 + 4) se habr invertido.

Figura 2-18 Construccin del cdigo Hamming para la palabra de memo-


ria 111100001010110 aadiendo cinco bits de verificacin a los 16 bits de
datos.

Codificacin de los caracteres


Se utiliza el cdigo ASCII. Este cdigo utiliza 7 bits para representar cada
carcter. Se hace una correlacin entre los nmeros y las letras de tal manera que
al ordenar los valores de los cdigos ASCII se haga una ordenacin de los dgitos
y las letras en sentido ascendente.

Arquitectura de Ordenadores I 33
Tema 2

34 Arquitectura de Ordenadores I
Tema 3

Aritmtica del Procesador


Comenzamos nuestro estudio de la CPU con la unidad aritmtico lgica (ALU).
Tras una breve introduccin a la ALU, el captulo se centra en el aspecto ms
complejo de la misma: la aritmtica del computador. Las funciones lgicas que
forman parte de la ALU se describen ms adelante, y la implementacin de fun-
ciones lgicas y aritmticas simples mediante lgica digital no entran dentro del
mbito de este libro.
La aritmtica de un computador es realizada normalmente con dos tipos
de nmeros muy diferentes: enteros y en punto flotante. En ambos casos, la repre-
sentacin elegida es un aspecto crucial tratado en primer lugar, seguido de una
discusin sobre las operaciones aritmticas.

UNIDAD ARITMTICO LGICA


La Unidad Aritmtico Lgica (ALU) es la parte del computador que realiza real-
mente las operaciones aritmticas y lgicas con los datos. El resto de los
elementos del computador unidad de control, registros, memoria, E/S estn
principalmente para suministrar datos a la ALU, a fin de que sta los procese, y
para recuperar los resultados. Con la ALU llegamos al estudio de lo que puede
considerarse el ncleo o esencia del computador.

Una unidad aritmtico lgica y, en realidad, todos los componentes elec-


trnicos del computador, se basan en el uso de dispositivos lgicos digitales
sencillos que pueden almacenar dgitos binarios y realizar operaciones lgicas
booleanas sencillas. El apndice de este texto explora las implementaciones lgi-
cas digitales para el lector interesado.

La Figura 3-1 indica, en trminos muy, generales, corno se interconecta la


ALU con el resto de la CPU. Los datos se presentan a la ALU en registros, y en
registros se almacenan los resultados de las operaciones. Estos registros son posi-
ciones de memoria temporal internas a la CPU que estn conectados a la ALU.
La ALU tambin activar indicadores ("flags") como resultados de operaciones.
Por ejemplo, un indicador de desbordamiento se pondr a 1 si el resultado de una
operacin excede la longitud del registro en donde este debe almacenarse. Los
valores de los indicadores se almacenan tambin en registros dentro de la CPU.

Arquitectura de Ordenadores I 35
Tema 3

La unidad de control proporciona las seales que gobiernan el funcionamiento de


la ALU y la transferencia de datos dentro y fuera de la ALU.

Figura 3-1 Entradas y salidas de la ALU

REPRESENTACIN DE ENTEROS
En el sistema de numeracin binaria (vase el tema 2), cualquier nmero puede
representarse con slo dgitos 1 y 0, el signo menos, y el punto (o coma). Por
ejemplo:

1101.01012 = 11.312510

Sin embargo, al objeto de ser almacenados y procesados por un computa-


dor, no se tiene la ventaja del signo y las comas. Para representar los nmeros slo
pueden utilizarse dgitos 0 y 1. Si utilizramos slo enteros no negativos, su re-
presentacin sera inmediata. Una palabra de 8 bits podra utilizarse para
representar nmeros desde 0 hasta 255. Por ejemplo:
00000000 = 0
00000001 = 1
00101001 = 41
10000000 = 128
11111111 = 255
En general, si una secuencia de n dgitos binarios an-1an-2a1a0 es interpreta-
da como un entero sin signo A, su valor es

Representacin en signo y magnitud


El uso de enteros sin signo es insuficiente en muchos casos en los que se necesita
representar enteros tanto positivos como negativos. Hay varias convenciones
alternativas que podramos utilizar con tal fin. Todas ellas implican tratar el bit
ms significativo (el ms a la izquierda) de la palabra corno un bit de signo: Si
dicho bit es 0 el nmero es positivo, y si es 1, el nmero es negativo.

La forma ms sencilla de representacin que emplea un bit de signo es la


denominada representacin signo-magnitud. En una palabra de n bits, los n-1 bits
de la derecha representan la magnitud del entero. Por ejemplo:

36 Arquitectura de Ordenadores I
Aritmtica del Procesador

+ 18 = 00010010
-18 = 10010010 (signo-magnitud)
El caso general puede expresarse como sigue:

La representacin signo-magnitud presenta varias limitaciones. Una de


ellas es que la suma y la resta requieren tener en cuenta tanto los signos de los
nmeros como sus magnitudes relativas para llevar a cabo la operacin en cues-
tin. Esto debiera quedar claro con la discusin que se ver ms adelante. Otra
limitacin es que hay dos representaciones del nmero 0:
+010 = 00000000
010 = 10000000 (signo-magnitud)

Representacin en complemento a la base1


La representacin en complemento a base en el caso binario, 2 se desarroll
para superar los dos inconvenientes principales de la representacin sig-
no-magnitud: la suma y la resta en signo-magnitud son ineficientes, y hay dos
representaciones para el cero.

Al igual que la signo-magnitud, la representacin en complemento a dos


usa el bit ms significativo como bit de signo, facilitando la comprobacin de si el
entero es positivo o negativo. Difiere de la representacin signo-magnitud en la
forma de interpretar los bits restantes.

La representacin en complemento a dos se entiende mejor definindola


en trminos de una suma ponderada de bits, como hicimos antes para las represen-
taciones sin signo y en signo-magnitud. Consideremos un entero de n bits, A,
representado en complemento a dos. Si A es positivo, el bit de signo, an-1, es cero.
Los restantes bits representan la magnitud del nmero de la misma forma que en
la representacin signo-magnitud; es decir:

El nmero cero se identifica como positivo y tiene por tanto un bit de sig-
no 0 y una magnitud de todo ceros. Podemos ver que el rango de los enteros
positivos que pueden representarse es desde 0 (todos los bits de magnitud son 0)

1
La representacin en complemento a la base de esta seccin se basa en una aproximacin sugerida por G. Dattatreya de la
Universidad de Texas (ver [DATT931)

Arquitectura de Ordenadores I 37
Tema 3

hasta 2n-1 (todos los bits de magnitud a 1). Cualquier nmero mayor requerira
ms bits.

Ahora, para un nmero negativo A, el bit de signo, an-1 es 1. Los n-1 bits
restantes pueden tomar cualquiera de las 2n combinaciones. Por tanto, el rango de
los enteros negativos que pueden representarse es desde 1 hasta 2n-1. Resulta
que una asignacin conveniente de valores es hacer que los bits an-1an-2...a1a0 sean
iguales al nmero positivo 2n-1 + A, segn se obtiene con:

as pues

Ya que el bit de signo es 1, podemos escribir la expresin de los nmeros


negativos como:

(3-1)

En el caso de los enteros positivos, an-1 = 0, de manera que 2n-1an = 0. Por


tanto, la ecuacin 3-1 define la representacin en complemento a dos tanto para
los nmeros positivos como los negativos.

La Figura 3-2 compara, para enteros de 4 bits, las representaciones en sig-


no-magnitud y en complemento a dos. La representacin en complemento a dos,
aunque nos resulte embarazosa, veremos que facilita las operaciones aritmticas
ms importantes, la suma y la resta. Por esta razn, es utilizada casi universalmen-
te como representacin de los enteros en procesadores.
Representacin Representacin Representacin
Decimal Signo-Magnitud Complemento a dos
+7 0111 0111
+6 0110 0110
+5 0101 0101
+4 0100 0100
+3 0011 0011
+2 0010 0010
+1 0001 0001
+0 0000 0000
-0 1000 -
-1 1001 1111
-2 1010 1110
-3 1011 1101
-4 1100 1100
-5 1101 1011
-6 1110 1010
-7 1111 1001
-8 - 1000
Figura 3-2 Comparacin de las representaciones en signo-magnitud y en
complemento a dos de los enteros de 4 bits

38 Arquitectura de Ordenadores I
Aritmtica del Procesador

-128 64 32 16 8 4 2 1

(a) Caja de valores de 8 bits en complemento a


dos

-128 64 32 16 8 4 2 1

1 0 0 0 0 0 1 1

-128 +2 +1 =125

(b) Conversin a decimal del nmero binario


10000011

-128 64 32 16 8 4 2 1

1 0 0 0 1 0 0 0

-128 +8 =120

(c) Conversin a binario del nmero decimal


120
Figura 3-3 Utilizacin de la caja de valores para convertir entre binario en
complemento a dos y decimal.

Una ilustracin til de la naturaleza de la representacin en complemento


a dos es una "caja" de valores, en la que el valor ms a la derecha en la caja es 1
(20), y cada posicin hacia la izquierda tiene un valor doble a sumar, hasta la
posicin ms a la izquierda, que es a restar. Como se puede ver en Figura 3-3a, el
nmero en complemento a dos ms negativo que puede representarse es 2n-1; si
cualquiera de los bits aparte del de signo es 1, este aade una cantidad positiva al
nmero. Tambin, est claro que un nmero negativo debe tener un 1 en la posi-
cin ms a la izquierda, y un nmero positivo tendr un cero en dicha posicin.
Por tanto, el nmero positivo mayor es un 0 seguido de todo unos, que es igual a
2n-11.

El resto de la Figura 3-3 ilustra el uso de la caja de valores para convertir


de complemento a dos a decimal, y de decimal a complemento a dos.

Conversin entre longitudes de bits diferentes


Es a veces deseable tomar un entero de n bits y almacenarlo en m bits, siendo
m>n. Esto se resuelve fcilmente en la notacin signo-magnitud: simplemente
trasladando el bit de signo hasta la nueva posicin ms a la izquierda y rellenar
con ceros. Por ejemplo:

Arquitectura de Ordenadores I 39
Tema 3

+18 = 00010010 (signo-magnitud, 8 bits)


+18 = 0000000000010010 (signo-magnitud, 16 bits)
-18 = 10010010 (signo-magnitud, 8 bits)
-18 = 1000000000010010 (signo-magnitud, 16 bits)
Este procedimiento no funciona con los enteros negativos en complemento
a dos. Utilizando el mismo ejemplo:
+18 = 00010010 (complemento a dos, 8 bits)
+18 = 0000000000010010 (complemento a dos, 16 bits)
-18 = 11101110 (complemento a dos, 8 bits)
-32.658 = 1000000001101110 (complemento a dos, 16 bits)
En su lugar, la regla para los enteros en complemento a dos es trasladar el
bit de signo a la nueva posicin ms a la izquierda y completar copiando el bit de
signo. Para nmeros positivos, rellenar con ceros, y para negativos con unos. As
pues, se tiene:
-18 = 11101110 (complemento a dos, 8 bits)
-18 = 1111111111101110 (complemento a dos, 16 bits)
Para ver que esta regla funciona, consideremos de nuevo una secuencia de
n dgitos binarios an-1an-2...a1a0 interpretada como entero en complemento a dos
A, tal que su valor es:

Si A es positivo, la regla claramente funciona. Ahora, supongamos que A


es negativo y que queremos construir una representacin de m bits, con m > n.
Entonces:

Los dos valores deben ser iguales:

40 Arquitectura de Ordenadores I
Aritmtica del Procesador

Al pasar de la primera a la segunda ecuacin, se requiere que los n1 bits


menos significativos no cambien entre las dos representaciones. Entonces, llega-
mos a la ecuacin final, que slo es cierta si todos los bits desde la posicin n1
hasta la m2 son 1. En consecuencia la regla funciona.

Representacin en punto fijo


Finalmente, mencionamos que la representacin tratada en esta seccin se deno-
mina a veces de punto fijo. Esto es porque el punto de la base (punto binario) est
fijo y se supone que a la derecha del bit menos significativo. El programador
puede utilizar la misma representacin para fracciones binarias escalando los
nmeros de manera que el punto binario est implcitamente en alguna otra posi-
cin.

ARITMTICA CON ENTEROS


Esta seccin examina funciones aritmticas comunes con nmeros enteros repre-
sentados en complemento a dos.

Negacin
En la representacin signo-magnitud, la regla para obtener el opuesto de un entero
es sencilla: invertir el bit de signo. En la notacin complemento a dos, la negacin
de un entero puede realizarse siguiendo las siguientes reglas:
1. Obtener el complemento booleano de cada bit del entero (incluyendo el
bit de signo).
2. Tratando el resultado como un entero binario sin signo, sumarle 1.
Por ejemplo:

18 = 00010010 (complemento a dos)

Arquitectura de Ordenadores I 41
Tema 3

complemento bit a bit = 11101101


+ 1
11101110 = -18
Como es de esperar, el opuesto del opuesto es el propio nmero:

-18 = 11101110 (complemento a dos)


complemento bit a bit = 00010001
+ 1
00010010 = 18
Podemos demostrar la validez de la operacin que acabamos de describir
utilizando la definicin de representacin en complemento a dos dada en la ecua-
cin (8-1). De nuevo interpretamos una secuencia de n dgitos binarios an-1an-
2...a1a0 como un entero en complemento a dos A, tal que su valor es:

Ahora se construye el complemento bit a bit, an-1an-2...a1a0, y tratndolo


como un entero sin signo, se le suma 1. Finalmente, se interpreta la secuencia de n
bits resultante como un entero en complemento a dos B, tal que su valor es:

Ahora queremos que A = B, lo que significa que A + B = 0. Esto se com-


prueba fcilmente:

El desarrollo anterior supone que queremos tratar el complemento de A bit


a bit como entero sin signo para sumarle 1, y entonces tratar el resultado como un
entero en complemento a dos. Hay dos casos especiales a tener en cuenta. En
primer lugar, consideremos que A = 0. En este caso, para una representacin con
8 bits,
0 = 00000000 (complemento a dos)
complemento bit a bit= 11111111
+ 1
1 00000000 = 0
Hay un desbordamiento que se ignora. El resultado es que la negacin del
0 es 0, como debiera ser.

42 Arquitectura de Ordenadores I
Aritmtica del Procesador

El segundo caso especial es ms problemtico. Si generamos el opuesto de


la combinacin de bits consistente en un 1 seguido de n-1 ceros, se obtiene de
nuevo el mismo nmero. Por ejemplo, para palabras de 8 bits,
-128 = 10000000 (complemento a dos)
complemento bit a bit= 01111111
+ 1
10000000 = -128
Esta anomala debe evitarse. El nmero de combinaciones diferentes en
una palabra de 8 bits es 2n. Con ellas se representan enteros positivos, negativos y
el 0. Cuando se representa el mismo nmero de enteros positivos que de negativos
(en signo-magnitud) resultan dos representaciones distintas del 0. Si hay slo una
representacin del 0 (en complemento a dos), entonces debe haber un nmero
desigual de nmeros positivos que de negativos representados. En el caso del
complemento a dos, hay una representacin de n bits para el 2n-1, pero no para el
2n-1.

Figura 3-4 Suma de nmeros en la representacin complemento a dos

La suma en complemento a dos se ilustra en la Figura 3-4. Los primeros


cuatro ejemplos ilustran operaciones correctas. Si el resultado de la operacin es
positivo, se obtiene un nmero positivo en la notacin binaria ordinaria. Si el
resultado de la operacin es negativo, conseguimos un nmero negativo en forma
de complemento a dos. Obsrvese que, en algunos casos, hay un bit de acarreo
ms all del final de la palabra. Este se ignora.

En cualquier suma, el resultado puede que sea mayor que el permitido por
la longitud de palabra que est utilizando. Esta condicin se denomina desborda-
miento ("overflow").

Cuando ocurre un desbordamiento, la ALU debe indicarlo para que no se


intente utilizar el resultado. Para detectar el desbordamiento se debe observar la
siguiente regla:

Arquitectura de Ordenadores I 43
Tema 3

REGLA DE DESBORDAMIENTO:

Si se suman dos nmeros, y ambos son o bien positivos o negativos, se


produce desbordamiento si y slo si el resultado tiene signo opuesto.

Las Figura 3-4e y f muestran ejemplos de desbordamiento. Obsrvese que


el desbordamiento puede ocurrir habiendo o no acarreo. La resta se trata tambin
fcilmente:
REGLA PARA LA RESTA:

Para substraer un nmero (substraendo) de otro (minuendo), se obtiene el


complemento a dos del substraendo y se le suma al minuendo.

As pues, la resta se consigue usando la suma, como se muestra en la


Figura 3-5. Los dos ltimos ejemplos demuestran que tambin es aplicable la
regla de desbordamiento anterior.

Figura 3-5 Sustraccin de nmeros en la notacin de complemento a dos


(MS)

44 Arquitectura de Ordenadores I
Aritmtica del Procesador

Figura 3-6 Diagrama de bloques del circuito para la suma y la resta

La Figura 3-6 sugiere los caminos de datos y elementos hardware necesa-


rios para realizar sumas y restas. El elemento central es un sumador binario, al
que se presentan los nmeros a sumar y produce una suma y un indicador de
desbordamiento. El sumador binario trata los dos nmeros como binarios sin
signo. Para sumar, los nmeros se presentan al sumador desde dos registros,
designados en este caso registros A y B. El resultado es normalmente almacenado
en uno de estos registros en lugar de en un tercero. La indicacin de desborda-
miento se almacena en un Indicador de Desbordamiento (OF: "Overflow Flag") de
1 bit (0 = no-desbordamiento; 1 = desbordamiento). Para la resta, el substraendo
(registro B) se pasa a travs de un complementador que presenta su salida al
sumador.

Multiplicacin
Comparada con la suma y la resta, la multiplicacin es una operacin compleja,
ya se realice en hardware o en software. En distintos computadores se han utiliza-
do diversos algoritmos.

El propsito de esta subseccin es dar al lector una idea del tipo de


aproximacin normalmente utilizada. Comenzaremos con el problema ms senci-
llo de multiplicar dos enteros sin signo (no negativos), y despus veremos una de
las tcnicas ms comunes para el producto de nmeros representados en comple-
mento a dos.

Enteros sin signo


La Figura 3-7 ilustra el producto de enteros binarios sin signo, que se llevara a
cabo como cuando se utiliza papel y lpiz. Se pueden hacer varias observaciones:
1. La multiplicacin implica la generacin de productos parciales, uno para
cada dgito del multiplicador. Estos productos parciales se suman despus
para producir el producto final.
2. Los productos parciales se definen fcilmente. Cuando el bit del multipli-
cador es 0, el producto parcial es 0. Cuando el multiplicador es 1, el
producto parcial es el multiplicando.

Arquitectura de Ordenadores I 45
Tema 3

3. El producto total se produce sumando los productos parciales. Para esta


operacin, cada producto parcial sucesivo se desplaza en una posicin a la
izquierda con respecto al producto parcial precedente.
4. El producto de dos enteros binarios sin signo de n bits da como resultado
un producto de hasta 2n bits de longitud.

Figura 3-7 Multiplicacin de enteros binarios sin signo

Con relacin a la aproximacin de "papel y lpiz", hay varias modificacio-


nes que se pueden hacer para realizar la operacin ms eficientemente. En primer
lugar, podemos realizar una suma progresiva de los productos parciales en lugar
de esperar hasta el final. Esto evita la necesidad de almacenar todos los productos
parciales, necesitndose menos registros. En segundo lugar, podemos ahorrar
algn tiempo en la generacin de los productos parciales. Para cada 1 del multi-
plicador se requiere un desplazamiento y una suma; pero para un cero, slo se
necesita el desplazamiento.

La Figura 3-8a muestra una posible implementacin que hace uso de las
ideas anteriores. El multiplicador y el multiplicando estn ubicados en dos regis-
tros (Q y M). Un tercer registro, el registro A, es tambin necesario y es
inicialmente puesto a 0. Hay tambin un registro C de un bit, inicializado a 0, que
retiene los posibles bits de acarreo resultantes de las sumas.

46 Arquitectura de Ordenadores I
Aritmtica del Procesador

Figura 3-8 Implementacin de un circuito para la multiplicacin de binarios


sin signo (M contiene 1011)

El multiplicador funciona de la siguiente manera. La lgica de control lee


uno por uno los bits del multiplicador. Si Q0 es 1, se suma el multiplicando al
registro A y el resultado es almacenado en A. Entonces se desplazan todos los bits
de los registros C, A; y Q, una posicin a la derecha, de manera que el bit de C
pasa a An-1, A0 pasa a Qn-1, y Q0 se pierde. Si Q0 es 0, no se realiza la suma,
slo el desplazamiento. Este proceso se repite para cada bit del multiplicador
original. El producto de 2n bits resultante queda en los registros A y Q. La figura
8.8 muestra un diagrama de flujo de la operacin, y en la figura 8.7b se da un
ejemplo. Obsrvese que en el ciclo segundo, cuando el bit del multiplicador es 0,
no hay operacin de suma.
Multiplicacin en complemento a dos

Hemos visto que la suma y la resta pueden realizarse con nmeros en notacin de
complemento a dos tratndolos como enteros sin signo. Consideremos:
1001
+0011
1100

Arquitectura de Ordenadores I 47
Tema 3

Si estos nmeros se consideran enteros sin signo, estamos sumando 9


(1001) ms 3 (0011) para conseguir 12 (1100). Como enteros en complemento a
dos, estamos sumando 7 (1001) a 3 (0011) para obtener 4 (1100)

Desgraciadamente, este simple esquema no es correcto para el producto.


Para verlo, consideremos de nuevo la Figura 3-8. Multiplicamos 11 (1011) por 13
(1101) para obtener 143 (10001111). Si interpretamos estos como nmeros en
complemento a dos, tendramos -5 (1011) por -3 (1101) iguala -113 (10001111).
Este ejemplo demuestra que la multiplicacin directa no es adecuada si tanto el
multiplicando como el multiplicador son negativos. De hecho, tampoco lo es si
alguno de los dos es negativo. Para explicar este comportamiento necesitamos
volver sobre la Figura 3-6 y explicar lo que se est haciendo en trminos de ope-
raciones con potencias de 2. Recurdese que cualquier nmero binario sin signo
puede expresarse como suma de potencias de 2. Por tanto,
1101 = 1 * 23 + 1 * 22 + 0 * 21 + l *20
= 23 + 22 + 20
Adems, el producto de un nmero binario por 2n se obtiene desplazando
dicho nmero n bits hacia la izquierda. Teniendo esto en mente, la Figura 3-10
reestructura la Figura 3-7 para hacer la generacin de productos parciales median-
te multiplicacin explcita. La nica diferencia en la Figura 3-10 es que reconoce
que los productos parciales debieran verse como nmeros de 2n bits generados a
partir del multiplicando de n bits.

As pues, el multiplicando de 4 bits 1001, como entero sin signo, es alma-


cenado en una palabra de 8 bits como 00001001. Cada producto parcial (distinto
del correspondiente a 20) consiste en dicho nmero desplazado a la izquierda, con
las posiciones de la derecha rellenas con ceros (por ejemplo, un desplazamiento a
la izquierda en dos posiciones produce 00101100).

48 Arquitectura de Ordenadores I
Aritmtica del Procesador

Figura 3-9 Diagrama de flujo para la multiplicacin de binarios sin signo

Ahora podemos demostrar cmo la multiplicacin directa no es correcta si


el multiplicando es negativo. El problema es que cada contribucin del
multiplicando negativo como producto parcial tiene que ser un nmero negativo
en un campo de 2n bits; los bits de signo de los productos parciales deben estar
alineados. Esto se demuestra en la Figura 3-10, que muestra el producto de 1001
por 0011. Si estos se tratan como enteros sin signo se realiza el producto 9 * 3 =
27. Sin embargo, si 1001 se interpreta como -7 en complemento a dos, cada
producto parcial debe ser un nmero negativo en complemento a dos de 2n (es
decir 8) bits, como muestra la Figura 3-11b. Obsrvese que eso podra hacerse
rellenando la izquierda de cada producto parcial con unos.

Figura 3-10 Multiplicacin de dos enteros sin signo de 4 bits para producir
un resultado de 8 bits

Arquitectura de Ordenadores I 49
Tema 3

Debiera quedar tambin claro que si el multiplicador es negativo, la multi-


plicacin directa tampoco es correcta. La razn es que los bits del multiplicador
ya no se corresponden con los desplazamientos o productos que deben producirse.
Por ejemplo:

Este multiplicador no puede por tanto utilizarse directamente en la forma


anteriormente descrita.

Hay varias maneras de salir de este dilema. Una sera convertir tanto el
multiplicando como el multiplicador en nmeros positivos, realizar el producto, y
obtener despus el complemento a dos del resultado si y slo si el signo de los dos
nmeros iniciales difiere. Los diseadores han preferido utilizar tcnicas que no
requieren esta etapa de transformacin final. Una de las tcnicas ms comunes es
el algoritmo de Booth [BOOT51]. Este algoritmo tiene la ventaja adicional de
acelerar el proceso de multiplicacin respecto de una aproximacin ms directa.

Figura 3-11 Comparacin del producto de enteros sin signo y en comple-


mento a dos

El algoritmo de Booth se ilustra en la Figura 3-12 y puede describirse co-


mo sigue. Como antes, el multiplicador y el multiplicando se ubican en los
registros Q y M respectivamente. Hay tambin un registro de un bit con una ubi-
cacin lgica a la izquierda del bit menos significativo (Q0) del registro Q que se
ha denominado Q1; explicamos brevemente su uso. El producto resultante apare-
cer en los registros A y Q. A y Q1, se fijan inicialmente a 0. Como antes, la
lgica de control recorre los bits del multiplicador uno por uno. Ahora, al exami-
nar cada bit, tambin se comprueba el bit a su derecha; si los dos son iguales (1-1
0-0), todos los bits de los registros A, Q, y Q1 se desplazan un bit a la derecha.
Si dichos bits difieren, el multiplicando se suma o se resta al registro A, segn que
los dos bits sean 0-1 1-0. A continuacin de la suma o resta se realiza un despla-
zamiento a la derecha. En cualquier caso, el desplazamiento a la derecha es tal
que el bit ms a la izquierda de A, es decir An-1, no solo se desplaza a An-2, sino
que tambin queda en An-1. Esto es necesario para preservar el signo del nmero
contenido en la pareja de registros A y Q. Esto se conoce como desplazamiento
aritmtico, ya que preserva el bit de signo.

La Figura 3-13 muestra la secuencia de eventos para multiplicar 7 por 3


con el algoritmo de Booth. La misma operacin se describe de manera ms com-

50 Arquitectura de Ordenadores I
Aritmtica del Procesador

pacta en la Figura 3-14a. El resto de la Figura 3-14 da otros ejemplos del algorit-
mo. Como puede verse acta correctamente con una combinacin de nmeros
positivo y negativo. Obsrvese tambin la eficiencia del algoritmo. Los bloques
de unos y ceros se saltan, resultando en promedio una suma o una resta por blo-
que.

Figura 3-12 Algoritmo de Booth para la multiplicacin en complementos a


dos

Figura 3-13 Ejemplo del algoritmo de Booth (M contiene 0111)

Arquitectura de Ordenadores I 51
Tema 3

Figura 3-14 Ejemplos de la utilizacin del algoritmo de Booth

Por qu se comporta correctamente el algoritmo de Booth? Considere


primero el caso de un multiplicador positivo. En particular, un multiplicador
positivo consistente en un bloque de unos con ceros a ambos lados, por ejemplo
00011110. Como sabemos, la multiplicacin puede obtenerse sumando adecua-
damente copias desplazadas del multiplicando:

El nmero de tales operaciones puede reducirse a dos si observamos que

Por tanto,

As pues, este producto puede generarse mediante una suma y una resta del
multiplicando. Este esquema se extiende a cualquier nmero de bloques de unos
del multiplicador, incluyendo el caso en que un solo 1 es tratado como bloque.
As,

52 Arquitectura de Ordenadores I
Aritmtica del Procesador

El algoritmo de Booth obedece a este esquema, realizando una resta cuan-


do se encuentra el primer 1 del bloque (1-0), y una suma cuando se encuentra el
final (0-1) del bloque.

Para comprobar que el mismo esquema es adecuado para el caso de multi-


plicador negativo, necesitamos observar lo siguiente. Sea X un nmero negativo
en notacin complemento a dos:

Representacin de

Entonces el valor de X puede expresarse como sigue:

El alumno puede verificarlo aplicndolo a los nmeros de Figura 3-17.

Ahora sabemos que el bit ms a la izquierda de X es 1, ya que X es negati-


vo. Suponga que el bit 0 ms a la izquierda est en la posicin k-sima. Entonces
X ser d la forma:

Representacin de

Entonces el valor de X es:

Utilizando la ecuacin 3-2 podemos decir que:

Reagrupando se tiene:

Sustituyendo la Ecuacin 3-6 en la 3-5 tenemos:

Al fin podemos volver al algoritmo de Booth. Recordando la representa-


cin de X (Ecuacin 8-4), est claro que todos los bits desde el X0 hasta el 0 ms a
la izquierda son manipulados de forma apropiada. Cuando el algoritmo recorre
hasta el 0 ms a la izquierda y encuentra el 1 siguiente (2k+1), ocurre una transi-
cin 1-0 y tiene lugar una resta (-2k+1). Este es el trmino que aparece restando en
la ecuacin 8-7.

Arquitectura de Ordenadores I 53
Tema 3

Como ejemplo, considere la multiplicacin de algn multiplicando por


(-6). En representacin complemento a dos, utilizando una palabra de 8 bits, (-6)
se representa como 11111010. Por la ecuacin 3-3 sabemos que:

como puede verificar fcilmente el lector. Por tanto,

Usando la ecuacin 3-7.

que, como el lector puede verificar, es tambin M (6). Finalmente, si-


guiendo nuestra lnea de razonamiento anterior:

Pero ahora podemos ver que el algoritmo de Booth se ajusta a este esque-
ma. Realiza una resta cuando se encuentra el primer 1, (10), y suma cuando se
encuentra (0-1), y finalmente resta otra vez cuando encuentra el primer 1 del
siguiente bloque de unos. Por consiguiente, el algoritmo de Booth realiza menos
sumas y restas que un algoritmo directo.

Divisin

La divisin es algo ms compleja que la multiplicacin pero est basada en los


mismos principios generales. Como antes, la base para el algoritmo es la aproxi-
macin de "papel y lpiz", y la operacin conlleva repetidos desplazamientos y
sumas o restas.

La Figura 3-15 muestra un ejemplo de divisin larga de enteros binarios


sin signo. Es instructivo describir en detalle el proceso. Primero se seleccionan los
bits del dividendo de izquierda a derecha hasta que el conjunto de bits selecciona-
dos represente un nmero mayor o igual que el divisor; o, en otras palabras, hasta
que el divisor sea capaz de dividir al nmero. Hasta que eso ocurre, se van colo-
cando ceros en el cociente de izquierda a derecha. Cuando dicho evento ocurre, se
coloca un 1 en el cociente, y se substrae el divisor del dividendo parcial. Al resul-
tado se le denomina resto parcial. Desde este punto en adelante, la divisin sigue
un patrn cclico. En cada ciclo, se aaden bits adicionales del dividendo al resto
parcial hasta que el resultado sea mayor que el divisor. Como antes, de este nme-
ro se resta el divisor para producir un nuevo resto parcial. El proceso contina
hasta que se acaban los bits del dividendo.

La Figura 3-16 muestra un algoritmo mquina que corresponde al proceso


de divisin larga discutido. El divisor se ubica en el registro M, y el dividendo en
el registro Q. En cada paso, los registros A y Q son desplazados conjuntamente un

54 Arquitectura de Ordenadores I
Aritmtica del Procesador

bit a la izquierda. M es restado de A para determinar si A divide el resto parcial.


Si se cumple, entonces Q0 se hace 1. Si no, Q0 se hace 0, y M debe sumarse de
nuevo a A para restaurar el valor anterior. La cuenta entonces se decrementa, y el
proceso contina hasta n pasos. A1 final, el cociente queda en el registro Q y el
resto en el A.

Figura 3-15 Divisin de enteros binarios sin signo

Este proceso puede, con cierta dificultad, aplicarse tambin a nmeros ne-
gativos. Aqu damos una posible aproximacin para nmeros en complemento a
dos. En la Figura 3-17 se muestran varios ejemplos de esta aproximacin. El
algoritmo puede resumirse como sigue:
1. Cargar el divisor en el registro M y el dividendo en los registros A y Q. El
dividendo debe estar expresado como nmero en complemento a dos de 2n
bits. Por ejemplo, el nmero de 4 bits 0111 pasa a ser 00000111, y el 1001
pasa a 11111001.
2. Desplazar A y Q una posicin de bit a la izquierda.
3. Si M y A tienen el mismo signo, ejecutar A A - M; si no, A A + M.
4. La operacin anterior tiene xito si el signo de A es el mismo, antes y des-
pus de la operacin.
a. Si la operacin tiene xito o (A=0 AND Q=0), entonces hacer
Q0 1.
b. Si la operacin no tiene xito y (A0 OR Q0), entonces Q0 0, y
restablecer el valor anterior de A.
5. Repetir los pasos 2 a 4 tantas veces como nmero de bits tenga Q.
6. El resto est en A. Si los signos del divisor y el dividendo fueran iguales,
el cociente est en Q; si no, el cociente correcto es el complemento a dos
de Q.
El alumno notar en la Figura 3-17 que (-7)(3) y (7)(3) producen restos
diferentes. Esto es debido a que el resto se define como:
D=Q*V+R
dnde
D = dividendo
Q = cociente
V = divisor
R = resto

Arquitectura de Ordenadores I 55
Tema 3

Figura 3-16 Diagrama de flujo para la divisin de binarios sin signo

Los resultados de la Figura 3-17 son consistentes con dicha frmula.

A Q M = 0011 A Q M = 1101
0000 0111 Valor Inicial 0000 0111 Valor Inicial
0000 1110 Desplazamiento 0000 1110 Desplazamiento
1101 Restar 1101 Sumar
0000 1110 Restablecer 0000 1110 Restablecer
0001 1100 Desplazamiento 0001 1100 Desplazamiento
1110 Restar 1110 Sumar
0001 1100 Restablecer 0001 1100 Restablecer
0011 1000 Desplazamiento 0011 1000 Desplazamiento
0000 Restar 0000 Sumar
0000 1001 Poner Qo=1 0000 1001 Poner Qo=1
0001 0010 Desplazamiento 0001 0010 Desplazamiento
1110 Restar 1110 Sumar
0001 0010 Restablecer 0001 0010 Restablecer

56 Arquitectura de Ordenadores I
Aritmtica del Procesador

A Q M = 0011 A Q M = 1101
(a) (7) (3) (b) (7) (-3)

A Q M=0011 A Q M=1101
1111 1001 Valor Inicial 1111 1001 Valor Inicial
1111 0010 Desplazamiento 1111 0010 Desplazamiento
0010 Sumar 0010 Restar
1111 0010 Restablecer 1111 0010 Restablecer
1110 0100 Desplazamiento 1110 0100 Desplazamiento
0001 Sumar 0001 Restar
1110 0100 Restablecer 1110 0100 Restablecer
1100 1000 Desplazamiento 1100 1000 Desplazamiento
1111 Sumar 1111 Restar
1111 1001 Poner Q0 = 1 1111 1001 Poner Q0 = 1
1111 0010 Desplazamiento 1111 0010 Desplazamiento
0010 Sumar 0010 Restar
1111 0010 Restablecer 1111 0010 Restablecer
(c) (7) (3) (d) (-7) (-3)
Figura 3-17 Ejemplos de divisin en complemento a dos
.

Arquitectura de Ordenadores I 57
Tema 4

ALU, UC y Memoria Principal

Introduccin
Virtualmente todos los computadores actuales se han diseado basndose en los
conceptos desarrollados por John Von Neumann en el Instituto de Estudios Avan-
zados (Institute for Adyances Studies) de Princeton. Tal diseo se conoce con el
nombre de Arquitectura de von Neumann y se basa en tres conceptos clave:
Los datos y las instrucciones se almacenan en una sola memoria de lectu-
ra-escritura.
Los contenidos de esta memoria se direccionan indicando su posicin,
sin considerar el tipo de dato contenido en la misma.
La ejecucin se produce siguiendo una secuencia de instruccin tras ins-
truccin (a no ser que dicha secuencia se modifique explcitamente).
Hay un conjunto pequeo de componentes lgicos bsicos que pueden
combinarse de formas diferentes para almacenar datos binarios y realizar las
operaciones aritmticas y lgicas con esos datos. Si se desea realizar un clculo
concreto, es posible construir una configuracin de componentes lgicos diseada
especficamente para dicho clculo. Es posible pensar en el proceso de conexin
de los diversos componentes para obtener la configuracin deseada como si se
tratase de una forma de programacin. El programa resultante es un circuito
electrnico y se denomina programa cableado (hardwired program).

Si todos los programas se hiciesen de esta forma, el circuito obtenido ten-


dra un uso muy restringido. Considrese ahora la siguiente alternativa. Se
construye una configuracin de uso general de funciones lgicas y aritmticas.
Este hardware realizar funciones diferentes segn las seales de control aplica-
das. En el caso del hardware especfico, el sistema acepta datos y produce
resultados. Con el hardware de uso general, el sistema acepta datos y seales de
control y produce resultados. As, en lugar de reconfigurar el hardware para cada

58Arquitectura de Ordenadores I
ALU, UC y Memoria Principal

nuevo programa, el programador simplemente necesita proporcionar un nuevo


conjunto de seales de control.

Cmo se suministran las seales de control? La respuesta es simple pero


ingeniosa. El programa es realmente una secuencia de pasos. En cada paso, se

realiza una operacin aritmtica o lgica con ciertos datos. Para cada paso, se
necesita un nuevo conjunto de seales de control. La solucin consiste en asociar
un cdigo especfico a cada posible conjunto de seales de control, y aadir al
hardware de uso general una parte encargada de generar las seales de control a
partir del cdigo (figura 1b).

Programar es ahora mucho ms fcil. En lugar de tener que reconfigurar el


hardware para cada programa, todo lo que se necesita es proporcionar una nueva

Figura 4-1 Estructura bsica de la mquina de Von Neumann

secuencia de cdigos. Cada cdigo es, de hecho, una instruccin, y una parte del
hardware interpreta cada instruccin y genera las seales de control. Para distin-
guir este nuevo mtodo de programacin, una secuencia de cdigos o
instrucciones se denomina software.

Arquitectura de Ordenadores I 59
Tema 4

La figura anterior muestra dos componentes esenciales del sistema: un in-


trprete de instrucciones y un mdulo de uso general para las funciones
aritmticas y lgicas. Estos dos elementos constituyen la CPU. Se requieren va-
rios componentes adicionales para que el computador pueda funcionar. Los datos
y las instrucciones deben introducirse en el sistema. Para eso se necesita algn
tipo de mdulo de entrada. Este mdulo contiene los componentes bsicos para
admitir datos e instrucciones en cierto formato y traducirlos al formato de seales
que utiliza el sistema. Se necesita un medio para proporcionar los resultados, el
mdulo de salida. Globalmente, se conocen con el nombre de componentes de E/S
(Entrada / Salida).

Figura 4-2 Secuencia de cdigos para crear un programa

Se necesita un componente ms. Un dispositivo de entrada proporcionar


los datos y las instrucciones secuencialmente, uno tras otro. Pero un programa no
siempre ejecuta las instrucciones segn la misma secuencia; puede saltarse ciertas
instrucciones (ej., al ejecutar la instruccin de salto IAS). De la misma forma, las
operaciones con datos pueden necesitar acceder a ms de un operando y segn

Figura 4-3 Organigrama de la ejecucin de las instrucciones

60 Arquitectura de Ordenadores I
ALU, UC y Memoria Principal

una secuencia determinada. Por ello, debe existir un sitio para almacenar tempo-
ralmente tanto las instrucciones como los datos. Ese mdulo se llama memoria, o
memoria principal para distinguirlo de los perifricos y la memoria externa. Von
Neumann indic que la misma memoria podra ser usada tanto para las instruccio-
nes como para los datos. Los datos son los contenidos con los que se realizan los
clculos. Las instrucciones son aquellos contenidos que se interpretan como cdi-
gos para generar las seales de control.

La figura 2 muestra estos componentes de alto nivel y sugiere las interac-


ciones entre ellos. Tpicamente, la CPU se encarga del control. Intercambia datos
con la memoria. Para ello, usualmente utiliza dos registros internos (a la CPU): un
registro de direcciones de memoria (MAR, de Memory Address Register), que
especifica la direccin en memoria de la prxima lectura o escritura, y un registro
para datos de memoria (MBR, de Memory Buffer Register), que contiene el
dato que se va a escribir en memoria o sobre el que se escribe el dato que se va a
leer de memoria. Igualmente, un registro de direcciones de E/S (E/SAR de E/S
Address Register) especifica un dispositivo de E/S. Un registro para datos de E/S
(E/S BR de E/S Buffer Register) se utiliza para intercambiar datos entre un
mdulo de E/S y la CPU.

Un mdulo de memoria consiste en un conjunto de posiciones, designadas


por direcciones numeradas secuencialmente. Cada posicin contiene un nmero
binario que puede ser interpretado como una instruccin o como un dato. Un
mdulo de E/S transfiere datos desde los dispositivos externos a la CPU y a la
memoria, y viceversa. Contiene los registros (buffers) internos para almacenar
temporalmente los datos hasta que puedan enviarse.

Tras esta breve descripcin de los principales componentes, revisaremos


como funcionan esos componentes cuando ejecutan programas.

El FUNCIONAMIENTO DEL COMPUTADOR


La funcin bsica que realiza un computador es la ejecucin de programas.
El programa a ejecutar est compuesto por un conjunto de instrucciones almace-
nadas en memoria. La Unidad Central de Procesamiento (CPU, de Central
Processing Unit) es precisamente la que se encarga de ejecutar las instrucciones
especificadas en el programa.

Para adquirir una mejor comprensin de esta funcin y de la forma en la


que los principales componentes del computador interactan para ejecutar un
programa, es preciso considerar con detalle el proceso de ejecucin del programa.
El punto de vista ms sencillo considera el procesamiento de una instruccin
constituido por dos etapas: La CPU lee (capta, de fetch en ingls) la instruccin
de memoria, y la ejecuta. La ejecucin del programa consiste en la repeticin del
proceso de captacin de instruccin y ejecucin de instruccin. Por supuesto, la
ejecucin de la instruccin puede a su vez estar compuesta de cierto nmero de
pasos. Por el momento, se puede justificar la separacin del procesamiento de una

Arquitectura de Ordenadores I 61
Tema 4

instruccin en las etapas de captacin y ejecucin como sigue: La captacin de


una instruccin es una operacin comn a todas las instrucciones, y consiste en la
lectura de la instruccin de una posicin de memoria. La ejecucin de la instruc-
cin puede suponer varias operaciones y depende de la naturaleza de la
instruccin.

El procesamiento que requiere una instruccin se denomina ciclo de ins-


truccin. Se representa en la figura 3 utilizando la descripcin de dos etapas
explicada ms arriba. Los dos pasos se denotan como cielo de captacin y ciclo de
ejecucin. La ejecucin del programa se para slo si la mquina se desconecta, se
produce algn tipo de error, o se encuentra una instruccin del programa que
detiene al computador.

Los ciclos de captacin y ejecucin. Al comienzo de cada ciclo de instruc-


cin, la CPU capta una instruccin de memoria. En una CPU tpica, se utiliza un
registro llamado contador de programa (PC, Program Counter) para seguir la
pista de la instruccin que debe captarse a continuacin. A no ser que se indique
otra cosa, la CPU siempre incremento el PC despus de captar cada instruccin de
forma que captar la siguiente instruccin de la secuencia (es decir, la instruccin
situada en la siguiente direccin de memoria). Considrese, por ejemplo, un com-
putador en el que cada instruccin ocupa una palabra de memoria de 16 bits. Se
supone que el contador de programa almacena el valor 300. La CPU captar la
prxima instruccin almacenada en la posicin 300. En los siguientes ciclos de
instruccin, captar las instrucciones almacenadas en las posiciones 301, 302,
303, y as sucesivamente. Esta secuencia se puede alterar, como se explica luego.

La instruccin captada se almacena en un registro de la CPU conocido


como registro de instruccin (IR, Instruction Register). La instruccin se escri-
be utilizando un cdigo binario que especifica la accin que debe realizar la CPU.
La CPU interpreta la instruccin y lleva a cabo la accin requerida. En general,
sta puede ser de cuatro tipos:

CPU-Memoria: Deben transferirse datos desde la CPU a la memoria, o


desde la memoria a la CPU.

CPU-E/S: Deben transferirse datos a o desde el exterior mediante transfe-


rencias entre la CPU y un mdulo de E/S.

62 Arquitectura de Ordenadores I
ALU, UC y Memoria Principal

Procesamiento de Datos: La CPU ha de realizar alguna operacin aritmti-

ca o lgica con los datos.

Control: Una instruccin puede especificar que la secuencia de ejecucin


se altere (como la instruccin de salto IAS, tabla 2. l). Por ejemplo, la CPU capta
una instruccin de la posicin 149 que especifica que la siguiente instruccin debe
captarse de la posicin 182. La CPU registrar este hecho poniendo en el contador
de programa 182. As, en el prximo ciclo de captacin, la instruccin se cargar
desde la posicin 182 en lugar de desde la posicin 150.

Por supuesto, la ejecucin de una instruccin puede implicar una combina-


cin de estas acciones.

Consideremos un ejemplo sencillo utilizando una mquina hipottica que


incluye las caractersticas enumeradas en la figura 4. La CPU posee un acumula-
dor (AC) para almacenar datos temporalmente. Tanto las instrucciones como los
datos son de 16 bits. As, es conveniente organizar la memoria utilizando posicio-
nes de 16 bits, o palabras. El formato de instruccin indica que pueden haber
24=16 cdigos de operacin (codops) diferentes, y se pueden direccionar directa-
mente hasta 211=4096 (4K) palabras de memoria.

La figura 5 ilustra la ejecucin de una parte de un programa, mostrando las


partes relevantes de la memoria y los registros de la CPU. Se utiliza notacin

Arquitectura de Ordenadores I 63
Tema 4

hexadecimal2. El fragmento de programa suma el contenido de la palabra de


memoria contenida en la direccin 94016 con el contenido de la palabra de memo-
ria contenida en la direccin 94116 y almacena el resultado en esta ltima
posicin. Se requieren tres instrucciones, que consumen tres cielos de captacin y
tres de ejecucin:
1. El contador de programa (PC) contiene el valor 300, la direccin de la pri-
mera instruccin. Esta direccin se carga en el registro de instruccin (IR).
Obsrvese que este proceso podra implicar el uso del registro de direccin
de memoria (MAR) y el registro de datos de memoria (MBR). Por simplici-
dad, se han ignorado estos registros intermedios.
2. Los primeros cuatro bits de IR indican que el acumulador (AC) se va a car-
gar. Los restantes 12 bits especifican la direccin, que es 940.
3. El registro PC se incremento, y se capta la siguiente instruccin.
4. El contenido anterior de AC y el de la posicin de memoria 941 se suman, y
el resultado se almacena en AC.
5. El registro PC se incremento, y se capta la siguiente instruccin. 6. El conte-
nido de AC se almacena en la posicin 941.
En este ejemplo, se necesitan tres ciclos de instruccin, cada uno con un
ciclo de captacin y un ciclo de ejecucin, para sumar el contenido de la posicin
940 y el contenido de la 941. Con un conjunto de instrucciones ms complejo, se
hubieran necesitado menos ciclos. La mayora de las CPUs actuales incluyen
instrucciones que contienen ms de una direccin. La instruccin del PDP-11
expresada simblicamente como ADD B, A almacena la suma de los contenidos
de las posiciones B y A en la posicin de memoria A. Se produce un solo ciclo de
instruccin con los siguientes pasos:
1. Se capta la instruccin ADD.
2. El contenido de la posicin de memoria A se lee y pasa a la CPU
3. El contenido de la posicin de memoria B se lee y pasa a la CPU. Para que
el contenido de A no se pierda, la CPU debe tener al menos dos registros pa-
ra almacenar valores de memoria, en lugar de un solo acumulador.
4. Se suman los dos valores.
5. La CPU escribe el resultado en la posicin de memoria A.
As, el ciclo de ejecucin de una instruccin particular puede ocasionar
ms de una referencia a memoria. Adems, en lugar de referencias a memoria, una
instruccin puede especificar una operacin de E/S. Con estas consideraciones
adicionales en mente, la figura 6 proporciona una visin ms detallada del cielo
de instruccin bsico de la figura La figura tiene la forma de un diagrama de
estados. Para un ciclo de instruccin dado, algunos estados pueden no darse y
otros pueden visitarse ms de una vez. Los estados se describen a continuacin:

Clculo de la direccin de la instruccin (iac, de instruction address cal-


culation): Determina la direccin de la siguiente instruccin a ejecutar.
Normalmente, esto implica aadir un nmero fijo a la direccin de la instruccin

2
En notacin hexadecimal, cada dgito representa cuatro bits. Esta es la notacin ms conveniente para representar los
contenidos de la memoria y los registros cuando la longitud de palabra es mltiplo de 4 (por ejemplo, 8, 16 32). Para los
lectores no familiarizados con esta notacin, se resume en el apndice del captulo S.

64 Arquitectura de Ordenadores I
ALU, UC y Memoria Principal

previa. Por ejemplo, si las instrucciones tienen un tamao de 16 bits y la memoria


se organiza en palabras de 16 bits, se suma 1 a la direccin previa. En cambio, si
la memoria se organiza en bytes (S bits) direccionables individualmente, entonces
hay que sumar 2 a la direccin previa.

Captacin de instruccin (if, de instruction fetch): La CPU lee la ins-


truccin desde su posicin en memoria.

Decodificacin de la operacin indicada en la instruccin (iod, de ins-


truction operation decoding): Analiza la instruccin para determinar el tipo de
operacin a realizar y el(los) operando(s) a utilizar.

Clculo de la direccin del operando (oac, de operand address calcula-


tion): Si la instruccin implica una referencia a un operando en memoria o
disponible mediante E/S, determina la direccin del operando.

Captacin de operando (of, de operand fetch): Capta el operando desde


memoria o se lee desde el dispositivo de E/S.

Operacin con los datos (do, de data operation). Realiza la operacin in-
dicada en la instruccin.

Almacenamiento de operando (os, de operand store): Escribe el resul-


tado en memoria o lo saca a travs de un dispositivo de E/S.

Los estados en la parte superior de la figura 6 ocasionan intercambios en-


tre la CPU y la memoria o un mdulo de E/S. Los estados en la parte inferior del
diagrama slo ocasionan operaciones internas a la CPU. El estado oac aparece dos
veces, puesto que una instruccin puede ocasionar una lectura, una escritura, o
ambas cosas. No obstante, la accin realizada en ese estado es la misma en ambos
casos, y por eso slo se necesita un nico identificador de estado.

Obsrvese, adems, que en el diagrama se considera la posibilidad de ml-


tiples operandos y mltiples resultados puesto que se necesitan en algunas
instrucciones de ciertas mquinas. Por ejemplo, la instruccin ADD A, B del
PDP11 da lugar a la siguiente secuencia de estados: iac, ifiod, oac, ofoac, ofdo,
oac, os.

Programa Generadas por alguna condicin que se produce como resultado


de la ejecucin de una instruccin, tal como desbordamiento aritmtico (over-
flow), divisin por cero, intento de ejecutar una instruccin mquina inexistente, e
intento de acceder fuera del espacio de memoria permitido para el usuario.

Temporizacin Generadas por un temporizador interno al procesador. Esto


permite al sistema operativo realizar ciertas funciones de manera regular.

E/S Generadas por un controlador de E/S, para indicar la finalizacin sin


problemas de una operacin o para avisar de ciertas condiciones de error.

Arquitectura de Ordenadores I 65
Tema 4

Fallo de hardware Generadas por un fallo tal corno la falta de potencia de


alimentacin o un error de paridad en la memoria.

Por ltimo, en algunas mquinas, con una nica instruccin se puede espe-
cificar una operacin a realizar con un vector (matriz unidimensional) de nmeros
o con una cadena (matriz unidimensional) de caracteres. Como indica la figura 6,
esto implicara una repeticin de estados de captacin y/o almacenamiento de
operando.

ORGANIZACIN DEL PROCESADOR


Para comprender la organizacin de la CPU, consideremos sus objetivos,
las cosas que debe hacer:
Captar instrucciones: La CPU debe leer instrucciones de la memoria.
Interpretar instrucciones: La instruccin debe decodificarse para determinar
qu accin es necesaria.
Captar datos: La ejecucin de una instruccin puede exigir leer datos de la
memoria o de un mdulo de E/S.
Procesar datos: La ejecucin de una instruccin puede exigir llevar a cabo al-
guna operacin aritmtica o lgica con los datos.
Escribir datos: Los resultados de una ejecucin pueden exigir escribir datos en
la memoria o en un mdulo de E/S.
Para poder hacer estas cosas, es obvio que la CPU necesita almacenar al-

gunos datos temporalmente. Debe recordar la posicin de la ltima instruccin de


forma que sepa dnde ir a buscar la siguiente. Necesita almacenar instrucciones y
datos temporalmente mientras una instruccin est siendo ejecutada. En otras
palabras, la CPU necesita una pequea memoria interna.

La figura 7 es una visin simplificada de la CPU, que indica su conexin


con el resto del sistema a travs del bus del sistema. Una interfaz similar sera
necesaria para cualquiera de las estructuras de interconexin descritas
anteriormente. El lector recordar que los principales componentes de la CPU son
una unidad aritmtico lgica (arithmetic and logic unit, ALU) y una unidad de

66 Arquitectura de Ordenadores I
ALU, UC y Memoria Principal

unidad aritmtico lgica (arithmetic and logic unit, ALU) y una unidad de
control (control unit, CU). La ALU lleva a cabo la verdadera computacin o
procesamiento de datos. La unidad de control controla las transferencias de datos
hacia dentro y hacia fuera de la CPU y el funcionamiento de la ALU. Adems, la
figura muestra una memoria interna mnima, que consta de un conjunto de lugares
de almacenamiento, llamados registros.

La figura 8 presenta una visin un poco ms detallada de la CPU. Se indi-


can los caminos de transferencia de datos y de control lgico, que incluyen un
elemento con el rtulo bus interno de la CPU. Este elemento es necesario para

transferir datos entre los diversos registros y la ALU, ya que sta en realidad slo
opera con los datos de la memoria interna de la CPU. La figura muestra tambin
los elementos bsicos tpicos de la ALU. Observe la similitud entre la estructura
interna del computador en su totalidad y la estructura interna de la CPU. En am-
bos casos hay una pequea coleccin de elementos principales (computador:
CPU, E/S, memoria; CPU: unidad de control, ALU, registros) conectados por
caminos de datos.

ORGANIZACIN DE LOS REGISTROS


Como discutimos en el captulo 4, un computador contiene una memoria
jerarquizada. En los niveles ms altos de la jerarqua, la memoria es ms rpida,
de menor tamao, y ms cara (por bit). Dentro de la CPU hay un conjunto de
registros que funciona como nivel de la jerarqua de memoria por encima de la
memoria principal y de la cache. Los registros de la CPU son de dos tipos:

Registros visibles al usuario: Permiten al programador de lenguaje mqui-


na o ensamblador minimizar las referencias a memoria principal optimizando el
uso de registros.

Arquitectura de Ordenadores I 67
Tema 4

Registros de control y de estado: Son utilizados por la unidad de control


para controlar el funcionamiento de la CPU y por programas privilegiados del
sistema operativo para controlar la ejecucin de programas.

No hay una separacin bien definida de registros dentro de estas dos cate-
goras. Por ejemplo, en algunas mquinas el contador de programa es visible al
usuario (por ej., en el VAX), pero en muchas no lo es. Para el objetivo de la si-
guiente discusin, no obstante, usaremos estas categoras.

Registros visibles al usuario

Un registro visible al usuario es aqul que puede ser referenciado por me-
dio del lenguaje mquina que ejecuta la CPU. Prcticamente todos los diseos
contemporneos de CPUs estn provistos de varios registros visibles al usuario,
en oposicin a disponer de un nico acumulador. Podemos clasificarlos en las
siguientes categoras: Uso general Datos

Direcciones

Cdigos de condicin

Los registros de uso general pueden ser asignados por el programador a


diversas funciones. A veces, su uso dentro del repertorio de instrucciones es orto-
gonal a la operacin. Es decir, cualquier registro de uso general puede contener el
operando para cualquier cdigo de operacin. Esto proporciona una utilizacin de
registros de autntico uso general. Con frecuencia, sin embargo, existen restric-
ciones. Por ejemplo, puede haber registros especficos para operaciones en punto
flotante.

En algunos casos los registros de uso general pueden ser utilizados para
funciones de direccionamiento (por ej., indirecto por medio de registro, desplaza-
miento). En otros casos hay una separacin clara o parcial entre registros de datos
y registros de direcciones. Los registros de datos pueden ser usados nicamente
para contener datos y no se pueden emplear en el clculo de una direccin de
operando. Los registros de direccin pueden ser en s registros de uso ms o
menos general, o pueden estar dedicados a un modo de direccionamiento particu-
lar. Los ejemplos incluyen:

Punteros de segmento: En una mquina cm direccionamiento segmentado


(ver seccin 7.3) un registro de segmento contiene la direccin de la base del
segmento. Puede haber mltiples registros: por ejemplo uno para el sistema opera-
tivo y otro para el proceso en curso.

Registros ndice: Se usan para direccionamiento indexado, y pueden ser


autoindexados.

Puntero de pila: Si existe direccionamiento a pila visible al usuario, la pila


est tpicamente en memoria y hay un registro dedicado que apunta a la cabecera
de sta. Esto permite direccionamiento implcito; es decir, apilar (push), desapi-

68 Arquitectura de Ordenadores I
ALU, UC y Memoria Principal

lar (pop), y otras instrucciones de la pila no necesitan contener un operando


explcito referente a ella.

Hay aqu varias cuestiones de diseo a estudiar. Una importante es si usar


registros de uso completamente general o si especializar su uso. Nos referimos ya
a este asunto en el captulo anterior, dado que afecta al diseo del conjunto de
instrucciones. Con el uso de registros especializados, generalmente puede quedar
implcito en el cdigo de operacin a qu tipo de registro se refiere un determina-
do campo de operando. El campo de operando slo debe identificar uno de un
conjunto de registros especializados en lugar de uno de entre todos los registros,
lo cual ahorra bits. Por otra parte, esta especializacin limita la flexibilidad del
programador. No hay una solucin ptima y definitiva a este problema de diseo,
pero, como se mencion, la tendencia parece ser ir hacia el uso de registros espe-
cializados.

Otro problema de diseo es el nmero de registros, de uso general o de da-


tos ms direcciones, que tienen que incluirse. De nuevo, esto afecta al diseo del
conjunto de instrucciones ya que ms registros requieren ms bits para el campo
de operando. Como discutimos anteriormente, parece ptimo alrededor de entre 8
y 32 registros [LUND77]. Menos registros se traducen en ms referencias a me-
moria; ms registros no reducen notablemente las referencias a memoria (por ej.,
ver [WILL901). Sin embargo, una nueva aproximacin que saca partido al uso de
cientos de registros se manifiesta en algunos sistemas RISC y se estudia en el
captulo 12.

Por ltimo, est la cuestin de la longitud de los registros. Los registros


que han de contener direcciones han de ser lo suficientemente grandes como para
albergar la direccin mayor. Los registros de datos deben ser capaces de contener
valores de la mayora de los tipos de datos. Algunas mquinas permiten que dos
registros contiguos sean usados como uno para contener valores de doble longi-
tud.

Una categora final de registros, que es al menos parcialmente visible al


usuario, contiene cdigos de condicin (tambin llamados indicadores o flags).
Los cdigos de condicin son bits fijados por el hardware de la CPU como resul-
tado de alguna operacin. Por ejemplo, una operacin aritmtica puede producir
un resultado positivo, negativo, nulo, o con desbordamiento. Adems de almace-
narse el propio resultado en un registro o en la memoria, se obtiene tambin un
cdigo de condicin. El cdigo puede ser examinado con posterioridad como
parte de una operacin de bifurcacin condicional.

Los bits de cdigo de condicin se renen en uno o ms registros. Por lo


general, forman parte de un registro de control. Comnmente, las instrucciones
mquina permiten que estos bits sean ledos por referencia implcita, pero no
pueden ser alterados por el programador.

En algunas mquinas, una llamada a subrutina dar lugar a la salvaguarda


automtica de todos los registros visibles al usuario, que sern restablecidos en el

Arquitectura de Ordenadores I 69
Tema 4

retorno de la subrutina. La CPU lleva a cabo la salvaguarda y restablecimiento


como parte de la ejecucin de las instrucciones de llamada y retorno, respectiva-
mente. Esto permite a cada subrutina usar independientemente los registros
visibles al usuario. En otras mquinas, es responsabilidad del programador guar-
dar los contenidos de los registros visibles al programador relevantes antes de la
llamada a la subrutina, teniendo que incluir en el programa instrucciones para este
fin.

Registros de control y de estado

Hay diversos registros de la CPU que se pueden emplear para controlar su


funcionamiento. La mayora de stos, en la mayor parte de las mquinas, no son
visibles al usuario. Algunos de ellos pueden ser visibles a instrucciones mquina
ejecutadas en un modo de control o de sistema operativo.

Naturalmente, mquinas diferentes tendrn diferentes organizaciones de


registros y usarn distinta terminologa. Se enumera aqu una lista razonablemente
completa de tipos de registros, con una breve descripcin.

Son esenciales cuatro registros para la ejecucin de una instruccin: Con-


tador de programa (Program Counter, PC): Contiene la direccin de la
instruccin a captar.
Registro de instruccin (Instruction Register, IR): Contiene la instruccin
captada ms recientemente.
Registro de direccin de memoria (Memory Address Register, MAR): Con-
tiene la direccin de una posicin de memoria.
Registro intermedio de memoria (Memory Buffer Register, MBR): Contiene
la palabra de datos a escribir en memoria o la palabra leda ms reciente-
mente.
El contador de programa contiene una direccin de instruccin. Tpicamente, la
CPU actualiza el contador de programa despus de cada captacin de ins-
truccin de manera que siempre apunta a la siguiente instruccin a ejecutar.
Una instruccin de bifurcacin o salto tambin modificar el contenido de
PC. La instruccin captada se carga en el registro de instruccin, donde son
analizados el cdigo de operacin y los campos de operando. Se intercam-
bian datos con la memoria por medio de MAR y de MBR. En un sistema
con organizacin de bus, ~ se conecta directamente al bus de direcciones, y
MBR directamente al bus de datos. Los registros visibles al usuario, sucesi-
vamente, intercambian datos con MBR.
Los cuatro registros que se acaban de mencionar se usan para la transfe-
rencia de datos entre la CPU y la memoria. Dentro de la CPU, los datos tienen que
ofrecerse a la ALU para su procesamiento. La ALU puede tener acceso directo a
MBR y a los registros visibles al usuario. Como alternativa, puede haber registros
intermedios adicionales en el lmite de la ALU; estos registros sirven corno regis-
tros de entrada y salida de la ALU e intercambian datos con MBR y los registros
visibles al usuario.

70 Arquitectura de Ordenadores I
ALU, UC y Memoria Principal

Todos los diseos de CPUs incluyen un registro o un conjunto de registros,


conocidos a menudo como palabra de estado del programa (Program Status
Word, PSW), que contiene informacin de estado. La PSW contiene tpicamente
cdigos de condicin adems de otra informacin de estado. Entre los campos
comunes o indicadores se incluyen los siguientes:

Signo: Contiene el bit de signo del resultado de la ltima operacin aritmtica.


Cero: Puesto a uno cuando el resultado es 0.
Acarreo: Puesto a uno si una operacin da lugar a un acarreo (suma) o adeudo
(resta) de un bit de orden superior. Se usa en operaciones aritmticas multi-
palabra.
Igual: Puesto a uno si el resultado de una comparacin lgica es la igualdad.
Desbordamiento: Usado para indicar un Desbordamiento aritmtico.
Interrupciones habilitadas/inhabilitadas: Usado para permitir o inhabilitar in-
terrupciones.
Supervisor: Indica si la CPU funciona en modo supervisor o usuario. nica-
mente en modo supervisor se pueden ejecutar ciertas instrucciones
privilegiadas y se puede acceder a ciertas reas de memoria.
Hay algunos otros registros relativos a estado y control que podran encon-
trarse en algn diseo concreto de CPU. Adems de la PSW, puede existir un
puntero a un bloque de memoria que contenga informacin de estado adicional
(por ej., bloques de control de procesos). En las mquinas que usan interrupciones
vectorizadas puede existir un registro de vector de interrupcin. Si se utiliza una
pila para llevar a cabo ciertas funciones (por ej., llamadas a subrutinas), se necesi-
ta un puntero de pila del sistema. En un sistema de memoria virtual se usa un
puntero a la tabla de pginas. Por ltimo, pueden emplearse registros para el
control de operaciones de E/S.

Arquitectura de Ordenadores I 71
Tema 4

En el diseo de la organizacin de los registros de control y estado entran


en juego vanos factores. Una cuestin importante es el soporte del sistema opera-
tivo. Algunos tipos de informacin de control son de utilidad especfica para el
sistema operativo. Si el diseador de la CPU posee una comprensin funcional del
sistema operativo que se va a usar, la organizacin de registros puede, hasta cierto
punto, adaptarse a ese sistema operativo.

Otra decisin de diseo clave es la distribucin de informacin de control

entre registros y memoria. Es comn dedicar los primeros (ms bajos) pocos
cientos o miles de palabras de memoria para fines de control. El diseador debe
decidir cunta informacin de control debiera estar en registros y cunta en me-
moria. Surge el habitual compromiso entre coste y velocidad.

Ejemplos de organizaciones de registros en microprocesadores

Resulta instructivo examinar y comparar las organizaciones de registros de


sistemas anlogos. En esta seccin, examinamos tres microprocesadores de 16 bits
que fueron diseados aproximadamente al mismo tiempo: el Zilog Z8000

72 Arquitectura de Ordenadores I
ALU, UC y Memoria Principal

[PEUT791, el Intel 8086 UMOR878, HEYW831, y el Motorola MC68000 US-


TRI791. La figura 9 representa la organizacin de registros de cada uno de ellos;
los registros puramente internos, tales como el registro de direccin de memoria,
no se muestran.

El ZSOOO utiliza 16 registros de uso general de 16 bits, que pueden usar-


se para datos, direcciones e indexacin. A los diseadores les pareci que era ms
importante proporcionar un conjunto de registros general y normalizado que
ahorrar bits de instruccin utilizando registros de uso especial. Adems, prefirie-
ron dejar que el programador asignara funciones a los registros, asumiendo que
pudieran existir diferentes anlisis funcionales para distintas aplicaciones. Los
registros tambin pueden usarse para operaciones de 8 y de 32 bits. e usa un espa-
cio de direcciones segmentado (nmero de segmento de 7 bits, desplazamiento de
16 bits), y se necesitan dos registros para contener una nica direccin. Dos de los
registros se usan tambin como punteros de pila implcitos para el modo del sis-
tema y para el modo normal.

El ZSOOO tambin incluye cinco registros relacionados con el estado del


programa. Dos registros contienen el contador de programa y otros dos la direc-
cin de memoria de un Area de Estado del Programa (Program Status Area,
P.S.A.). Un registro de indicadores de 16 bits contiene varios bits de estado y
control.

El Intel 8086 usa una aproximacin diferente para la organizacin de los


registros. Cada uno de los registros es de uso especial, aunque algunos registros se
pueden utilizar tambin para uso general. El 8086 contiene cuatro registros de
datos de, 16 bits que son direccionables como registros de 16 bits o como regis-
tros de bytes, y cuatro registros puntero e ndice de 16 bits. Los registros de datos
pueden utilizarse como registros de uso general en algunas instrucciones. En
otras, los registros se usan implcitamente. Por ejemplo, una instruccin de multi-
plicacin siempre usa el acumulador. Los cuatro registros puntero se usan siempre
implcitamente en algunas operaciones; cada uno contiene un desplazamiento
dentro de un segmento. Hay tambin cuatro registros de segmento de 16 bits. Tres
de estos cuatro registros de segmento se usan de una forma dedicada e implcita,
para apuntar al segmento de la instruccin en curso (til para instrucciones de
salto), a un segmento que contiene datos, y a un segmento que contiene una pila,
respectivamente. Estos usos dedicados e implcitos proporcionan una codificacin
compacta con el coste de una flexibilidad reducida. El 8086 tambin incluye un
puntero de instruccin y un conjunto de indicadores de 1 bit de estado y control.

El Motorola MC68000 cae en alguna parte entre las filosofas de diseo de


los microprocesadores de Zilog y de Intel. El MC68000 reparte sus registros de 32
bits en ocho registros de datos y nueve de direccin. Los ocho registros de datos
se usan principalmente para manipulacin de datos y se usan en direccionamiento
slo como registros ndice. El ancho de los registros permite operaciones con
datos de 8, 16 y 32 bits, segn determine el cdigo de operacin. Los registros de
direcciones contienen direcciones de 32 bits (no hay segmentacin); dos de estos
registros se usan tambin como punteros de pila, uno para usuarios y otro para el

Arquitectura de Ordenadores I 73
Tema 4

sistema operativo, dependiendo del modo de ejecucin en curso. Los dos registros
se referencian como 7, dado que slo uno de ellos se puede usar en un instante
dado. El MC68000 tambin incluye un contador de programa de 32 bits y un
registro de estado de 16 bits.

Igual que los diseadores de Zilog, el equipo de Motorola quiso un con-


junto de instrucciones muy regular, sin registros de uso especial. Su inters por la
eficiencia del cdigo los condujo a dividir los registros en dos componentes fun-
cionales, ahorrando un bit en cada campo de especificacin de registro. Esto
parece un compromiso razonable entre generalidad total y compacidad del cdigo.

Debe quedar claro qu es lo significativo de esta comparacin. No hay, por


el momento, una filosofa universalmente aceptada sobre la mejor forma de orga-
nizar los registros de la CPU [TOONS81]. Igual que ocurre en el diseo global del
conjunto de instrucciones y algunos otros aspectos de diseo de la CPU, se trata
an de una cuestin de opinin y gustos.

En la figura 10 se ilustra un segundo aspecto instructivo acerca del diseo


de la organizacin de los registros. Esta figura muestra la organizacin de los
registros visibles al usuario del Zilog 80,000 [PHIL85] y del Intel 80386
[ELAY85], dos microprocesadores de 32 bits diseados como ampliaciones del
ZSOOO y 8086, respectivamente3. Estos dos nuevos procesadores usan registros
de 32 bits. No obstante, para proporcionar compatibilidad ascendente para los
programas escritos en las primeras mquinas, los dos nuevos procesadores con-
servan la organizacin de registros original integrada en la nueva organizacin.
Dada esta restriccin en el diseo, los arquitectos de los procesadores de 32 bits
han limitado la flexibilidad al disear la organizacin de los registros.

EL CICLO DE INSTRUCCION
En la seccin 4.2, describimos el ciclo de instruccin de la CPU. La figura
11 repite una de las figuras usadas en esa descripcin (figura 9). Recordamos que
un cielo de instruccin incluye los siguientes subciclos:

3
Dado que el MC68000 ya usaba registros de 32 bits, el MC68020 [MACG841, que es una ampliacin completa a 32 bits,
usa la misma organizacin de registros.

74 Arquitectura de Ordenadores I
ALU, UC y Memoria Principal

Captacin: Llevar la siguiente instruccin de la memoria a la CPU.

Ejecucin: Interpretar el cdigo de operacin y llevar a cabo la operacin


indicada. Interrupcin: Si las interrupciones estn habilitadas y ha ocurrido una
interrupcin, salvar el estado del proceso actual y atender la interrupcin.

Estamos ahora en condiciones de dar alguna explicacin ms acerca del


ciclo de instruccin. En primer lugar, debemos introducir un subciclo adicional,
conocido como el cielo indirecto.

El ciclo indirecto

Hemos visto, en el captulo 10, que la ejecucin de una instruccin puede


involucrar uno o ms operandos de memoria, cada uno de los cuales requiere un
acceso a sta. Adems, si se usa direccionamiento indirecto sern necesarios
accesos a memoria adicionales.

Podemos considerar la captacin de direcciones indirectas como un subci-

clo de instruccin ms. El resultado se muestra en la figura 12. La principal lnea


de actividad consiste en alternar las actividades de captacin y ejecucin de ins-
trucciones. Despus de que una instruccin sea captada, es examinada para
determinar si implica algn direccionamiento indirecto. Si es as, los operandos
requeridos se captan usando direccionamiento indirecto. Tras la ejecucin se
puede procesar una interrupcin antes de la captacin de la siguiente instruccin.

En la figura 13, que es una versin revisada de la figura 12, se muestra otra
forma de ver este proceso que ilustra ms correctamente la naturaleza del ciclo de
instruccin. Una vez que una instruccin es captada, deben identificarse sus cam-
pos, de operando. Se capta entonces de la memoria cada operando de entrada,
pudiendo requerir este proceso direccionamiento indirecto. Los operandos ubica-
dos en registros no necesitan ser captados. Una vez que se ejecuta la operacin,
puede ser necesario un proceso similar para almacenar el resultado en la memoria
principal.

Arquitectura de Ordenadores I 75
Tema 4

Flujo de datos
La secuencia exacta de eventos que tienen lugar durante un cielo de ins-

truccin depende del diseo de la CPU. Podemos, no obstante, indicar qu debe


ocurrir en trminos generales. Asumamos una CPU que emplee un registro de
direccin de memoria (MAR), un registro intermedio de memoria (MBR), un
contador de programa (PC), y un registro de instruccin (IR).

Durante el cielo de captacin se lee una instruccin de la memoria. La fi-


gura 14 muestra el flujo de datos en este ciclo. PC contiene la direccin de la
siguiente instruccin. Esta direccin es llevada al MAR y puesta en el bus de
direcciones. La unidad de control solicita una lectura de memoria, y el resultado

76 Arquitectura de Ordenadores I
ALU, UC y Memoria Principal

se pone en el bus de datos, se copia en MBR y se lleva a IR. Mientras tanto, PC se


incremento en 1, como preparacin para la siguiente captacin.

Una vez terminado el ciclo de captacin, la unidad de control examina el


contenido de IR para determinar si contiene un campo de operando que use direc-
cionamiento indirecto. Si es as, se lleva a cabo un ciclo indirecto. Tal como se
muestra en la figura 15, se trata de un ciclo simple. Los N bits ms a la derecha de
MBR, que contienen la direccin de referencia, se transfieren a MAR. Entonces la
unidad de control solicita una lectura de memoria, para llevar la direccin del
operando deseada a MBR.

Los ciclos de captacin e indirecto son sencillos y predecibles. El ciclo de


instruccin adopta muchas formas ya que depende de cul de las diversas instruc-
ciones mquina est en el IR. Este ciclo puede implicar transferencias de datos
entre registros, lectura o escritura de memoria o E/S, y/o la invocacin de la ALU.

Del mismo modo que los ciclos de captacin e indirecto, el ciclo de inte-
rrupcin es simple y predecible (figura 16). El contenido actual del PC tiene que
ser salvado de manera que la CPU pueda reanudar su actividad normal tras ser

atendida la interrupcin. As, el contenido de PC se transfiere a MBR para ser


escrito en memoria. La posicin de memoria especial reservada para este propsi-
to se carga en MAR desde la unidad de control. Podra ser, por ejemplo, un
puntero de pila. PC se carga con la direccin de la rutina de interrupcin. Como
resultado, el siguiente ciclo de instruccin comenzar captando la instruccin
oportuna.

Arquitectura de Ordenadores I 77
Tema 5

La Ruta de Datos

Introduccin
El Camino de Datos, tambin llamado Unidad de Proceso, es la seccin
del computador encargada de efectuar las operaciones lgicas y aritmticas que
implican las instrucciones que se efectan. Su misin es la de manipular y trans-
formar los datos procedentes de la Memoria o de los registros internos, para
obtener los resultados.

MEMORIA PROCESADOR

INSTRUCCIONES UNIDAD
INSTRUCCIONES DE CON-
TROL

OPERANDOS
RUTA
DATOS RESULTADOS DE
DATOS

La labor del Camino de Datos es soportar el conjunto de operaciones que


precisan las instrucciones del repertorio que es capaz de interpretar la Unidad de
Control. Segn la complejidad de dichos operandos, existen diferentes tcnicas
generales de diseo entre las que destacan las tres siguientes:

Arquitectura de Ordenadores I 78
El juego de instrucciones

1 Esquemas de clculo
Utilizan los recursos disponibles en Electrnica Digital para disear un cir-
cuito capaz de desarrollar algoritmos para la manipulacin de datos, que no tienen
bifurcaciones.

EJEMPLO
Dados los bits a y b, deducir el algoritmo para obtener el bit c, resta de
ambos.

SOLUCIN

El resultado responde a un circuito combinacional, sin bifurcaciones, que


es funcin de las entradas y sigue la siguiente tabla de la verdad.
Entradas Salidas
0 0 0
1 0 1
0 1 1
1 1 0

De la tabla de la verdad se deduce que el bit c responde a la funcin lgica


XOR de a y b.

c=a+b

2 Mquina algortmica
En esta tcnica se contempla la posibilidad de realizar bifurcaciones en
funcin de una condicin.

EJEMPLO
Obtener el algoritmo que responda a la funcin "escaln" la figura 2.
Y

X
0
0 2
Figura 2. Funcin escaln. .

79 Arquitectura de Ordenadores I
Tema 7

SOLUCION

Si x <= 2, entonces y = 0

Si x > 2, entonces y =1

3 Algoritmo interpretacin
Permite desarrollar sistemas ms complejos que los anteriores, soportando
bifurcaciones.

Una operacin sencilla la soporta un recurso que recibe el nombre de Pri-


mitiva de Clculo. Las operaciones complejas se resuelven con varias Primitivas
dando lugar a los Recursos de Clculo. La interconexin de varios Recursos
mediante lneas que controlan el conjunto conforman el Recurso Programable,
que lleva a cabo la misma funcin que el Camino de Datos.

EJEMPLO
Calcular el algoritmo que permite la obtencin de las races de un polino-
mio de segundo grado.

y = ax2+ bx + c

SOLUCIN

El algoritmo que implementa las ecuaciones x, y x2 requiere una serie de


operaciones simples (sumas, restas, multiplicaciones) que sern desarrolladas por
las Primitivas de Clculo. Interconectando adecuadamente las Primitivas se obtie-
ne el Recurso de Clculo que proporciona las races del polinomio.

Los Componentes Fundamentales


El Camino de Datos est formado por tres secciones diferentes:

1 Unidad Aritmtico-Lgica.

2 Registros.

3 Buses o lneas de interconexin.

Arquitectura de Ordenadores I 80
El juego de instrucciones

La Unidad Aritmtico-Lgica (ALU)


Es la seccin ms importante del Camino de Datos y tiene la misin de
llevar a cabo todas las operaciones (aritmticas, lgicas, de desplazamiento, rota-
cin, etc.), que van a precisar las instrucciones del repertorio del procesador.

Internamente la ALU dispone de los operadores necesarios que se analiza-


ron en el captulo anterior. Normalmente, la operacin es didica; es decir, se
efecta sobre dos operandos, produciendo un resultado que ser funcin de la
operacin que se ha seleccionado. Figura 3.

OPERANDO A OPERANDO B

SELECCIN
ALU OPERACIN

RESULTADO
Figura 3. Segn la operacin seleccionada, los operandos
son procesados por la ALU para obtener el resultado.

Los registros
Un registro es un dispositivo digital formado por varias bsculas biestables, cada
una de las cuales tiene la capacidad de guardar, todo el tiempo que se desee, la
unidad mnima de informacin, que es un bit 1 0. En consecuencia, un registro
es un elemento digital que almacena temporalmente informacin binaria.

Para cargar informacin sobre los biestables del registro se dispone de una
seal comn para todos (CARGA). Para leer la informacin contenida en los
biestables de un registro, existe otra seal de control (LECTURA), que saca del
estado flotante que impide la salida del estado lgico almacenado. Figura 4.

En el Camino de Datos existen diferentes tipos de registros segn la in-


formacin que almacenan, pudindose distinguir los siguientes grupos:
Registros de la ALU.
Banco de registros generales.
Registros especiales.

81 Arquitectura de Ordenadores I
Tema 7

Registros de la ALU

La ALU de la mayora de los procesadores dispone de dos registros auxi-


liares: el Acumulador y el Registro de Estado.

LECTURA
(TRIESTADO)

Q Q Q Q Q Q Q Q
CARGA D D D D D D D D REGISTRO

INFORMACIN DE ENTRADA
Figura 4. El registro de 8 bits pasa a contener la informacin de entrada al
activar la seal CARGA. El valor contenido en los biestables pasa a las l-
neas de informacin de salida al activar la seal LECTURA.

El Acumulador (ACC) es un registro cuyo tamao coincide con la longitud


de la palabra del procesador, que es la de los operandos de la ALU. Se emplea
para contener uno de los operandos o el resultado, aunque tambin realiza ambas
cosas a la vez en muchas ocasiones. En la figura 5 se muestra al Acumulador
soportando el valor de uno de los operandos de entrada a la ALU.

En los microprocesadores es muy habitual que el Acumulador guarde uno


de los operandos de la ALU y, despus de la operacin, el resultado que se ha
generado. Segn cundo se active la seal CARGA del Acumulador, recoger
desde el bus de datos el operando o el resultado.

OPERANDO

ACC OPERANDO

SELECCIN
ALU OPERA-

RESULTA-
Figura 5. El Acumulador introduce el operando A en la
ALU.

Arquitectura de Ordenadores I 82
El juego de instrucciones

Figura 6. Segn el momento en que se habilite la seal CARGA, se carga


el Acumulador con el operando que viene por el bus de datos desde la
Memoria, o bien, con el resultado producido por la ALU.

Recibe el nombre de Registro de Estado el que se encarga de contener lo,


sealizadores, banderas o flags, que son bits que informan si se ha producido o no
una condicin especial al realizar la ALLI una operacin. Los sealizadores ms
usuales son:
ACARREO (C): Si se pone a 1 el bit correspondiente a cate sealizador, indica
que se ha producido acarreo al sumar los 2 bits de ms peso de
los operandos. Tambin se pone a 1 cuando hay acarreo en dichos
bits al proceder a restar loa operandos.
CERO (Z): Este bit se pone a 1 si el resultado es 0.
PARIDAD (P): Si el procesador trabaja con paridad par, este bit se pone a 1,
cuando el nmero de 1 del resultado es par.
El Registro de Estado tiene el mismo tamao que la palabra que emplea el
procesador. pero slo algunos de sus bits actan como sealizadores, siendo
indiferentes los restantes. Figura 7.

IGER T
S O
R DE T
SE ADO

Z P C

CEO
R ACARO
ER
PARIDAD

Figura 7. Estructura de un Registro de Estado de 8 bits, de los cuales slo


actan como sealizadores tres.

EJEMPLO
Indicar el valor de los sealizadores C, Z y P, si la ALU de la figura 8 rea-
liza una operacin de suma sobre los operandos de entrada. El procesador trabaja
con paridad par, que es la que detecta P.

83 Arquitectura de Ordenadores I
Tema 7

Figura 8. La ALU efecta la suma de los operandos de entrada.

SOLUCIN

Z=0

C=1

P =0

Banco de registros generales


En el Camino de Datos existe un conjunto de registros de propsito gene-
ral cuya funcin principal es la de guardar datos y direcciones que se usan mucho
en el programa en curso. Como el tiempo de acceso a la Memoria Principal exter-
na es mayor que a dichos registros, su correcta utilizacin permite mejorar la
velocidad de procesamiento de los programas si se almacena en ellos informacin
de uso muy frecuente.

En la figura 9 se muestra un Banco de ocho registros con sus lneas de


control, tres de las cuales se emplean para seleccionar el registro a acceder, otra
para indicar si se va a escribir sobre un registro el contenido del bus de datos , y
una ms (LECTURA) para indicar si es el contenido del registro elegido el que va
a depositarse sobre el bus de datos. En este caso se eliminar la condicin de
triestado que tiene la conexin de salida de informacin del banco con el bus.

Figura 9. El registro escogido con las tres lneas de seleccin puede


cargarse con el contenido del bus de datos si se activa la seal de
ESCRITURA, o bien, la informacin que posea puede depositarse en el
bus de datos si se activa la seal de LECTURA.

Arquitectura de Ordenadores I 84
El juego de instrucciones

Registros especiales

Para unificar la descripcin de los registros se incluye en el Camino de Da-


tos algunos registros muy especficos como el Contador de Programa, el
Apuntador de la Pila y el Registro de Direcciones de Datos.

El Contador de Programa (PC) contiene la direccin de la Memoria Prin-


cipal donde se encuentra el cdigo de la siguiente instruccin a ejecutar.

El Apuntador de la Pila (SP) contiene la direccin por donde entran y sa-


len los datos en una zona especial de la Memoria Principal, llamada Pila. Algunas
instrucciones especiales, como la de llamada a subrutina, emplean automtica-
mente la Pila para guardar la direccin de retorno al programa principal. Figura
10.

85 Arquitectura de Ordenadores I
Tema 7

El Registro de Direcciones de Datos contiene la direccin de la Memoria


donde se ubica el operando o el resultado de la instruccin en curso.

Los buses o lneas de interconexin


La ALU y los registros estn comunicados por conjuntos de lneas que se
llaman buses. Un bus es un grupo de lneas digitales que soportan el mismo tipo
de informacin del computador. De esta manera existen tres tipos de buses:

Arquitectura de Ordenadores I 86
El juego de instrucciones

Bus de direcciones
Est formado por las lneas que soportan la direccin binaria de la Memo-
ria. El nmero de lneas de este bus es un parmetro muy importante porque
determina la cantidad de posiciones que puede alcanzar la Memoria. As, si el
nmero de lneas del bus de direcciones es n, la Memoria puede alcanzar un mxi-
mo de 2n posiciones.

Bus de datos
Consta de las lneas que transportan la informacin que se lee o escribe y
que puede consistir en datos o instrucciones. Tambin el nmero de lneas de este
bus es muy importante porque determina la cantidad de bits que pueden transferir-
se en cada operacin de lectura o escritura.

Bus de control
Lo componen las lneas auxiliares que indican el tipo de operacin (lectura
/ escritura), la sincronizacin (seal de reloj), la zona a acceder (Memoria o E/S),
etc.. Los valores que toman las lneas de este bus se obtienen en la Unidad de
Control de la interpretacin del cdigo OP de la instruccin en curso.

EJEMPLO
Si un procesador dispone de una Memoria con 512 posiciones de 32 bits
cada una, deducir el tamao del bus de direcciones y del bus de datos.

SOLUCIN

Bus de direcciones: 9 lneas (29 = 512)

Bus de datos: 32 lneas para soportar los 32 bits de cada posicin de Me-
moria.

Anlisis de Arquitecturas
El Camino de Datos, como los dems componentes del computador, exige
un tratamiento especial para conseguir un diseo eficaz. En el caso frecuente de
utilizar un solo Recurso de Clculo programable para soportar la ALU, recibe el
nombre de Camino de Datos Secuencializado indicando la necesidad de realizar
algunas operaciones en serie a base de empalmar varias sencillas para desarrollar
un algoritmo complejo.

Dependiendo del nmero de buses de datos que se utilicen, existen tres ar-
quitecturas de Caminos de Datos Secuencializados.

87 Arquitectura de Ordenadores I
Tema 7

Camino de Datos Secuencializado con un bus


Es la arquitectura ms usada comercialmente para la construccin de pro-
cesado; debido a su bajo coste. El principal inconveniente es su lentitud al tener
que utilizar ms ciclos para implementar la misma instruccin. En la figura 11 se
muestra el esquema general al que responde esta arquitectura.

Figura 11. Arquitectura de un Camino de Datos Secuencializado de un


bus. Las seales de control ZI, Z2 y Z3 son de lectura y desbloquean el estado de
alta impedancia para permitir cargar en el bus de datos el contenido de los regis-
tros. Las seales Z3, Z4 y ZS escriben la informacin del bus de datos en los
registros respectivos.

La caracterstica ms relevante de esta arquitectura consiste en la existen-


cia de nico bus que hay que usarlo tanto para depositar datos en los registros,
como ira recogerlos de los mismos. El bus debe ser bidireccional.

Como el bus queda compartido por los registros y por la ALU, hay que uti-
lizar adecuadamente las seales de control (Z) para determinar claramente el
camino de informacin. Debe haber un transmisor cuyo contenido se lee y se
deposita en el bus de datos, y un receptor que se carga con esa informacin. Las
seales de control que gobiernan las transferencias son generadas por la Unidad
de Control al interpretar cada fase de la instruccin en fase de ejecucin (en cur-
so).

Las seales que permiten la lectura del contenido de los registros actan
sobre buffers aritmticos triestado, los cuales dejan pasar la informacin desde el
registro al bus de datos. Si se activasen al mismo tiempo varias seales de lectura
y se desbloqueasen varios buffers, se recibiran diferentes niveles lgicos en las
lneas del bus de datos, dando lugar a "conflictos" que daaran al equipo fsico.

El funcionamiento del buffer triestado es muy sencillo. Acta como un


amplificador que dispone de una lnea de entrada (ENTRADA), otra de salida
(SALIDA) y una tercera (Z), que permite o no que el nivel lgico de la entrada
pase amplificado a la salida o no. La tabla de la verdad que representa su funcio-
namiento es la siguiente.

Arquitectura de Ordenadores I 88
El juego de instrucciones

Z SALIDA
0 ALTA IMPEDANCIA
1 ENTRADA
Si Z = 0, por la salida del buffer no sale nada, es decir, no hay nivel lgico
alto ni tampoco bajo. No hay nada; es como si se tratase de una lnea al aire.
Salida en alta impedancia.

En la figura 12 se muestra una lnea del bus de datos que soporta dos l-
neas por las que puede recibir un bit de informacin si se libera el estado triestado
de los buffer controladores. Si ZI = 1 y Z2 = 0, la lnea del bus de datos se carga
con el nivel A. Si Z1 = 0 y Z2 = 1, la lnea del bus se carga con el valor de B. Si
ZI = Z2 = 0, la lnea queda desconectada de A y B. Pero si Z1 = Z2 = 1, se produ-
ce un conflicto porque a la lnea del bus se recibe, simultneamente, el nivel de A
y el de B. Si son opuestos, se producir un cortocircuito y, adems de quedar
indeterminado el nivel en la lnea del bus, se ocasionarn daos a los circuitos
integrados.

Figura 12. Los dos buffer triestado controlan el acceso a la lnea del bus de
datos de las seales digitales A y B. Slo puede activarse en cada momento una
seal Z, para evitar conflictos.

EJEMPLO

Si en el esquema de la figura 12, A = 0 y B = 1, indicar el valor de Z1 y Z2


para cargar la lnea del bus de datos con el valor 0.

SOLUCIN,

Para que el valor de A se deposite en la lnea del bus de datos es preciso


que Z1 = 1. Adems, Z2 = 0 para que no se produzca la carga simultnea de B y
aparezcan los conflictos.

EJEMPLO

Con respecto a la arquitectura del Camino de Datos de la figura 11, indicar


el 3lor de las seales de control Z1, Z2, Z3, Z4, Z5 y Z6 para que el resultado que
se tiene a la salida de la ALU se deposite en el registro RO

SOLUCIN

Z3=1 y Z6=1

89 Arquitectura de Ordenadores I
Tema 7

Z1 =Z2=Z4=Z5=0

El nmero de seales de control que se precisan para manejar los registros


es el doble de la cantidad de registros que existe, puesto que cada uno precisa de
una seal para ser escrito y otra para ser ledo.

EJEMPLO

El Banco de Registros de un Camino de Datos consta de 256 registros de 8


bits. Calcular el nmero de lneas que debe dedicar la Unidad de Control para su
manejo.

SOLUCIN

Un total de 512 lneas de control, 256 para la lectura y otras tantas para la
escritura.

Figura 13. Arquitectura de un Camino de Datos Secuencializado de un


bus. Las n lneas de Z1 seleccionan uno de los registros. Z2 lee el contenido del
registro accedido y lo deposita en el bus de datos. Z5 carga en el registro accedido
el contenido del bus.

Una variante respecto a la arquitectura de un bus est basada en la agrupa-


cin de todos los registros en un Banco de Registros. De esta forma se reduce el
nmero de seales de control necesarias para su gobierno. Si el nmero total de
registros del banco es 2n, se precisan n seales para seleccionar el registro a acce-
der, una ms para la lectura del registro accedido encargada de la apertura del
buffer triestado, y una ms, aunque no es imprescindible, para la escritura del
registro accedido por el contenido del bus de datos. Figura 13.

Obsrvese en el esquema de la figura 13 que el resultado de la ALU puede


depositarse sobre el bus de datos si se activa Z3 y queda presente como nuevo
operando B de entrada.

EJEMPLO

Arquitectura de Ordenadores I 90
El juego de instrucciones

Dibujar el esquema de un Camino de Datos Secuencializado de un bus con


un Banco con cuatro registros. Indicar todas las seales de control precisas.

SOLUCIN

Figura 14. Unidad de Proceso Secuencializada de un bus con un Banco de


cuatro registros.

EJEMPLO

En el esquema de la figura 14 indicar el valor que deben tomar las seales


de control para cargar en el Acumulador el contenido del registro R2.

SOLUCIN

Se comienza seleccionado en el Banco al registro R2, para lo cual Z2 = 1 y


Z1 = 0. Despus, hay que abrir la salida del Banco al bus de datos, Z3 =1. Conse-
cuentemente Z6 = 0. Ahora en el bus se dispone del contenido de R2 y para
cargarlo` en el Acumulador Z4 = 1. La seal Z5 debe ser 0.

Camino de Datos Secuencializado de dos buses


Aadir un nuevo bus en la arquitectura interna del procesador representa
un incremento del coste. Por el contrario, se mejora notablemente la velocidad al
sedar reducidos los ciclos que se necesitan para desarrollar una operacin. En la
figura 15 se muestra una arquitectura de dos buses, ambos unidireccionales.

91 Arquitectura de Ordenadores I
Tema 7

Figura 15. Arquitectura de una Unidad de Proceso Secuencializada de dos


buses unidireccionales.

EJEMPLO

Disear el esquema de una Unidad de Proceso Secuencializada de dos bu-


ses Bidireccionales y un Banco de cuatro registros. Representar todas las seales
de control necesarias.

SOLUCIN

Figura 16. Arquitectura de una Unidad de Proceso Secuencializada de dos


buses y un Banco de cuatro registros.

El Bus de Datos 1, figura 16, se encarga de llevar los datos desde los regis-
tros o la Memoria hasta la ALU. El Bus de Datos 2 realiza la funcin inversa, es
decir, lleva el resultado de la ALU al Banco o a la Memoria.

Arquitectura de Ordenadores I 92
El juego de instrucciones

EJEMPLO
En el esquema de la arquitectura de la figura 16, indicar los valores que
deben tomar las seales de control para cargar el Acumulador con el contenido del
registro R1.

SOLUCIN

Se comienza seleccionando el registro R1: Z1 = 1 y Z2 = 0. Al mismo


tiempo se abre el camino al Bus de Datos 1 haciendo Z3 = 1 (Z5 = 0). Finalmente,
para cargar el Acumulador con el valor que lleva el Bus de Datos 1 se activa Z4 =
1.

Una variante sobre la arquitectura descrita ofrece la particularidad de utili-


zar dos buses de datos bidireccionales. Esta variante supone un aumento del rendi-
miento y una mejora en la capacidad de procesamiento. Figura 17

Figura 17. Arquitectura de una Unidad de Proceso Se-


cuencializada con dos buses bidireccionales.
EJEMPLO

Con relacin a la arquitectura mostrada en la figura 17, indicar el valor que


toman las seales de control si el Banco de Registros contiene 4 y se desea cargar
el contenido del Acumulador en el registro R3.

SOLUCION

En principio se deposita el contenido del Acumulador en el Bus de Datos


2, haciendo Z3 = 1. Despus se selecciona el registro R3 haciendo Z8 = Z9 = 1.
Finalmente, para cargar R3 con el contenido del Bus de Datos 2, Z6 = 1.

Camino de Datos Secuencializado de tres buses


Es la arquitectura menos utilizada comercialmente dado su elevado coste,
derivado del uso de un tercer bus y del incremento en el conexionado de todos los
componentes a los tres buses.

93 Arquitectura de Ordenadores I
Tema 7

Este tipo de arquitectura slo es aconsejable para computadores especiali-


zados que requieran una gran potencia de cmputo. En la figura 18 se muestra el
esquema general al que responde este tipo de Camino de Datos.

Figura 18. Esquema de un Camino de Datos Secuenciali-


zado de tres buses, con registros independientes.
EJEMPLO

Sobre el esquema de la figura 18 indicar los valores que deben tomar las
seales de control para realizar la operacin

REG 0 = REG 0 + REG 1.


SOLUCION

Esta operacin puede efectuarse en dos ciclos gracias a la existencia de


tres buses.

cidro: Z3 = 1 para cargar el contenido de REG 0 en el Bus 2 y Z2 = 1


1er
para cargar el operando del REG 1 en el Bus 1. Consecuentemente Z1 = Z4 = 0.
Los

Los dos operandos estn en las entradas de la ALU. Se procede a seleccio-


nar la operacin de la ALU, que ser la suma.

2- ciclo: El resultado de la ALU, que es la suma de los registros, se halla


presente en el Bus 3 y para cargarlo en REG 0 se activa Z5 = 1.

Una variante de la arquitectura de tres buses es la que agrupa todos los re-
gistros en un Banco, como se muestra en la figura 19.

Arquitectura de Ordenadores I 94
El juego de instrucciones

Figura 19. Unidad de Proceso Secuencializada de tres bases con banco de


Registros.

En esta arquitectura slo es posible seleccionar un registro del Banco en


cada ciclo, por lo que son precisos dos ciclos para situar los operandos en las
entradas de la ALU.

EL CAMINO DE DATOS DE LA MAQUINA SENCILLA

La Mquina Sencilla (MS) dispone de un slo Recurso de Clculo en su


ALU y~ de un slo bus de datos, por lo que se puede decir que se trata de una
Unidad de Proceso Secuencializada de un bus.

Se describen las caractersticas de los componentes del Camino de Datos


de la MS: ALU, registros y bases.

Unidad Aritmtico-Lgica de la MS
Para soportar las cuatro instrucciones del repertorio, la MS debe disponer de una
ALU que sea capaz de sumar aritmticamente (ADD), realizar la operacin lgica de compa-
racin (CMP), y dejar pasar de forma transparente a uno de sus operandos (MOV).

Para realizar la suma dispone de un sumador binario paralelo de 16 bits, con despla-
zamiento de acarreo en serie. Lamentablemente carece de sealizador de acarreo final.

Para la comparacin de operandos de 16 bits dispone de 16 puertas XOR de dos en-


tradas. Si los dos operandos son iguales, todas las puertas tendrn un 0 en su salida y el
sealizador CERO (Z) se pondr a 1.

Finalmente, existe una posibilidad de dejar pasar, sin modificar, el operando introdu-
cido por su entrada B.

En la figura 20 se muestra el esquema de la ALU de la MS.

95 Arquitectura de Ordenadores I
Tema 7

Figura 20. Esquema de la ALU de la MS, capaz de realizar la operacin


de suma, la comparacin lgica de los operandos y el paso transparen-
te del operando B.
Para seleccionar una de las tres posibles operaciones de la ALU se emplean las sea-
les ALU1-ALU0, que controlan la entrada del multiplexor MPX que se deja pasar a la salida.
Responden a la siguiente tabla.
ALU1 ALUO OPERACIN
0 0 A+B
0 1 B
1 0 COMPARACION
1 1 NO USADA
EJEMPLO

Indicar, paso a paso, las acciones que se deben ejecutar en la MS para rea-
lizar la suma de dos datos A y B procedentes de la memoria, si A =
0001011010001110 y B = 1000011100100110. Calcular el resultado de la opera-
cin.

SOLUCIN

En principio se cargan los dos operandos procedentes de la memoria en los


registros de entrada a la ALU A y B. Esta operacin se efecta de forma autom-
tica y transparente, es decir, sin control por parte del programador que no tiene
acceso a esa pareja de registros. La Unidad de Control se encargar de activar la
seal de CARGA del registro A cuando salga de la Memoria el primer operando y
posteriormente, cuando salga el segundo, activar la carga del registro B. Figura
21.

Arquitectura de Ordenadores I 96
El juego de instrucciones

Figura 21. Cuando sale de la Memoria el primer ope-


rando la Unidad de Control, activa la carga del registro A.
Despus, har lo mismo con el B cuando salga el segun-
do operando.
Una vez cargados A y B, se procede a la siguiente fase en la ALU. Ambos
operandos entran al Sumador y al Comparador, que produce cada uno el corres-
pondiente resultado, que se refleja en la figura 22.

Figura 22. Los operandos A v B se aplican al Sumador y al Comparador,


produciendo ambos los correspondientes resultados que se indican en el esquema.

Finalmente, habr que indicar la operacin que se desea seleccionar que


produzca como resultado la ALU. En este ejemplo se elige ALU1 = ALUD = 0 y
en consecuencia, la operacin A + B. Figura 23.

Figura 23. Las lneas de seleccin ALU1-ALU0 determinan que sea el va-
lor de la suma A + B el que salga por el multiplexor. El sealizador CERO
se cargar con un 0, porque el resultado ha sido distinto de 0.

97 Arquitectura de Ordenadores I
Tema 7

Los registros de la MS
La MS carece de Banco de Registros y de registros independientes. Los
dos registros internos que guardan los operandos de la ALU, A y B, se cargan
automticamente y no son accesibles al programador, es decir, no puede leer ni
escribir su contenido. Su cometido es mantener estables los valores de los operan-
dos durante el transcurso de la operacin.
El Registro de Estado slo dispone de un sealizador, el CERO (Z), que se pone a 1 cuando el
resultado de una operacin de la ALU ha sido 0. Figura 24.

Figura 24. Sealizador nico disponible en la MS.

El Contador de Programa (PC) es un registro de 7 bits que guarda la direc-


cin de la Memoria en donde se encuentra el cdigo de la siguiente instruccin
del programa a ejecutar. Asociado al PC existe un incrementador que se encarga
de obtener la siguiente direccin a la anterior, excepto cuando se trata de la ins-
truccin de bifurcacin condicional (BEQ). Figura 25.

Figura 25. Registro PC con un incrementador asociado.

Otro registro de la MS es el Registro de instrucciones que ms bien co-


rresponde a la seccin de la Unidad de Control, pero que se comenta aqu para
unificar la descripcin de todos los registros de este sencillo computador. Se carga
con los 16 bits que corresponden con el formato de la instruccin en fase de eje-
cucin. Est dividido en tres campos, uno que guarda el cdigo de la Operacin
(CO), otro la direccin del operando fuente (F) y el ltimo, la direccin del ope-
rando destino (D). Dichos campos tienen una longitud de 2, 7 y 7 bits,
respectivamente. Figura 26.

Arquitectura de Ordenadores I 98
El juego de instrucciones

Figura 26. El Registro de instrucciones contiene el cdigo de la instruccin


en curso. Consta de tres campos: cdigo de la operacin, operando fuente
y operando destino.

El campo F (fuente) y el D (destino) del Registro de instrucciones corres-


ponden con las direcciones de la Memoria donde se encuentran los operandos.
Para cargar el bus de direcciones existen tres posibilidades:

1 El PC cuando se va a buscar una nueva instruccin.

2 El campo F del Registro de instrucciones, cuando se busca el operando


fuente.

3 El campo D del Registro de instrucciones, cuando se busca al operando


destino.

En la figura 27 se muestra el esquema que incluye un multiplexor de cua-


tro entradas, para seleccionar desde que sitio se proceder a cargar al bus de
direcciones de la Memoria.

Figura 27. El bus de direcciones de la Memoria se puede cargar, a travs del control del multiplexor,
desde tres sitios: PC, D y F.

Los buses de la MS
La MS dispone de los tres buses tpicos de cualquier computador: Bus de
Direcciones, Bus de Datos y Bus de Control.

99 Arquitectura de Ordenadores I
Tema 7

La longitud de la palabra utilizada por la MS es de 16 bits y esa longitud


tiene su bus de datos. Es bidireccional y permite la transferencia de instrucciones
desde la Memoria al Registro de instrucciones y la de datos a la ALU. Tambin
lleva los resultados de la ALU hasta la Memoria.

El bus de direcciones es unidireccional ya que la informacin siempre se


dirige hacia la Memoria. Consta de siete lneas, con las que se puede direccionar
27 = 128 posiciones de 16 bits cada una de ellas.

Finalmente, el bus de control consta de una serie de lneas cuyos valores


son determinados por la Unidad de Control, que dirige el funcionamiento del resto
de los componentes del computador. En la figura 28 se muestran las lneas del bus
de control que se encargan de controlar el comportamiento de los diversos ele-
mentos del Camino de Datos, para ejecutar cada instruccin.

Figura 28. Lneas que configuran el bus de control de la MS.

En la figura 29 se muestra un diagrama de bloques que intenta mostrar la


interconexin de los elementos del computador a travs de los tres buses.

Figura 29. Conexin de los bloques de la MS a travs de los buses.

Finalmente, en la figura 30 se ofrece el esquema completo del Camino de


Datos de la MS.

Arquitectura de Ordenadores I 100


El juego de instrucciones

Figura 30. Esquema del Camino de Datos de la MS.

EJEMPLO

Si se supone que el Registro de Instrucciones de la MS contiene el cdigo


correspondiente a la instruccin ADD 20,21 y que las direcciones de la Memoria
20 H y 21 H contienen los valores 0001 H y 0002 H, respectivamente, indicar, con
grficos, los pasos necesarios y el valor que toman las seales de control implica-
dos en ellos, para llevar a cabo dicha instruccin.

SOLUCIN

1- Para obtener el operando Fuente de la Memoria, se carga el bus de di-


recciones con el campo F del Registro de Instrucciones. Esto supone que MPX1 =
1 y MPXO = 0. Se lee dicha posicin (20 H) depositndose en el bus de datos su
contenido 0001 H. Se activar la carga del registro B y guardar dicho valor.
Figura 31.

101 Arquitectura de Ordenadores I


Tema 7

Figura 31. Carga del operando fuente en el registro B.

2- Para cargar el operando destino en el registro A, se comienza cargando


el bus de direcciones con el campo D del RI, o sea, con el valor 21 H. Para ello
MPX1 =1 y MPXO = 0. As, el bus de datos se cargar con el contenido de la
direccin 21 H que es 0002 H. Se puede proceder a activar la seal de carga del
registro A. figura 32.

Figura 32. Carga del operando destino en el registro A.


3 Finalmente, se debe proceder a realizar la suma de los operandos contenidos en los registros A y
B, almacenando el resultado en la direccin del operando d tino. Para elegir la operacin suma se hace
ALUD = ALU1 = 0. El resultado H) que sale por la ALU se procede a escribirlo en la direccin 21 H que es
la operando destino, lo que supone que MPX1 = MPXO = 1. Figura 33.

Figura 33. Suma de los operandos contenidos en A y B 'N, almacenamiento del resultado en la di-
reccin del operando destino.

EL CAMINO DE DATOS DE LA M+

A1 igual que la MS este computador hipottico, diseado con fines didc-


ticos y emulado mediante un programa que se incluye en esta obra, el Camino de

Arquitectura de Ordenadores I 102


El juego de instrucciones

Datos de la M+ dispone de un nico Recurso de Clculo Programable y de un


nico Bus de Datos, por lo que se considera una Unidad de Proceso Secuenciali-
zada de un bus. Se describen los tres componentes que configuran el Camino de
Datos de la M+: ALU, registros y buses de interconexin.

La Unidad Aritmtico-Lgica

Esta seccin se encarga de efectuar las operaciones aritmticas de suma y


resta, las operaciones aritmticas AND, NOT, OR y XOR y deja pasar sin modifi-
car un operando. Adems, tiene un operador que incrementa una unidad un
operando. Los operadores que contiene para realizar estas operaciones son simila-
res a los expuestos en el Captulo 3.

Se utiliza un multiplexor (MPX) de ocho entradas para seleccionar en la


salida de la ALU el valor que proporciona el operador seleccionado. Figura 34.

Figura 34. Esquema de la ALU de la M+

Las tres lneas de control del MPX que determinan la salida de la ALU
(ALU0, ALU1 y ALU2) toman los valores que se indican en la tabla 1 para cada
una de las posibles operaciones.
ALU2 ALU1 ALU0 OPERACIN
0 0 0 SUMA
0 0 1 RESTA
0 1 0 AND
0 1 1 OR
1 0 0 XOR
1 0 1 NOT
1 1 0 PASO TRASPARENTE
1 1 1 INCREMENTO

103 Arquitectura de Ordenadores I


Tema 7

Tabla 1. Seleccin de la operacin que proporciona la ALU, mediante las tres seales que contro-
lan el multiplexor.

Obsrvese que la seal ALU0, cuando ALU1 = ALU2 = 0, selecciona la


operacin de suma de los operandos cuando toma el valor 0, que tambin se intro-
duce al sumador-restador, actuando de seal S/R, o sea, seleccionando la
operacin. En caso de que ALUD = 1, se realiza la resta.

EJEMPLO

Exponer detalladamente y con ayuda de grficos las accio-


nes que realiza la M+ para efectuar la suma de los datos A =
00011001 y B = 10011011.

SOLUCIN

Los operandos A y B se introducen a todos los operadores


con dos entradas y cada uno de ellos realiza la funcin correspon-
diente. En el operador sumador-restador se elige la operacin a
realizar empleando la seal ALUD, que si vale 0, suma y si vale 1,
resta. En la figura 35 se muestran los operandos que reciben los
operadores de la ALU.

Figura 35. Los operadores reciben los operandos y el su-


mador-restador proporciona la suma de ambos por tener
la seal ALU0 = 0.

Arquitectura de Ordenadores I 104


El juego de instrucciones

Figura 36. Las lneas de control del multiplexor determinan


que en la salida del mismo se obtenga la suma de los
operandos. Los sealizadores se cargan en este ejemplo
con el valor 0.
Adems de valer ALU0 = 0, las seales ALU1 = ALU2 = 0 para que el
multiplexor elija la entrada 0 para proporcionarla en su salida. Como el suma-
dor-restador introduce su resultado por las entradas 0 y 1 del MM, en este caso se
obtiene como resultado A + B.

Si se hubiese deseado realizar la resta, la seal ALDO = 1. De esta forma


el sumador-restador realizara la resta y por las entradas 0 y 1 del MPX se tendra
dicho valor. La salida del MM, al ser ALUD = 1 y ALU1 = ALU2 = 0, sera la
correspondiente ala entrada 1, o sea, A - B.

Finalmente, habr que indicar a los flip-flop que implementan los seali-
zadores de acarreo (FC) y de cero (FZ) que se carguen. El FC se carga con el
acarreo de salida del sumador-restador (Cout) y FZ de la salida de un comparador
de los 8 bits, formado por puertas XOR. Figura 36.

Los registros
La M+ dispone de S registros de 8 bits. Figura 37

105 Arquitectura de Ordenadores I


Tema 7

Figura 37. Representacin grfica de los cinco registros de trabajo de la M+.

El Acumulador participa en la mayora de las operaciones de la ALU con-


teniendo uno de los operandos. Su conexin con el bus de datos se controla
mediante dos seales. La seal ACcar, sirve para cargar en el Acumulador el
contenido del bus de datos. Por otra parte, la salida del Acumulador est conecta-
da con el bus de datos mediante un buffer triestado, que libera el estado flotante
cuando se activa la seal ACbus, depositando en el bus de datos el contenido
existente en ese momento en el Acumulador.

Para seleccionar uno de los cuatro registros del Banco formado por B, C,
D y E, existen las seales de control SELregO y SELregl. La carga del registro
seleccionado con el contenido del bus de datos se consigue activando la seal
REGcar, y la apertura de la salida del registro seleccionado al bus de datos se
consigue eliminando el estado flotante mediante la activacin de REGbus. Figura
38.

Existe la posibilidad de cargar el contenido de la pareja de registros D-E


en el Registro de Direcciones de Datos, de forma que dirH y dirL se carguen con
D y E, respectivamente. Esto posibilita el poder guardar la direccin de un ope-
rando en D-E e implementar dos instrucciones del repertorio (LDAX y STAX)
que utilizan el modo de direccionamiento por pareja de registros indirecto.

Figura 38. Las seales SELreg seleccionan el registro a acceder. La seal REG,, deposita el con-
tenido del bus en el registro elegido y la seal REGbus realiza la operacin contraria.

E1 registro Contador de Programa (PC) contiene la direccin de la Memo-


ria donde se encuentra la siguiente instruccin a ejecutar. Tiene un tamao de 16
bits y su contenido se deposita sobre el bus de direcciones. Asociado al PC existe
un incrementador (+1) para obtener automticamente la siguiente instruccin en
secuencia, cuando sale el valor del PC. Figura 39.

Figura 39. Representacin del Contador de Programa con su incrementador auxiliar.

Arquitectura de Ordenadores I 106


El juego de instrucciones

El bus de direcciones tambin puede ser cargado con valores que circulen
por el bus de datos con el objetivo de acceder a posiciones de operandos. Para esta
misin existe el Registro de Direcciones de Datos de 16 bits, que se compone de 2
secciones de 8 bits cada una: dirH y dirL. Las seales Hcar y Lcar permiten
cargar el contenido del bus de datos en dirH y dirL, respectivamente. El conjunto
de los dos registros forman los 16 bits que se depositan en el bus de direcciones
cuando se desea acceder a un operando. Figura 40.

Figura 40. Desde el bus de datos se pueden cargar los dos registros que configuran el Registro de
Direcciones de Datos que sirve para apuntar direcciones de operandos.

Para seleccionar las dos posibilidades de cargar el bus de direcciones se


emplea un multiplexor de dos entradas, controlado con la lnea selDIR que deter-
mina si es el PC o el Registro de Direcciones de Datos el que suministra el valor
al bus de direcciones. Figura 41.

Figura 41. El bus de direcciones puede ser cargado desde el PC o desde el Registro de Direcciones
de Datos.

La M+ dispone de dos registros elementales de 1 bit cada uno, que funcio-


nan como flip-flop. Se trata de los dos sealizadores disponibles: Acarreo (FC) y
Cero (FZ). Estos flip-flops estn conectados con las lneas p7 y DO del bus de
datos, respectivamente.

El sealizador de acarreo toma el valor lgico 1 cuando, al realizar una


suma, hay acarreo al sumar los dos bits de ms peso de los operandos. Tambin,

107 Arquitectura de Ordenadores I


Tema 7

cuando se efecta una resta, FC = 1 si hay llevada en la diferencia de los dos bits
de ms peso de los operandos.

El sealizador de cero (FZ) toma el valor lgico 1 cuando el resultado de


la operacin que acaba de realizar la ALU es 0.

Figura 42. Los dos multiplexores seleccionan la carga de los sealizadores, que puede realizarse
desde las correspondientes salidas de la AGU o desde las lneas D7 y DO del bus de datos.

Las bsculas biestables que contienen los sealizadores se pueden cargar


desde la salida de la ALU o bien desde el bus de datos. Para seleccionar una de
dichas posibilidades, se usan dos multiplexores de dos entradas cada uno como se
muestra en la figura 42.

La seal FLcar, comn para las dos bsculas, determina el momento en que
se cargan los sealizadores con la salida de los multiplexores, los cuales son
controlados con la seal comn selFL. Las lneas D7 y DO del bus de datos se
cargan con el valor de los sealizadores cuando se activa la seal FLbus, que depo-
sita el valor de los biestables sobre dichas lneas del bus de datos.

Finalmente, la M+ dispone de otro registro que se halla ubicado en la sec-


cin correspondiente a la Unidad de Control. Se trata del Registro de
Instrucciones (RI), que tiene 8 bits y se carga con el cdigo de la instruccin a
ejecutar. Cuando el cdigo de una instruccin viene por el bus de datos, se carga
en RI al activarse la seal RI,a,. Figura 43.

Figura 43. Conexin y control del Registro de Instrucciones con el bus de datos.

Arquitectura de Ordenadores I 108


El juego de instrucciones

Buses de interconexin
La M+ dispone de un bus de datos de ocho lneas que transfiere datos e
instrucciones entre la Memoria y el Camino de Datos.

El bus de direcciones est compuesto por 16 lneas que direccionan una de


las 64 K posiciones que pueden existir en la Memoria.

El bus de control est formado por 20 lneas, que corresponden a las sea-
les de control que se han descrito en el Camino de Datos, as como la de lectura /
escritura (l/e) que se aplica a la Memoria.

En la figura 44 se muestra el esquema completo del Camino de Datos de la


M+.
EJEMPLO

Si se supone que la M+ est ejecutando la instruccin MOV B,


C y ya la ha decodificado, indicar grficamente los pasos necesa-
rios y valor que toman las seales de control implicadas en ellos,
para llevar a cabo dicha instruccin.

109 Arquitectura de Ordenadores I


Tema 7

Figura 44 Esquema completo del Camino de Datos de la M+

Arquitectura de Ordenadores I 110


El juego de instrucciones

Asimismo, indicar cul ser el contenido de los registros B y C final,


si inicialmente contenan B=11000010 y C=00000111.

SOLUCIN

1 El operando fuente es el registro B, por lo que su contenido ha


de cargarse en el acumulador. Figura 45.

2- A continuacin se debe proceder al paso transparente del ope-


rando a travs de la ALU. Para ello, ALU0=0 y ALU1=ALU2=1. El
resultado que sale de la ALU se debe cargar en el registro C. Figura 46. La
instruccin MOV no afecta al contenido de los sealizadores.

Figura 46. Paso transparente del operando contenido en el Acumulador y almacenamiento del re-
sultado en el registro destino.

Al finalizar la instruccin, los registros B y C contendrn el mismo


dato, que es el que contena el registro B con anterioridad.
B=C=11000010.

111 Arquitectura de Ordenadores I


Tema 6

Introduccin a la Programacin en
Ensamblador

La magia del compilador


Una vez hemos llegado en el estudio de la arquitectura del computador al punto
en que conocemos la ruta de datos, su funcionamiento y sus arquitecturas, es
conveniente justificar la necesidad de que la unidad de control del computador sea
capaz de ejecutar ciertas instrucciones. Haremos esto incluso antes de ver con
detalle la implementacin de la Unidad de Control y la implementacin de las
diferentes arquitecturas, ya que de esta forma justificaremos las instrucciones que
creemos.

La programacin en lenguaje ensamblador es ligeramente ms complicada


que la programacin en alto nivel. La complicacin est marcada, fundamental-
mente, por tener que controlar nosotros absolutamente todo lo que el computador
tiene que realizar. Para facilitar la tarea vamos a marcar unas pautas que van
encaminadas a hacernos las cosas ms automticas.

Para la programacin en lenguaje ensamblador vamos a utilizar las tcni-


cas aprendidas en algortmica. Como paso previo al desarrollo de un programa en
ensamblador necesitamos tener perfectamente definido lo que pretendemos que
haga el ordenador. Una vez sepamos lo que queremos debemos hacer el programa,
pero de forma directa sino a travs del correspondiente algoritmo; una vez des-
arrollada la traza del algoritmo y comprobado que hace lo que pretendemos, el
paso siguiente es la codificacin del algoritmo en lenguaje ensamblador. De esta
forma podemos aprovecharnos de la programacin modular que tanto nos facilita
la tarea de la creacin de programas, en un lenguaje aparentemente hostil a la
modularidad.

Para desarrollar el programa lo mejor es tener un esqueleto predefinido e


irlo completando con las partes que son especficas de nuestra aplicacin. Este
esqueleto lo veremos al final cuando ya hayamos estudiado el ncleo de la misma.

Para ayudarnos en el paso del lenguaje algortmico a lenguaje ensamblador


vamos preparar el esqueleto de las estructuras bsicas, de forma que nuestra pro-

Arquitectura de Ordenadores I 112


El juego de instrucciones

gramacin sea lo ms homognea y repetitiva que podamos, con la consiguiente


reduccin de errores.

Estructura selectiva simple si ... entonces ... fin si


La primera estructura algortmica que vamos a estudiar es :
si condicin entonces
accin
fin si

Esta estructura se podra implementar en ensamblador de la siguiente for-


ma :
si_001: condicin
salto_condicional fin_si_001
entonces_001: accin
fin_si_001: resto_de_cdigo
Esto nos lleva al primer tipo de instrucciones que vamos a estudiar: los
saltos

Los Saltos
En cdigo mquina la programacin es totalmente secuencial. Una ins-
truccin se ejecuta detrs de otra indefectiblemente. La nica forma de hacer
programacin estructurada es provocando saltos en la secuencia del programa.
Esto complica notablemente la estructura del programa y su inteligibilidad de cara
al programador (de ah la necesidad de escribir y probar los algoritmos antes de
comenzar a escribir el cdigo mquina).

Los saltos los podemos definir como la ruptura de la secuencia lineal del
programa.

Hay dos tipos de saltos: los incondicionales y los condicionales

Son saltos incondicionales aquellos en los que una vez decodificada la ins-
truccin el salto se produce siempre. Son tiles para saltar trozos de cdigo de
forma obligatoria y tambin se utilizan para poder hacer algunos trucos que enga-
en al microprocesador, en programas muy elaborados. La instruccin de salto
suele ser tal como:
JMP etiqueta
Los saltos condicionales son ms verstiles. El salto solo se produce si se
dan ciertas condiciones, de lo contrario la secuencia del programa contina de
forma normal. Cada microprocesador en concreto tiene sus propios saltos condi-
cionales. El juego puede ser muy extenso. Algunos de los ms comunes son:
JE Salta si igual
JG Salta si mayor
JGE Salta si mayor o igual
JL Salta si menor

113 Arquitectura de Ordenadores I


Tema 7

JLE Salta si menor o igual


JZ Salta si es igual a cero
JNZ Salta si no cero
JNE Salta si no igual (igual a JNZ)
JS Salta si no signo (si es positivo)
JS Salta si signo (si es negativo)
Para evaluar la condicin tenemos las instrucciones lgicas y aritmticas,
pero las ms comunes son las especficamente de comparacin:
CMP Compara operandos
TEST Test/Comparacin lgica de los dos operandos

Ejemplo
si contador>0 entonces
decrementar contador
fin si

En ensamblador
si_001: MOV AX, contador ; solo se puede comparar con un
registro
CMP AX, 0 ; evaluamos la condicin
JG entonces_001 ; si condicin verdadera ejecuto la
accin
JMP fin_si_001 ; la condicin no es cierta, omito la
accin
entonces_001: DEC contador ; accin(es)
fin_si_001: ; resto del cdigo

Esta forma de actuar, aunque es totalmente fiel a la estructura algortmica


no es nada eficiente, ya que se ejecutan dos saltos, con la consiguiente prdida de
tiempo y el cdigo sale tambin ms extenso. Esta forma que se presenta a conti-
nuacin es mucho ms eficiente, ya que solamente rompe la secuencia lineal del
programa en un caso; cuando la condicin es falsa.
si_001: MOV AX, contador ; solo se puede comparar con un
registro
CMP AX, 0 ; evaluamos la condicin
JLE fin_si_001 ; salto si complementario de condicin
DEC contador ; accin(es)
fin_si_001:
Hemos de hacer hincapi en que la condicin de salto es la complementa-
ria de la condicin que tenemos en la estructura algortmica. A partir de ahora,
todas las implementaciones que hagamos las codificaremos solamente con la
forma ms eficiente. Hemos introducido, adems, una nueva instruccin aritmti-
ca, DEC, cuya misin es decrementar el operando que le sigue.

Estructura selectiva simple si ... entonces ... sino ...


fin si
si condicin entonces
accin1
sino
accin2

Arquitectura de Ordenadores I 114


El juego de instrucciones

fin si

Esta estructura se implementara en ensamblador de la siguiente forma :


si_001: condicin
salto_condicional entonces_001
sino_001: accin2
JMP fin_si_001
entonces_001: accin1
fin_si_001: resto_de_cdigo
Donde se ve la necesidad del uso de un salto incondicional para romper la
linealidad del programa.

Ejemplo
si contador>0 entonces
decrementar contador
sino
salir := 1;
fin si

En ensamblador
si_001: MOV AX, contador ; solo se puede comparar con un
registro
CMP AX, 0 ; evaluamos la condicin
JG entonces_001 ; si condicin verdadera ejecuto la
accin1
sino_001: MOV AX, #1 ; ponemos el valor de salir en AX
MOV salir, AX ; actualizamos la variable salir,
accin2
JMP fin_si_001 ; no ejecuto la accin1
entonces_001: DEC contador ; ejecuto la accin1
fin_si_001: ; resto del cdigo

Estructura repetitiva mientras ... hacer ... fin mientras


mientras condicin
accin
fin mientras

Esta estructura se implementara en ensamblador de la siguiente forma :


mientras_001: condicin
salto_condicional fin_mientras_001
accin
JMP mientras_001
fin_mientras_001: resto_de_cdigo

Ejemplo
mientras salir<>0 hacer
contador := contador + 1
fin mientras

En ensamblador quedara:
mientras_001: MOV AX, salir ; solo se puede comparar con
; un registro
CMP AX, 0 ; evaluamos la condicin
JZ fin_mientras_001 ; si la condicin es falsa termino

115 Arquitectura de Ordenadores I


Tema 7

INC contador ; accin(es)


JMP mientras_001 ; la condicin no es cierta, omito
; la accin
fin_mientras_001: resto_de_cdigo
Donde hemos visto una nueva instruccin aritmtica, INC, cuya misin es
incrementar el operando que viene a continuacin.

Estructura repetitiva repetir ... hasta que ...


repetir
accin
hasta que condicin

Esta estructura se implementara en ensamblador de la siguiente forma:


repetir_001: accin
condicin
salto_condicional repetir_001

Ejemplo
repetir
distancia := distancia + 3
hasta que distancia > 100

En ensamblador quedara :
repetir_001: MOV AX, distancia ; solo se puede operar con el
; acumulador
ADD AX, 3 ; incrementamos en 3 (accin)
MOV distancia, AX ; actualizamos la variable
CMP AX, 100 ; evaluamos la condicin
JLE repetir_001 ; si la condicin es falsa, repito
resto_de_cdigo
En este caso aprovechamos que AX ya contiene el valor de la distancia pa-
ra hacer la comparacin. Si nuestras acciones no dejan en ningn registro el valor
que necesitamos para hacer la comprobacin de la condicin, hay que cargar
algn registro con el valor adecuado para la comprobacin.

Hay que tener en cuenta que en la evaluacin de la condicin de nuevo


hemos utilizado la comparacin con el complementario de lo que realmente pre-
tende el algoritmo. De esta forma optimizamos el cdigo.

Estructura repetitiva desde ... hasta ... hacer ... fin


desde
desde variable := inicio hasta final hacer
accin
fin desde

Esta estructura se caracteriza por tener los lmites bien definidos, lo cual se
corresponde en ensamblador con un bucle tpico.
desde_001: MOV CX, inicio ; cargamos el valor inicial
hasta_001: CMP CX, final ; comparo el comienzo con el final

Arquitectura de Ordenadores I 116


El juego de instrucciones

JG fin_desde_001 ; salimos del bucle


accin ; accin a realizar
INC CX ; incrementamos el contador del bucle
MOV variable, CX ; actualizamos la variable4
JMP hasta_001 ; evaluamos la siguiente iteracin
fin_desde_001: resto_de_cdigo
Como podemos apreciar en esta implementacin utilizamos dos saltos con
el consiguiente perjuicio. Veamos como hacerlo saltando una sola vez.
desde_001: MOV CX, inicio ; cargamos el valor inicial
CMP CX, final ; comparo el comienzo con el final
JG fin_desde_001 ; salimos del bucle
hasta_001: accin ; accin a realizar
INC CX ; incrementamos el contador
; del bucle
MOV variable, CX ; actualizamos la variable
CMP CX, final ; hemos llegado al final ?
JLE hasta_001 ; siguiente iteracin del bucle
fin_desde_001: resto_de_cdigo
Ntese que siguen habiendo dos saltos, pero el primero slo se evala la
primera vez y a continuacin, dentro del bucle propiamente dicho, solo se evala
el segundo una vez por iteracin.

Ejemplo
para i := 1 hasta N hacer
a := i
fin para

En ensamblador quedara :
desde_001: MOV CX, #1 ; cargamos el valor inicial
CMP CX, N ; comparo el comienzo con el final
JG fin_desde_001 ; salimos del bucle
hasta_001: MOV a, CX ; accin a realizar
INC CX ; incrementamos el contador del bucle
MOV i, CX ; actualizamos la variable
CMP CX, N ; hemos llegado al final ?
JLE hasta_001 ; siguiente iteracin del bucle
fin_desde_001: resto_de_cdigo

Hay un caso particular de esta estructura, cuando el final es cero.


desde variable := inicio hasta 0 paso -1 hacer
accin
fin desde

En este caso particular podemos recurrir al uso eficiente del juego de ins-
trucciones del microprocesador. Pudiendo quedarnos el cdigo de la siguiente
forma :
desde_001: MOV CX, inicio ; cargamos el valor inicial
CMP CX, 0 ; comparo el comienzo con el final
JG fin_desde_001 ; salimos del bucle
hasta_001: accin ; accin a realizar

4
Solo es necesario si vamos a utilizar la variable dentro del bucle. Si la vamos a utilizar al salir del bucle solo sera
necesario actualizarla una vez fuera del bucle. Si no se utiliza nunca sobra su declaracin y cualquier asignacin.

117 Arquitectura de Ordenadores I


Tema 7

MOV variable, CX ; actualizamos la variable


LOOP hasta_001 ; siguiente iteracin del bucle si CX0
fin_desde_001: resto_de_cdigo

Estructura selectiva mltiple segn ... hacer ... fin segn


segn valor hacer
1: accin1
2: accin2
3: accin3

n: accinN
sino
accinD
fin segn

La forma ms sencilla de implementar esta opcin es mediante una tabla


de salto. En este tipo de tabla se almacenan las direcciones de las rutinas de las
acciones correspondientes a cada uno de los casos posibles. Este mtodo slo es
posible si las opciones son consecutivas la una a la otra.
segun_001: MOV BX, valor ; parmetro de salto
DEC BX ; el primer desplazamiento es 0
CMP BX, 0 ; compruebo el rango inferior
JGE segun_ma_001 ; salto si mayor o igual que 0
MOV BX, sino_001-Tsalto_sgn_001
; desplazamiento de sino
JMP segn_me_001 ; saltamos directamente a sino
segun_ma_001: SHL BX, 1 ; multiplico por 2 (son enteros)
CMP BX, sino_001-Tsalto_sgn_001
; compruebo el rango superior
JL segun_me_001 ; salto si menor que lmite
MOV BX, sino_001-Tsalto_sgn_001
; desplazamiento del caso por defecto
segun_me_001: MOV IP, Tsalto_sgn_001[BX]
; salto encubierto
; aqu no llega nunca

; implementacin de las acciones


sgn_ac1_001: accin1 ; ejecuta la accin 1
JMP fin_segn_001 ; ejecutamos la siguiente sentencia
sgn_ac2_001: accin2 ; ejecuta la accin 2
JMP fin_segn_001 ; ejecutamos la siguiente sentencia
sgn_ac1_001: accin3 ; ejecuta la accin 1
JMP fin_segn_001 ; ejecutamos la siguiente sentencia

sgn_acN_001: accinN ; ejecuta la accin N
JMP fin_segn_001 ; ejecutamos la siguiente sentencia
sgn_acD_001: accinD ; ejecuta la accin por defecto
fin_segun_001: resto_del_cdigo
Cuando las opciones no son consecutivas la una a la otra hay dos opciones:
utilizar un diccionario de smbolos, hacer todas las comparaciones y los saltos
correspondientes uno por uno. Este ltimo caso es factible cuando las opciones
son pocas, si son muchas el mtodo del diccionario es ms eficiente y sencillo de
codificar.

Arquitectura de Ordenadores I 118


El juego de instrucciones

; Tabla de salto del segn 001


Tsalto_sgn_001: dw sgn_ac1_001
dw sgn_ac2_001
dw sgn_ac3_001

dw sgn_acN_001
sino_001: dw sgn_acD_001

; diccionario del segn 001


dicc_sgn_001: dB +-*/= ^
f_dicc_sgn_001:

; comienzo de la implementacin del segn 001


; bsqueda en el diccionario
segn_001: MOV BX, offset dicc_sgn_001
; BX apunta al diccionario
DEC BX ; para el preincremento
MOV CX, f_dicc_sgn_001-dicc_sgn_001
; cargo en CX el nmero de smbolos
MOV AL, valor ; pongo en AL el valor del segn
bucle_001: INC BX ; preincremento de BX (++BX)
CMP AL, [BX] ; compruebo si valor est en la tabla
LOOPNE bucle_001 ; cierra el bucle si no son iguales y
; CX es mayor que cero
SUB BX, dicc_sgn_001 ; dejo en BX la posicin relativa
; del smbolo
SHL BX, 1 ; multiplico BX por 2, la direccin
; tiene la longitud de una palabra
CMP CX, 0 ; compruebo la forma de salir
JNZ salto_sgn_001 ; salta si el smbolo est en la tabla
MOV BX, sino_sgn_001-tsalto_sgn_001
; dejo en BX el desplazamiento
; del caso por defecto
salto_sgn_001: MOV IP, Tsalto_sgn_001[BX]
; salto encubierto
; aqu no llega nunca

; el resto del cdigo es igual que en el ejemplo del caso anterior


; implementacin de las acciones
sgn_ac1_001: accin1 ; ejecuta la accin 1
JMP fin_segn_001 ; ejecutamos la siguiente sentencia
sgn_ac2_001: accin2 ; ejecuta la accin 2
JMP fin_segn_001 ; ejecutamos la siguiente sentencia
sgn_ac1_001: accin3 ; ejecuta la accin 3
JMP fin_segn_001 ; ejecutamos la siguiente sentencia

sgn_acN_001: accinN ; ejecuta la accin N
JMP fin_segn_001 ; ejecutamos la siguiente sentencia
sgn_acD_001: accinD ; ejecuta la accin por defecto
fin_segun_001: resto_del_cdigo

Problema:
Se recomienda al alumno la implementacin del segn por el mtodo de
las comparaciones sucesivas.

119 Arquitectura de Ordenadores I


Tema 7

Subprogramas
Por ltimo nos queda ver, para terminar esta introduccin, las llamadas a
subprogramas. Las llamadas vienen a ser algo as como:
Subprograma modulo_1 (parmetros)
variables
inicio
accin1
accin2

accinN
fin subprograma

Para implementar los subprogramas tenemos que introducir una nueva ins-
truccin en nuestro lenguaje ensamblador. Esta instruccin es la llamada a
subrutina, que en mnemnico suele representarse por CALL (llamar), BSR
(Branch to SubRoutine, Ramificacin a subrutina), JSR (Jump to SubRoutine,
salto a subrutina), o algo similar. Para terminar la subrutina, tenemos que decirle
al procesador que la llamada ha terminado, esto lo hacemos indicndole RET
(RETorno) o algo similar. De esta forma, la codificacin en ensamblador quedara
como sigue.
; declaracin del mdulo 1
Modulo_1: accin1
accin2

accinN
RET

; Llamada al mdulo 1
CALL modulo_1
resto_de_cdigo
Una representacin de lo que significa la llamada a un procedimiento, des-
de el punto de vista del flujo del programa, se puede observar en la Figura 6-1:


CALL modulo_1


Accin_1
Accin_2


Accin_N

RET

CALL modulo_1


Figura 6-1. Llamada a subrutina o procedimiento

Arquitectura de Ordenadores I 120


El juego de instrucciones

Nos falta hablar del paso de parmetros. Para pasar los parmetros pode-
mos utilizar los registros del procesador. Esto tiene el inconveniente de que los
parmetros son siempre por referencia, el resultado que tome el registro aparece
en el programa principal tambin, con el consiguiente inconveniente. Si los pasa-
mos mediante variables, no podemos llamar a un procedimiento desde dentro de
l mismo, puesto que destruiramos las variables de la primera llamada. Por otro
lado tenemos que recordar de alguna forma el punto donde hay que retornar cuan-
do se termine de ejecutar el procedimiento.

Llegamos de esta forma a la PILA. La pila es una zona de memoria donde


trabajaremos de una forma especial y que nos permite resolver los problemas
planteados anteriormente. El juego de instrucciones requiere dos nuevos elemen-
tos: meter un dato en la pila (PUSH) y retirar un dato de la pila (POP). Cuando
estudiemos los distintos modos de direccionamiento hablaremos con ms en
detalle de estas instrucciones.

121 Arquitectura de Ordenadores I


Tema 7

El juego de instrucciones

Clasificacin general de las instrucciones


En este apartado se ofrece una visin general de la clasificacin de las instruccio-
nes de los procesadores, agrupndolas por conjuntos con igual funcin.

Instrucciones para la transferencia de datos


La instruccin ms frecuente en muchos programas es la que mueve informacin
de un sitio a otro. Esta instruccin es la de MOVER CARGAR, que tiene como
mnemnico MOV LD/ST (move y load/store en ingls).

Con MOV se puede mover informacin desde un registro a otro, desde un


registro a una posicin de Memoria y viceversa; tambin se puede cargar un
operando inmediato en un registro o en Memoria, si lo permite el juego de ins-
trucciones del procesador.

Instrucciones aritmticas y lgicas


Hacen uso de la ALU para transformar los operandos mediante sus operadores.

Instrucciones aritmticas

Realizan operaciones aritmticas sobre nmeros binarios o nmeros BCD


(Decimal Codificado en Binario). En realidad, este conjunto de instrucciones es
bastante pobre, pero potente. Bsicamente se pueden hacer operaciones de suma,
resta, desplazamiento aritmtico y de incremento o decremento; algunos procesa-
dores son capaces, adems, de multiplicar y dividir.

Instrucciones lgicas

Realizan operaciones de desplazamiento, rotacin y lgicas sobre registros


o posiciones de memoria. El conjunto de instrucciones lgicas es tambin suele
ser reducido, aunque un poco ms extenso que el aritmtico.

123 Arquitectura de Ordenadores I


Tema 7

Las instrucciones lgicas son aquellas que operan sobre los bits de los ope-
randos, transformndolos segn las leyes de la lgica. Operaciones de este estilo
son: OR, AND, XOR y NOT, operaciones de comparacin y de comprobacin.
Tambin son instrucciones lgicas las de desplazamiento lgico rotacin (evi-
dentemente).

Instrucciones de salto
Este grupo se identifica con la instruccin de SALTO INCONDICIONAL, que
tiene como mnemnico JMP. Dentro de este grupo tenemos las instrucciones de
salto condicional, que me permiten variar el flujo del programa dependiendo del
estado de los indicadores del Registro de Cdigo de Condicin.

Instrucciones de llamada y retorno a subrutina


Son aquellas que nos permiten llamar a un subprograma, que a partir de ahora
denominaremos subrutina, y retornar de ella cuando se termina su ejecucin. Son
bsicamente instrucciones de salto un tanto particulares. La llamada a la subrutina
carga el contador de programa con la direccin de la subrutina que queremos
ejecutar, pero antes de hacer esto guarda la direccin de retorno de la subrutina.
De esta forma, cuando la subrutina llegue al final, sabr el valor que tiene que
cargar en el contador de programa para continuar con la ejecucin normal del
programa en el punto en el cual fue invocada.

Como ya comentamos en el captulo anterior esto se realiza a travs de la


pila.

Instrucciones de control de interrupciones


Las instrucciones de control de interrupciones las estudiaremos con ms detalle en
el tema dedicado a los subsistemas de entrada y salida.

Permiten tener control sobre eventos que ocurren en el procesador de for-


ma asncrona, tanto internos al procesador como externos a l. Esto permite hacer
un diseo y control eficiente de las entradas y salidas y es ampliamente explotado
por el sistema operativo.

Instrucciones especiales
En este grupo se pueden incluir instrucciones tales como la NOP (no operar), que
no hace nada, pero ocupa una posicin de la memoria dedicada al programa, y
tarda en ejecutarse un cierto tiempo.

Otras instrucciones especiales son las de entrada y salida, que sirven para
leer o escribir informacin en el mapa de entradas/salidas al que estn conectados
lo perifricos del sistema a travs de los controladores.

Arquitectura de Ordenadores I 124


El juego de instrucciones

El juego de instrucciones al completo


Presentamos en este apartado el juego de instrucciones completo de un procesador
genrico. Un procesador particular puede tener ms instrucciones que las que aqu
presentamos o bien faltar alguna por no estar implementada en su unidad de con-
trol. Debe tomarse como una gua de referencia, no como una referencia
exhaustiva.

Instrucciones de transferencia de datos (12)


Mueven informacin entre registros y posiciones de memoria o puertos de
entrada/salida.
IN Tomar dato de la salida
LAHF Cargar el acumulador con el RCC
LEA Cargar direccin efectiva
MOV Mover operandos
OUT Sacar dato por la salida
POP Recuperar operandos de la pila
POPF Recuperar el RCC de la pila
PUSH Guardar operandos en la pila
PUSHF Guardar el RCC en la pila
SAHF Coloca el acumulador en el RCC
XCHG Intercambia dos operandos
XLAT Traducir

Instrucciones aritmticas (20)


Transforman los datos.
AAA Ajuste ASCII en suma
AAD Ajuste ASCII en divisin
AAM Ajuste ASCII en multiplicacin
AAS Ajuste ASCII en resta
ADC Sumar con acarreo
ADD Sumar sin acarreo
CBW Convertir byte en palabra
CMP Comparar operandos
CWD Convertir palabra en doblepalabra (longint)
DAA Ajuste decimal en suma
DAS Ajuste decimal en resta
DEC Decrementar destino en uno
DIV Dividir, sin signo
IDIV Dividr, con signo
IMUL Multiplicar, con signo
INC Incrementar el destino en uno
MUL Multiplicar, sin signo
NEG Negar, poner en complemento a 2
SBB Restar con acarreo
SUB Restar sin acarreo

Instrucciones lgicas (13)


AND Y lgico
NOT No lgica
OR O lgica

125 Arquitectura de Ordenadores I


Tema 7

RCL Rotar a la izquierda a travs del acarreo


RCR Rotar a la derecha a travs del acarreo
ROL Rotar a la izquierda
ROR Rotar a la derecha
SAL Desplazamiento aritmtico a la izquierda
SAR Desplazamiento aritmtico a la derecha
SHL Desplazamiento lgico a la izquierda (igual a SAL)
SHR Desplazamiento lgico a la derecha
TEST Comparacin lgica de los dos operandos
XOR O lgico exclusivo

Instrucciones de transferencia de control (salto) (21)


Sirven para controlar la secuencia de ejecucin de las instrucciones del programa.
CALL Llamar a un procedimiento
JA, JNBE,
JG, JNLE Bifurcar si mayor
JAE, JNB, JNC Saltar si no hay acarreo
JB, JC Bifurcar si menor (hay acarreo)
JBE, JLE,
JNA, JNG Bifurcar si menor o igual
JE, JZ Bifurcar si igual
JGE, JNL Bifurcar si mayor o igual
JL, JNGE Bifurcar si menor
JLE Bifurcar si menor o igual
JNE, JNZ Bifurcar si no es cero (no igual)
JNO Bifurcar si no hay desbordamiento
JNP, JPO Bifurcar si paridad impar
JNS Bifurcar si no signo
JMP Saltar incondicionalmente
JO Bifurcar si hay desbordamiento
JP, JPE Bifurcar si paridad par
JS Bifurcar si signo
LOOP Bucle hasta que se acabe el contador
LOOPE, LOOPZ Bucle mientras igual (cero) o hasta fin de contador
LOOPNE,
LOOPNZ Bucle mientras distinto ( no cero) o hasta fin de contador
RET Retornar de un procedimiento

Instrucciones de manejo de cadenas (7)


Realizan operaciones sobre series de bytes o palabras como mover, comparar y
explorar.
CMPS Comparar cadenas de bytes o palabras
LODS Cargar cadena de bytes o palabras
MOVS Mover cadena de bytes o palabras
REP Repetir operacin de cadena
REPZ Repetir operacin de cadena mientras igual o cero
REPNZ Repetir operacin de cadena mientras distinto o no cero
SCAS Explorar cadena de bytes o palabras
STOS Almacenar cadena de bytes o palabras

Instrucciones de interrupcin (3)


INT Interrupcin
INTO Interrupcin si hay desbordamiento
IRET Retorno de interrupcin

Arquitectura de Ordenadores I 126


El juego de instrucciones

Instrucciones de control del procesador (12)


Activan y desactivan los bits del Registro de Cdigo de Condicin, tambin lla-
mados banderas (flags en ingls), y cambian el estado de ejecucin del
procesador.
CLC Poner el acarreo a cero
CLD Poner la bandera de direccin a cero
CLI Desactivar las interrupciones
CMC Complementar la bandera de interrupcin
ESC Generar secuencia de escape (para un coprocesador)
HLT Detener el procesador
LOCK Bloquear el bus
NOP No hacer nada
STC Poner el acarreo a uno
STD Poner a uno la bandera de direccin
STI Activar las interrupciones
WAIT Sincronizarse con el coprocesador

127 Arquitectura de Ordenadores I


Tema 7

Arquitectura de Ordenadores I 128


Tema 8

Direccionamiento de Memoria
Un modo de direccionamiento es un procedimiento que permite determinar un
operando, o la ubicacin de un operando o una instruccin. Dado que, general-
mente, lo que se especifica es la direccin donde se almacena el dato o la
instruccin, la denominacin genrica de modo de direccionamiento queda justifi-
cada.

Llamaremos objeto a la instruccin, operando o resultado que se desea di-


reccionar. El objeto puede residir en la propia instruccin, en un registro o en la
memoria principal, siendo el objetivo de los modos de direccionamiento especifi-
car el lugar concreto donde se encuentra. A este objeto se le suele denominar
tambin direccin efectiva, ya que es la direccin efectiva cuyo objeto se va a tratar.

Aunque, a primera vista, parecera lo ms conveniente que la instruccin


incluyese directamente el objeto o su direccin real, ello puede no ser lo ms
indicado, como apuntan razones tales como:

1. Ahorro de espacio. Mientras ms cortas sean las instrucciones, menos al-


macenamiento ocupan los programas y menos bits hay que leer de
memoria principal para ejecutar un programa. En este sentido, sern con-
venientes direccionamientos que ocupen poco espacio.

2. Cdigo reubicable y reentrante. El cdigo reubicable, esto es, que se puede


ejecutar en cualquier zona de memoria y el cdigo reentrante exigen direc-
cionamientos relativos.

3. Estructuras de datos. El manejo de las estructuras de datos, tales como ta-


blas, matrices, colas, listas, ..., se simplifican con el empleo de algunos
modos de direccionamiento relativos.

Los modos de direccionamiento pueden clasificarse segn la Tabla 8-1. En


las secciones siguientes se analizarn con detalle cada una de estas alternativas.

129 Arquitectura de Ordenadores I


Tema 8

Inmediato













de registro

Absoluto de memoria

de pgina base


Direccionamiento




Directo al contador de Pr ograma


Re lativo a un registro



postautodecremento x
preautoincremento + + x

a un registro ndice postautoincremento x + +

preautodecremento x


Indirecto

Im plcito

Tabla 8-1 Modos de direccionamiento

Direccionamiento inmediato
El direccionamiento se llama inmediato cuando el objeto, en este caso un operan-
do, se encuentra contenido en la propia instruccin.

Ejemplos:
162A MOV AH, 2A es una instruccin del 80x86 con direccionamiento inmediato,
puesto que contiene el valor 2A del operando.
927C47B8 M(X) <-- 7C es una instruccin del IBM 370 con direccionamiento inmediato,
pues el operando que se transfiere a la posicin de memoria X es 7C, que se en-
cuentra en la propia instruccin (la direccin de memoria X se calcula, con la
informacin 4788, mediante un direccionamiento relativo con registro base, co-
mo se ver ms adelante).

Hay mquinas que permiten distintos tamaos de operandos inmediatos.


Por ejemplo, el VAX, permite inmediatos de 6, 8, 16, 32 y 64 bits. Con ello se
pretende reducir la memoria necesaria, adaptando la instruccin al tamao de dato
deseado.

Direccionamiento directo absoluto


Un direccionamiento se llama directo, en contraposicin con el indirecto, cuando
expresa la direccin real del objeto. Por otro lado, el direccionamiento absoluto
indica que la instruccin contiene una direccin efectiva sin compactar. Por tanto,

Arquitectura de Ordenadores I 130


Direccionamiento de Memoria

el direccionamiento directo absoluto indica que la instruccin contiene la direc-


cin real, sin compactar, del objeto.

Este tipo de direccionamiento presenta tres alternativas:

1. Registro. La informacin contenida en la instruccin puede ser el identifi-


cador de un registro, cuando el objeto deseado se encuentra almacenado en
ese tipo de elemento. En algunas textos se considera este caso como otro
tipo de direccionamiento que se denomina direccionamiento de registro.

2. Memoria. La informacin contenida en la instruccin es una direccin


completa de memoria principal, El nmero de bits necesarios para ello de-
pende del mapa de direcciones del computador. Por ejemplo, el Z80, con
un mapa de 64 Koctetos, requiere 16 bits, mientras que el VAX, con un
mapa virtual de 4Goctetos, requiere 32 bits.

3. Pgina Base. La informacin contenida en la instruccin es una direccin


limitada, que permite referirse solamente a una parte del mapa de memo-
ria. De esta forma, se reduce el tamao de la instruccin, pero con la
mencionada limitacin del mapa de memoria. Este tipo de direccionamien-
to suele llamarse direccionamiento de pgina base y es muy frecuente en
microprocesadores.

Ejemplos:
3A35F7 A M(F735). Instruccin del Z80 que transfiere al registro A el
contenido de la posicin F735.
D08F B B M(8F). Instruccin del MC6800 que resta al acumulador B el conteni-
do de la posicin 8F. Siendo 8F una direccin absoluta de pgina base, que en
este microprocesador se reduce a las direcciones 0 a 255.

Direccionamiento directo relativo


En el direccionamiento directo relativo la instruccin no contiene la direccin del
objeto, sino un desplazamiento D sobre una direccin marcada por un puntero. La
direccin se calcula sumando el desplazamiento D al puntero de referencia, que
suele estar almacenado en un registro.

Este tipo de direccionamiento suele necesitar menos bits que el directo ab-
soluto, puesto que el desplazamiento D puede tener bastantes menos bits que los
que exige el mapa de direcciones. Ntese que el registro que sirve de puntero
puede ser del tamao deseado. Por ello, este direccionamiento es ms compacto,
pero requiere, en contrapartida, realizar la operacin de suma del puntero mas el
desplazamiento.

La mayora de los computadores permiten desplazamientos positivos y ne-


gativos (p.ej. representando D en complemento a dos). De esta forma, se puede
alcanzar una zona de memoria principal alrededor de la posicin marcada por el
puntero. La figura 6.1 representa la zona alcanzada para el caso de un desplaza-

131 Arquitectura de Ordenadores I


Tema 8

miento de N bits representado en complemento a 2. En dicha figura se ha supues-


to, como es habitual, que el mapa de direcciones tiene m bits y es mayor que el
rango del desplazamiento, eso es, que m > p.

Evidentemente, mientras mayor sea la longitud p del desplazamiento D,


mayor ser el campo direccionable para un puntero determinado, pero ms larga
ser la instruccin. Por ejemplo, el VAX permite desplazamientos de 8, 16 y 32
bits.

Aunque pueda parecer que la suma requerida por este direccionamiento


debe retardar mucho la ejecucin de la instruccin que lo emplea, lo cierto es que
no es as. En efecto, el retraso no existe o es muy pequeo.

El inters de este tipo de direccionamiento se fundamenta en que es la base


del cdigo reentrante y reubicable, puesto que permite cambiar las direcciones de
datos y de bifurcaciones sin ms que cambiar el contenido de un registro. Ade-
ms, algunas tcnicas de proteccin de memoria tambin residen en este
direccionamiento. Finalmente, permite recorrer de forma eficaz las estructuras de
datos.

Existen distintas posibilidades en cuanto al registro que se emplea como


puntero y en cuanto al tratamiento que sufre este ltimo. Veamos seguidamente
estas alternativas.

Direccionamiento relativo al contador de programa PC


En el direccionamiento relativo a contador de programa, como su nombre indica,
el puntero empleado es el contador de programa PC, esto es, el registro que alma-
cena la direccin de la instruccin que se va a ejecutar.

Arquitectura de Ordenadores I 132


Direccionamiento de Memoria

Figura 1. Direccionamiento directo relativo a PC

Puesto que, normalmente, el contador de programa se incrementa al tiem-


po que se lee cada instruccin, la posicin de referencia es la de la instruccin
siguiente, tal y como indica la figura anterior. Por ejemplo, si la instruccin en
curso con direccionamiento relativo a PC, est almacenada en la posicin 1725 y
contiene un desplazamiento de + 52, la posicin direccionada es PC + 52, pero PC
= 1725 + 1 = 1726, luego la posicin realmente direccionada es 1726 + 52 = 1778.

Este tipo de direccionamiento est especialmente indicado para afianzar


instrucciones prximas a la que se est ejecutando, por ejemplo, para hacer bifur-
caciones que permitan construa bucles. Dado que la mayora de los bucles son
muy cortos, pues contienen unas pocas instrucciones, un desplazamiento de 1
octeto o menor es perfectamente adecuado, permitiendo un cdigo muy compacto
(esto es, unas instrucciones muy cortas).

Ejemplo:
385B PC PC + 5B si C = 1. Instruccin del Z80 que bifurca, sumando 5B al conta-
dor programa, si el biestable C de acarreo est a 1.

Direccionamiento directo relativo a registro base


El direccionamiento relativo a registro base emplea, como puntero, un registro
base RB. Generalmente, los computadores disponen de varios registros que pue-
den actuar como base, ya sean stos los registros generales o bien registros
especficos para ese fin.

La instruccin deber contener la identificacin del registro que se emplea


como base, as como el desplazamiento. Para obtener la direccin se ha de selec-
cionar el registro base RB y sumarle el desplazamiento D. La figura siguiente
esquematiza esta situacin.

133 Arquitectura de Ordenadores I


Tema 8

Este direccionamiento se diferencia del relativo a ndice en que el registro


de base no suele modificarse y el de ndice s. El direccionamiento es muy conve-
niente, por ejemplo, cuando se dispone de una zona de datos. Cargando en el
registro base la primera posicin de esta zona, se pueden alcanzar los distintos
datos sin ms que conocer su posicin relativa en la zona de datos. Un pequeo
desplazamiento ser suficiente para recoger esta posicin relativa.

Ejemplos:
927C47B8 M(R4 + 7B8) 7C. Instruccin del IBM 370 que se puso como ejemplo ante-
riormente. El direccionamiento del destino es relativo, y viene especificado por
47B8. El primer carcter representa el registro base (esto es el registro R4) y el
resto representa un desplazamiento de 12 bits de valor 7B8. Por tanto, la direc-
cin del destino es R4 + 7B8. El origen, como se vio antes, es un dato inmediato
de valor 7C.
FD867A A A + M(IX + 7A). Instruccin del Z80 que suma al registro A la
posicin de memoria que se obtiene de forma relativa, sumando el registro IX y
el desplazamiento de 1 octeto 7A.

Direccionamiento directo relativo a registro ndice


El direccionamiento relativo al registro ndice es una variacin del anterior. En
este caso, el registro puntero (que llamamos registro ndice RI) es modificado para
ir recorriendo los elementos de una tabla o vector. En efecto, si cada elemento de
la tabla ocupa 1 palabra de la memoria y, cada vez que se emplea, el registro
ndice se incrementa en 1, se van obteniendo las direcciones de los elementos
sucesivos de la tabla.

Es muy frecuente permitir tanto el autoincremento como el autodecremen-


to del registro ndice. En total existen cuatro alternativas diferentes, que se
describen a continuacin y en cuyos ejemplos se ha supuesto que RI = 105 y que
D = 21.

Arquitectura de Ordenadores I 134


Direccionamiento de Memoria

Preautoincremento. El registro RI es incrementado y seguidamente se ob-


tiene la direccin como suma de RI + D.
Operaciones Ejemplo con incremento = 1
RI RI + incremento RI = 105 + 1 = 106
Direccin = RI + D Direccin = RI + D = 105 + 21 = 126

Preautodecremento. El registro RI es decrementado y seguidamente se ob-


tiene la direccin como suma de RI + D.
Operaciones Ejemplo con incremento = 1
RI RI + incremento RI = 105 1 = 104
Direccin = RI + D Direccin = RI + D = 104 + 21 = 125

Postautoincremento o autoincremento. Primero se calcula la direccin RI +


D y seguidamente se incrementa el registro RI.
Operaciones Ejemplo con incremento = 1
Direccin = RI + D Direccin = RI + D = 105 + 21 = 126
RI RI + incremento RI = 105 + 1 = 106

Postautodecremento o autodecremento. Primero se calcula la direccin RI


+ D y seguidamente se decrementa el registro RI.
Operaciones Ejemplo con incremento = 1
Direccin = RI + D Direccin = RI + D = 105 + 21 = 126
RI RI incremento RI = 105 1 = 104

Aunque en los ejemplos se han considerado incrementos de 1, en general,


el incremento deber adaptarse a la longitud de los operandos empleados. El VAX,
que permite operandos de 1, 2 4 octetos, tiene direccionamientos con autoin-
cremento o autodecremento que utiliza automticamente incrementos de 1, 2 4,
de acuerdo al operando al que se refiera la operacin. Por su lado, el UNIVAC
1100 divide al registro ndice en dos partes Xm y Xi. La parte Xm acta como el
registro ndice clsico, sumndose al desplazamiento, mientras que la parte Xi
contiene un incremento de 18 bits, que puede ser positivo o negativo. Despus de
calcular la direccin Xm se modifica, aadindole Xi.

Ejemplos:
5A4537B8 R4 R4 + M(R3 + R5 + 7B8). Operacin de suma en binario del IBM 370. El
registro 5 es el registro ndice y el 3 el base. Sin embargo, el IBM 370 no tiene ni
autoincremento ni autodecremento.
A0514382 R1 R1 + M(R2 + 2R3); R2 R2 + 2. Operacin del VAX que suma dos
palabras (de dos octetos). El primer operando se encuentra en el registro 1, el se-
gundo operando est en memoria, en la posicin R2 + 2R3, donde el registro R3
se multiplica por dos al ser los operandos de 2 octetos. El registro R2 se

135 Arquitectura de Ordenadores I


Tema 8

postautoincrementa en 2 por la misma razn. (Las cantidades 5, 4 y 8 que prece-


den a los nmeros de los registros, especifican el direccionamiento empleado).

Direccionamiento a pila
El direccionamiento a pila es un caso particular de direccionamiento relativo, muy
empleado en los microprocesadores y minicomputadores.

La mquina deber disponer de uno o varios registros SP, que realicen la


funcin de puntero de la pila. Cada uno de ellos contiene la direccin de la posi-
cin de memoria principal que acta de cabecera de pila. La pila puede crecer
segn direcciones de memoria crecientes o decreciente En el primer caso, si el
puntero SP contiene la cantidad 3721 y se introduce un nuevo elemento en la pila,
pasar a tener la direccin 3722. Si, por el contrario, se elimina un elemento debe
pasar a 3720. En este caso, los direccionamientos requeridos son:

Para insertar un nuevo elemento, se realiza un direccionamiento relativo al


registro con preautoincremento.

Para extraer un elemento, se debe hacer postautodecremento.

Si la pila crece segn direcciones decrecientes, para insertar un elemento


hay que ha, preautodecremento y para extraerlo postautoincremento.

El direccionamiento a pila permite instrucciones muy compactas, puesto


que, si slo se dispone de un nico registro SP, como es muy corriente, la instruc-
cin no requiere ninguna informacin de direccin.

Ejemplo:
F1 A M(SP + 1); F M(SP); SP SP + 2. Operacin del Z80 que extrae el
primer elemento de la pila y lo transfiere al registro F, extrae el segundo elemen-
to de la pila y lo transfiere al registro A y postautoincrementa SP en 2.

Direccionamiento indirecto
El direccionamiento indirecto comienza con un direccionamiento directo (ya sea
absoluto o relativo), pero se diferencia de aqul en que la direccin obtenida no es
el objeto deseado sino su direccin. Por tanto, para obtener el objeto deseado se
requiere un acceso adicional a memoria principal.

La figura siguiente esquematiza un direccionamiento indirecto absoluto.

Arquitectura de Ordenadores I 136


Direccionamiento de Memoria

El direccionamiento relativo a registro base se puede indicar con corchetes


y un desplazamiento que puede preceder a dichos corchetes, o que puede incluirse
dentro de elfos. Ambas notaciones se refieren al direccionamiento en el que la
direccin de un dato se obtiene sumando un desplazamiento y el contenido de un
registro base.

Obsrvese que el direccionamiento a registro con un nivel de indireccin


se puede contemplar como un caso particular de direccionamiento relativo a
registro con desplazamiento nulo.

Finalmente hay que destacar que los incrementos y decrementos de los


cuatro ltimos casos de la tabla 6.2 son de una unidad. En caso de desear un in-
cremento decremento de valor a hay que aadir :a tras el prefijo o sufijo
correspondiente.

Algunos ejemplos son los siguientes:


[.3] Indica la posicin de memoria cuya direccin se encuentra en el registro .3
#[.3] Es equivalente a .3
![.5] Indica la posicin de la pgina base cuya direccin est en el registro .5
A[.2] Indica la posicin de memoria M(A + .2)

Se pueden plantear indirecciones de ms de un nivel, aunque no parece


que ello tenga una gran utilidad, puesto que exige varios acceso a memoria y
ocupa varias posiciones de memoria.

Una aplicacin tpica del direccionamiento indirecto consiste en el acceso


a diversas informaciones mediante una tabla de punteros. En efecto, mediante un
acceso indirecto, a travs del elemento correspondiente de esa tabla, se puede
acceder a la informacin deseada.

137 Arquitectura de Ordenadores I


Tema 8

La indireccin se puede aadir a todos los tipos de direccionamiento rela-


tivos vistos anteriormente. Cabe, adems, plantear la indireccin en diversos
puntos del clculo de la direccin. Veamos algunas alternativas, para el caso de
direccionamiento indirecto relativo a ndice y base.
M(M(RB+RI+D)) Se calcula la direccin primaria como RB + RI + D y seguidamente se realiza la
indireccin.
M(M(RB+D)+RI) Se calcula la direccin primaria como RB + D. Se accede a memoria (indirec-
cin) y al contenido de esta posicin se aade el RI, obtenindose as la
direccin definitiva.
M(M(RB)+D+RI) Se accede a la posicin de memoria indicada por RB (indireccin) y al valor
obtenido se le suma el desplazamiento D y el registro ndice RI, obtenindose as
la direccin definitiva.

Se podran completar estos ejemplos con autoincrementos o autodecre-


mentos.

Indireccin de dos niveles


A pesar de las mltiples alternativas que presenta el direccionamiento indirecto
relativo, b ms frecuente es que primero se calcule la direccin relativa (p.e. RB +
RI + D) y seguidamente se aplique la indireccin.

Aunque son mltiples las aplicaciones de este direccionamiento, muchas


mquinas no lo incluyen (p.e. el IBM 370).

Direccionamiento inherente o implcito


En el direccionamiento implcito, la instruccin no contiene informacin sobre la
ubicacin del objeto, porque ste est en un lugar predeterminado (registro o
posicin de memoria).

La ventaja del direccionamiento implcito es que no ocupa espacio en la


instruccin. Por el contrario, su inconveniente es que restringe la aplicacin de la
mencionada operacin.

Varias de las instrucciones del Z80 que se han utilizado anteriormente em-
plean direccionamiento implcito del registro A, esto es, del acumulador. Este
registro no viene especificado en la instruccin, pero es uno de los operandos.

Direccionamientos del IEEE 694


El estndar IEEE 694 considera los tipos de direccionamientos que se incluyen en
la tabla 8.2.
Modo Prefijo Ejemplo
Absoluto Prefijo / /dir
Pgina base Prefijo ! !dir

Arquitectura de Ordenadores I 138


Direccionamiento de Memoria

Modo Prefijo Ejemplo


Indirecto Corchetes [dir]
Relativo a PC Prefijo $ $dir
Inmediato Prefijo # #valor
Relativo a Registro Base Corchetes desp[.reg] [.reg, desp]
Registro Prefijo . .dir
Autopreincremento Prefijo ++ ++dir
Autopostincremento Sufijo ++ dir++
Autopredecremento Prefijo -- --dir
Autopostdecremento Sufijo -- dir--
Tabla 8.2 Modos de direcciones del estndar IEEE 694

Ejemplos:
A[.3, #10] Indica la posicin de memoria M(A + .3 + 10).
A[B[.2, #12]] Indica la posicin de memoria M(A + M(B + .2 + 12)).
A[.2++] Indica la posicin de memoria M(A + .2) y postincrementa el registro .2.
A[.3--, #2] Indica la posicin de memoria M(A+.3) y, adems, postdecrementa el registro .3
en dos unidades.

Algunos fabricantes de procesadores usan su propia nomenclatura para ex-


presar sus modos de direccionamiento. Al programar en ensamblador hay que
estudiar cual es el caso particular de cada fabricante y adaptarnos a l.

139 Arquitectura de Ordenadores I


Tema 8

Problemas
A continuacin se proponen una serie de problemas sencillos.

Con estos problemas se pretende que el alumno practique y profundice en


las tcnicas de programacin en ensamblador.

Buffer para el Puerto Serie


Disear un programa que lea los datos que provienen de un puerto serie situado en
la posicin de memoria $FF00. Los datos ledos debern colocarse en un buffer
que tiene una longitud de 128 bytes. Una vez diseado el programa se deber
proceder a su ensamblado.

Solucin: Algoritmo
Definir buffer de 128 bytes
puntero := COMIENZO_BUFFER
repetir
leer(dato)
escribir(dato, puntero)
hasta puntero>=FIN_BUFFER

Buffer circular para el Puerto Serie


Modificar el programa anterior para permitir que el buffer sea circular.

Lectura del Buffer circular para el Puerto Serie


Disear un programa en ensamblador que lea datos del buffer del puerto serie que
hemos creado en el problema anterior.

Subrutina de escritura en el buffer del puerto serie


Convertir el programa que implementa el buffer circular para el puerto serie en
una rutina denominada Escribe_Buffer, de forma que cada vez que se llame tome
un carcter del puerto serie y lo escriba en el buffer.

Subrutina de lectura del buffer del puerto serie


Convertir el programa que implementa la lectura del buffer circular para el puerto
serie en una rutina denominada Lee_Buffer, de forma que cada vez que se llame
tome los 128 caracteres que estn en el buffer y los enve por el puerto serie que
est en la posicin $FF04. Lo que se pretende hacer es que datos que entran por
un puerto a una velocidad salgan por el otro a una velocidad diferente. Ocasiona
este programa algn conflicto con la rutina Escribe_Buffer ?

Arquitectura de Ordenadores I 140


Direccionamiento de Memoria

Puerto Serie
Implementar dos rutinas, una de escritura en el buffer y otra de lectura. La tcnica
utilizada ser la del doble buffer, para evitar la sobreescritura de datos en el buf-
fer.

Esta tcnica consiste en tener dos buffers de igual tamao que se rellenan
alternativamente, cuando uno est lleno se comienza a llenar el segundo, mientras
se llama a la rutina que permite la descarga del primero. Cuando se llene el se-
gundo buffer se vuelve a comenzar con el primero. Con cada buffer se asocia un
indicador que seala que est lleno. En el caso de que se llenen los dos buffers se
debera indicar una condicin de error. Evidentemente, cuando se vace un buffer,
su indicador de lleno debera cambiar para indicar tal circunstancia.

141 Arquitectura de Ordenadores I


Tema 8

Arquitectura de Ordenadores I 142


Tema 9

Instrucciones de Control de Flujo

Saltos condicionales e incondicionales


En los temas anteriores hemos justificado la necesidad de disponer de instruccio-
nes de control de flujo, concretamente saltos, para poder controlar el flujo del
programa. Sabemos que la programacin en ensamblador es netamente lineal.
Para poder programar algoritmos medianamente complejos necesitamos poder
saltar una parte del cdigo para que no se ejecute.

Esto nos lleva a disponer de dos tipos de saltos:


Saltos incondicionales
Saltos condicionales
Los saltos incondicionales provocan un cambio abrupto en la secuencia.
Siempre se realiza el salto. Se utilizan para impedir la ejecucin de una parte del
cdigo o para producir bucles en el flujo del programa.

Los saltos condicionales nos permiten seguir con la secuencia natural del
programa o romper al secuencia en funcin del valor de algunos indicadores de
estado. Suelen ir precedidos de una comparacin que coloca las banderas del
registro de estado de la CPU en una forma tal que salta cuando se cumple una
determinada condicin y contina en caso contrario.

En casi todas las arquitecturas la ruptura de la secuencia del programa


(ejecutar un salto) produce un retardo, debido a fallos de cache, que no se produce
en caso de no romperse la secuencia. En programas sensibles al tiempo de ejecu-
cin hay que tener esto en cuenta e intentar saltar lo menos posible, para
minimizar estos retardos.

La Pila
Una pila es un conjunto ordenado de elementos, en el que solo uno de ellos es
accesible en un instante dado. el punto de acceso se denomina cabecera de la pila.
el nmero de elementos de la pila, o longitud de la pila, es variable. Slo se pue-
den aadir o eliminar elementos en la cabecera de la pila. Por esta razn, una pila

143 Arquitectura de Ordenadores I


Tema 9

Figura 9-1 Operaciones Bsicas con la Pila

tambin se denomina cola ltimo-en-entrar-primero-en-salir (LIFO, "Last-In-


First-Out").

La manera ms sencilla de explicar la estructura y funcionamiento de una


pila es con ilustraciones. La fig xx ilustra las operaciones bsicas que se pueden
efectuar. Comenzamos en un instante de tiempo en el que la pila contiene algunos
elementos. Una operacin PUSH aade un nuevo elemento en la cabecera de la
pila. Una operacin POP elimina el elemento de la cabecera de la pila. En ambos
casos, la cabecera experimenta el cambio apropiado. Adems, las operaciones
binarias, que requieren de dos operandos (multiplicar, dividir, sumar, restar, etc.),
utilizan dos elementos de la cabeza de la pila como operandos, desapilando ambos
y apilando el nuevo resultado en la pila. Las operaciones unarias, que requieren
slo un operando (por ejemplo NOT), utilizan el elemento de la cabecera de la
pila. Todas estas operaciones se resumen en la Tabla 9-1.
PUSH Aade un nuevo elemento en la cabecera de la pila.
POP Elimina el elemento de la cabecera de la pila.
Operacin Unaria Realiza una operacin con el elemento de la cabecera de la pila. Sustituye
el elemento de la cabecera con el resultado.
Operacin Binaria Realiza una operacin con dos elementos de la cabecera de la pila. Elimina
dichos elementos. Pone el resultado de la operacin en la cabecera de la
pila.
Tabla 9-1 Operaciones orientadas al uso de la pila

Implementacin de la pila
La pila es una estructura til para la CPU. Un posible uso es la gestin de llama-
das a subrutinas y retorno de stas. Las pilas pueden ser tambin tiles para el
programador. Un ejemplo es la evaluacin de expresiones, que no vamos a tratar
en este tema.

La implementacin de una pila depende en parte de sus usos potenciales.


Si se desean ejecutar operaciones con la pila disponibles para el usuario, el reper-
torio de instrucciones dispondra de operaciones orientadas al manejo de pila,
incluyendo PUSH y POP, y operaciones que utilicen uno o dos elementos de la
cabecera de la pila como operandos. Ya que todas estas operaciones hacen refe-
rencia a una misma posicin, la cabecera de la pila, la direccin del operando u

Arquitectura de Ordenadores I 144


Instrucciones de control de flujo

operandos est implcita y no necesita incluirse en la instruccin. Son instruccio-


nes con cero direcciones, a las que nos referimos en el tema anterior.

Si el mecanismo de pila va a ser utilizado slo por la CPU, con usos tales
como el manejo de subrutinas, en el repertorio de instrucciones no se contempla-
ra instrucciones orientadas al uso de la pila. En cualquier caso, la implementacin
de la pila requiere que exista un cierto conjunto de posiciones contiguas para la
pila. Una aproximacin tpica se ilustra en la Figura 9-2. En memoria principal se
reserva un bloque de posiciones contiguas para la pila. La mayor parte del tiempo,
el bloque est parcialmente lleno con elementos de la pila, y el resto del bloque
est disponible para que crezca la pila. Para un funcionamiento correcto solamen-
te se necesita una direccin, la de la cabeza de la pila, pero se suelen tener hasta
tres direcciones, normalmente almacenadas en registros de la CPU:
Puntero de pila: Contiene la direccin de la cima o cabecera de la pila.
Si se aade o se elimina un elemento de la pila, el puntero se incremen-
ta o decrementa para que contenga la direccin de la nueva cabecera de
pila.
Base de la pila: Contiene la direccin de la posicin de la base de la pi-
la en los bloques reservados. Si se intenta un POP cuando la pila est
vaca, se utiliza para detectar tal circunstancia y dar un error, bloquean-
do normalmente la CPU. Esta direccin, en algunos procesadores, se
guarda en memoria y hay que evaluarla mediante cdigo, lo que con-
sume tiempo de CPU.
Lmite de la pila: Contiene la direccin del otro extremo de los bloques
reservados. Si se intenta un PUSH cuando los bloques estn utilizados
en su totalidad, se informa de un error. Igual que la base de la pila, no
todos los procesadores implementan esta opcin. En ese caso se calcu-
la por software, si es necesario.
Para acelerar las operaciones con la pila, los dos elementos de la cabecera
se almacenan a menudo tambin en registros. En este caso, el puntero de pila
contiene la direccin del tercer elemento de la pila.

145 Arquitectura de Ordenadores I


Tema 9

Figura 9-2 Organizaciones de pila usuales

Subrutinas
Cada vez que se llama a una subrutina, se guarda la direccin de retorno en la
pila. Cuando la subrutina llegue al final recuperar de la pila la direccin de retor-
no y de esta forma devuelve el control al programa que la invoc.

Una subrutina puede, en principio, llamar a otra subrutina e incluso lla-


marse a si misma; en este ltimo caso se provoca recursin, que hay que controlar.
No todos los procesadores soportan que se llame a una subrutina dentro de una
subrutina, eso depende fundamentalmente del tamao de la pila. Hay procesadores
que tienen un tamao de pila 1, con lo que solo pueden llamar a una subrutina
cada vez. Cuando el procesador tiene una pila relativamente grande, o cuando
menos, configurable, hay que calcular cuanto espacio de pila va a ocupar nuestro
programa y dimensionar la pila adecuadamente. Si vamos a utilizar recursin es
necesario calcular a priori la cantidad de pila que se va a usar para que no se
desborde.

Arquitectura de Ordenadores I 146


Tema 10

Diseo de la Unidad de Control


El objetivo del presente captulo es doble. Por un lado, muestra una visin din-
mica del computador, presentando de forma integrada y detallada cmo se van
desarrollando internamente las instrucciones. Por otro lado, describe el rgano
encargado de hacer que este funcionamiento sea posible, esto es, describe su
unidad de control
Se han utilizado profusamente los cronogramas, aunque se han simplifi-
cado, para poder resaltar los conceptos fundamentales del funcionamiento de los
computadores. En este sentido, se ha empleado una estructura de computador
muy sencilla y se han idealizado las formas de onda de las seales de control y de
reloj.
Se podr observar que, en el apartado de diseo de la unidad de control,
se ha dedicado mucho menos espacio a la alternativa cableada que ala micro-
programada. Ello es debido, no a que una alternativa sea ms o menos atractiva
a la hora del diseo, sino porque la primera solucin entra de lleno en el diseo
digital, que no es el objetivo de este texto, mientras que la segunda alternativa
emplea conceptos de estructura de computadores que consideramos de gran
inters.
Las temas tratados aqu tienen una continuacin natural en el captulo 9
de entrada / salida, puesto que sta consiste en extrapolar los conceptos de con-
trol interno del computador a los elementos exteriores o perifricos

INTRODUCCIN
La unidad de control tienen como funcin bsica la ejecucin de la siguiente
secuencia:
Tomar de la memoria principal la instruccin apuntada por el con-
tador de programa, e incrementar adecuadamente este contador.
Interpretar o decodificar la instruccin leda.
Ejecutar la instruccin.
Adems de estas tres funciones de lectura, decodificacin y ejecucin de
las instrucciones, la unidad de control se encarga de resolver las situaciones an-
malas o de conflicto que puedan ocurrir en el computador y de controlar y
comunicase con los perifricos.

Arquitectura de Ordenadores I 147


Tema 10

La informacin que utiliza la unidad de control para realizar su cometido,


es la siguiente:
Instruccin
Registro de estado
Contador de periodos
Seales de E/S
Adicionalmente, la unidad de control emplea la informacin del contador
de programa para producir el secuenciamiento de las instrucciones. Ella misma se
encarga de ir incrementando adecuadamente este registro y de cargarlo, con nue-
vos valores, para producir las bifurcaciones, salvaguardando su contenido anterior
si stas son con retorno

El cdigo de operacin indica la operacin que debe realizarse, as como


los modos de direccionamiento que hay que utilizar. La unidad de control deber
localizar los operandos, mandarlos, en su caso, a la unidad aritmtica y almacenar
el resultado.

El registro de estado contiene informacin sobre resultados de operaciones


anteriores, as como sobre posibles situaciones anmalas o especiales, tales como
desbordamientos, interrupciones, errores de paridad, etc. que exigen una accin
especial por parte de la unidad de control En trminos generales, se puede decir
que la informacin de estado se emplea para hacer rupturas condicionales en la
secuencia del programa en curso Estas rupturas pueden estar programadas en el
propio programa, mediante instrucciones de bifurcacin condicionales, o pueden
ser automticas, como es el caso de las interrupciones externas o de las situacio-
nes de error.

Las seales de entrada / salida permiten el dilogo con los perifricos. Es-
tas seales se estudiarn en el captulo 10, de entrada / salida, por lo que no se
tratarn aqu.

La ejecucin de cada instruccin requiere realizar una serie de pequeos


pasos que llamaremos operaciones elementales, tales como suma de base ms
desplazamiento, lectura del operando, Incremento del contador de programa,
ejecucin de una operacin aritmtica, etc. La ejecucin de cada una de estas
operaciones elementales requiere la activacin de una serie de seales de control.
Ser, por tanto, el objetivo de la unidad de control, la generacin de las seales de
control que permitan realizar las distintas operaciones elementales de cada ins-
truccin.

Se desarrollar, primero, el concepto de operacin elemental, para pasar,


seguidamente, a analizar las rdenes elementales que requieren las instrucciones,
as como los cronogramas de control resultantes. A continuacin, se entrar en la
estructura de la unidad de control y los conceptos de ruptura de programa por
mecanismos autnomos.

148 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

OPERACIONES ELEMENTALES
Las operaciones elementales, que puede realizar todo sistema digital, se clasifican
en los dos grupos siguientes:
Operaciones de transferencia.
Operaciones de proceso.

Las operaciones de transferencia requieren dos elementos de memoria (re-


gistros, por ejemplo), uno origen y otro destino. Para hacer esta operacin,
primero, hay que establecer un camino de comunicacin entre las salidas del
origen y las entradas del destino, y, seguidamente, hay que enviar una seal al
destino para que tome o se "cargue" con la informacin que tiene en su entrada.
Ntese que la informacin del origen queda sin modificar.

A ttulo de ejemplo la figura 7.1 muestra un bus, al que estn conectados


varios registros. La operacin elemental de transferencia, del registro A al C,
exige establecer un camino entre ellos. Para ella, hay que "abrir" las salidas del
registro A al bus, lo que se consigue mediante la seal de control TA. Dado que
los buses suelen utilizar tecnologa triestado, la seal TA ser una seal de activa-
cin de salida triestado, seal que deber estar activa durante todo el tiempo que
se desee que el contenido de A est en el bus. Una vez estabilizada la informacin
en el bus y, por tanto, en las entradas de los registros conectados a l, se puede
enviar la seal de carga del elemento destino. Esta seal ser, normalmente, una
seal de flanco, en la que el flanco de bajada o de subida, segn el tipo de disposi-
tivo de almacenamiento, determina el instante en que la informacin es tomada y
almacenada.

La figura 7.2 indica el diagrama de las seales de control utilizadas en esta


transferencia. La flecha de la seal FC define el flanco de activacin.

Las operaciones de proceso tienen un planteamiento bsico idntico a las


operaciones de transferencia. La diferencia fundamental es que la informacin
origen se hace pasar a travs de un operador, en su camino hacia el destino. Si la
operacin realizada es didica, se parte, simultneamente, de dos orgenes u ope-
randos que confluyen en el operador correspondiente, cuya salida se lleva al
destino o resultado. Si la operacin es mondica se parte de un solo origen.

Las figuras 7.3 y 7.4 representan un ejemplo de operacin elemental de


proceso, as como las seales requeridas para realizar la operacin de suma A <-
A + D Se activan primero las seales SC1 y SC2, lo que permite seleccionar A y

Arquitectura de Ordenadores I 149


Tema 10

D como las dos entradas del sumador Pasado un cierto tiempo de estabilizacin,
se activa la seal FA para cargar el resultado en el destino A.

ESTRUCTURA DE UN COMPUTADOR ELEMENTAL


Y SEALES DE CONTROL
En esta seccin se propone una estructura Von Neumann elemental, especificando
las seales de control de cada uno de sus elementos. Esta mquina simplificada,
aqu propuesta, servir de base para analizar la ejecucin de las instrucciones de
mquina, permitiendo establecer, a ttulo de ejemplo, los cronogramas de algunas
instrucciones.

La figura 7.5 representa la mquina propuesta, en la que se han considera-


do los elementos que se detallan a continuacin.

Memoria principal
La memoria principal, propuesta en este computador, lleva asociados dos registros
auxiliares el de direcciones D y el de datos RM. Se supone que los ciclos de lectu-
ra y escritura siguen los cronogramas de la figura 7.6, necesitndose las siguientes
seales de control
CM Seal que sirve para iniciar un ciclo de memoria.
L Seal que especifica ciclo de lectura.
ES Seal que especifica ciclo de escritura
FD Seal de flanco, que carga, en el registro de direcciones D, la in-
formacin disponible en el bus de direcciones.

150 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

TM Seal de activacin triestado, que conecta la salida de la memoria al bus


de datos.
FLM Seal que carga en el registro RM la salida de la memoria. Se puede em-
plear al trmino del ciclo de lectura.
FEM Seal que carga, en el registro RM, la informacin existente en el bus de
datos. Es necesaria su utilizacin cuando se va a proceder a una escritura.
Se supondr que ambos ciclos requieren 300 ns, por lo que las seales L y
ES han de tener una duracin de 300 ns Por otro lado, las seales CM y TM sern
de 100 ns, puesto que es el periodo bsico que se va a considerar en este compu-
tador.

En el ciclo de lectura, la salida de la memoria se abre al bus en el ltimo


periodo, mediante la seal TM. De esta forma, la informacin leda est disponi-
ble, al final del ciclo, en el bus de datos, pudindose almacenar en cualquiera de
los registros que ste tiene conectados.

Por su lado, el ciclo de escritura exige almacenar previamente el dato en el


registro auxiliar RM, lo que se consigue mediante la seal FEM. Se ha incluido
este registro RM para que, mientras la memoria hace la escritura, el computador
pueda emplear el bus en otras operaciones El registro RM es transparente al usua-
rio, esto es, no se puede direccionar en las instrucciones de mquina y, por tanto,
no puede ser manejado por el usuario

En ambos casos, la seal FD introduce, antes de iniciarse el ciclo, la direc-


cin de la posicin de memoria que se desea acceder.

Arquitectura de Ordenadores I 151


Tema 10

Arquitectura de Ordenadores I 152


Diseo de la Unidad de Control

Unidad aritmtica
La unidad aritmtica se alimenta a travs de un par de multiplexores MX y MY,
de tres entradas y una salida, que permiten seleccionar el origen de sus entradas X
e Y. Estos multiplexores se gobiernan mediante las seales XX1 y XX2, que
llamaremos de forma general XX, y las seales XY1 y XY2, que llamaremos de
forma general XY Las entradas 1, 2 y 3 de los multiplexores se seleccionan con
las seales XX o XY a 01, 10 y 11 respectivamente.

Se supone que la unidad aritmtica est basada en las pastillas 74181 (ver
figura 5.35, pgina 218). Se necesitan, por tanto, cuatro seales de control para
seleccionar una de las 16 operaciones que es capaz de realizar e174181, seales
que llamaremos OP7, OP2, OP3 y OP4, y en trminos generales OP

Se ha supuesto que la unidad aritmtica dispone de un registro auxiliar


RA, que se carga con la seal FRA. La salida de RA se conecta al bus de datos,
mediante la seal TRA, y ala unidad aritmtica, a travs de la entrada 1 del multi-
plexor X. Este registro RA es transparente al usuario, y sirve para que la unidad
de control almacene resultados intermedios de ciertas operaciones, como pueden
ser la divisin y la multiplicacin.

La salida de la unidad aritmtica est conectada a tres lugares: al registro


RA, al bus de datos, mediante la seal de activacin triestado TA, y al bus de
direcciones, mediante la seal de activacin triestado TD.

Con excepcin del registro auxiliar RA, la unidad aritmtica es combina-


cional, o sea, no sirve para almacenar datos. Se emplear exclusivamente para
establecer un camino entre uno o dos orgenes (segn sea mondica o didica la
operacin a realizar) y un destino, donde se almacenar el resultado. Por ello, sus
seales de control XX, XY, OP, TA y TD son de nivel, y sirven para establecer el
camino deseado origen(es)-destino, debiendo permanecer estables en su valor
durante todo el tiempo de la operacin elemental de proceso correspondiente.

Arquitectura de Ordenadores I 153


Tema 10

Banco de registros
El banco de registros incluye los registros de propsito general visibles al usuario,
esto es, que se pueden manejar desde el ensamblador o el lenguaje mquina. Se
supondr que se dispone de un banco de 16 registros, con dos puertas A y B de
salida y una A' de entrada. Mediante las dos direcciones DA y DB, cada una de
ellas de 4 bits, se pueden leer simultneamente dos registros, cuyos contenidos se
obtienen por las salidas A y B. Adems, las entradas del registro de direccin DA
quedan conectadas a la entrada A', por lo que puede cargarse con nueva informa-
cin, proveniente del bus de datos, mediante la seal de flanco E.

Obsrvese que el contenido del registro RDA, independientemente de la


informacin presente en A', no se modifica hasta que se activa la seal E. Ade-
ms, si una vez accionado E no se modifica DA, pasado el retardo interno del
banco de registros, aparecer en A el nuevo valor del registro RDA.

Dado que las direcciones de los registros empleados toman parte de las
instrucciones, la unidad de control deber tomar los bits correspondientes de la
instruccin, de acuerdo con su formato, y encaminarlos a DA o Di segn se re-
quiera.

rganos de Control
El control del computador exige disponer de unos registros auxiliares de
propsito especfico (PC, I, EST, ...), adems de la unidad de control propiamente
dicha El gobierno de estos registros exige las siguientes seales:

1.- Contador de programa PC.

Se emplea la seal FP para cargar una nueva informacin en este registro.


Adems, la seal de activacin triestado TP le abre hacia el bus de direcciones Por
otro lado, la salida del registro PC est permanentemente conectado ala entrada 3
del multiplexor Y

154 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

2.- Registro de Instrucciones I.

Este registro se carga con la seal de flanco El Dado que los operandos
inmediatos, as como los desplazamientos de los direccionamientos relativos, se
tienen que poder encaminar a la unidad aritmtica, dispone de la seal de activa-
cin triestado TI que, adems, realiza la correspondiente expansin de signo, para
ajustar estas informaciones al ancho de la palabra de la unidad aritmtica.

Aunque no est representado en la figura 7.5, los campos del registro I que
contienen Direcciones de registros han de estar conectados a las entradas de di-
reccin DA y/o DB del banco de registros

3.- Registro de estado EST.

Este registro almacena, entre otras, las seales de estado generadas por la
unidad aritmtica. -a carga se hace mediante varias seales de flanco FEST, que
permiten realizar una carga selectiva, dependiendo de la instruccin ejecutada.

4.- Registro de fases y periodos RF.

Este es un registro contador que se va incrementando con los pulsos de un


oscilador o reloj maestro. Permite diferenciar los correspondiente periodos y fases
de las instrucciones, necesarios para realizar sus operaciones elementales. Me-
diante la seal PO se puede poner a cero, lo que permite iniciar la cuenta de los
periodos de cada instruccin.

Temporizacin De Las Seales De Control: Periodos Y


Fases
La gran mayora de los computadores tienen un funcionamiento sncrono, gober-
nado por un oscilador o reloj general Los flancos de este reloj representan la
temporizacin bsica del sistema, puesto que determinan el menor tiempo que
puede durar una operacin elemental.

Se llamar periodo a cada uno de estos tiempos elementales, determinados


por el reloj maestro. En el ejemplo de computador de la seccin anterior, se ha
supuesto un reloj de 10 MHz, lo que equivale a un periodo de 100 ns de duracin.

Por otro lado, la ejecucin de una instruccin de mquina se suele dividir


en las cuatro fases siguientes:
Lectura de la instruccin (instruction Fetch).
Lectura de los operandos y decodificacin de la instruccin.
Ejecucin de la operacin.
Almacenamiento del resultado.
Evidentemente, no todas las instrucciones necesitan estas cuatro fases As,
una suma puede tener las cuatro fases diferenciadas, mientras que una bifurcacin

Arquitectura de Ordenadores I 155


Tema 10

puede contar solamente con la primera y la segunda, que servir para determinar
la direccin de bifurcacin.

Cada fase puede requerir uno o varios periodos para su ejecucin, tal y
como muestra la figura 7.7.

El objetivo de dividir las instrucciones en fases es sistematizar su trata-


miento, para simplificar el diseo de la unidad de control.

Ejecucin De Instrucciones: Cronogramas


En esta seccin, se vern las rdenes elementales necesarias para llevar a cabo
algunas instrucciones de mquina. Tambin se desarrollarn los cronogramas
necesarios, basndose en el esquema simplificado de computador que muestra la
figura 7.5 (pgina 273).

ADD .4,.7
Se plantea, en este ejemplo, una instruccin sencilla como es la suma en modelo
de ejecucin Reg-Reg. El formato supuesto en la instruccin es el siguiente:

La ejecucin de la instruccin, suponiendo que el contador de programa


contiene su direccin, requiere las siguientes operaciones elementales:
1: D <- PC. Transferencia del contenido del contador de programa al registro
de direcciones D.
2: I <- M(D). Ejecucin de un ciclo de lectura en memoria principal, cargando
el resultado en el registro I.
3: Decodificacin de la instruccin leda.
4: R4 <- R4 + R7. Realizacin de la suma deseada. Para ello, se debern esta-
blecer los siguientes caminos:
Conexin del Registro R4 a la puerta Y del operador, va la puerta
A del banco de registros.

Conexin del Registro R7 ala puerta X del operador, va la puerta


B del banco de registros.

156 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

Activacin de las seales OP con el cdigo que especifique la suma


X+Y. - Conexin de la salida del operador a la entrada A del ban-
co de registros.

Adems de estas cuatro operaciones elementales, se debe preparar la eje-


cucin de la instruccin siguiente, esto es, se debe incrementar el contador de
programa PC, para que apunte a la siguiente instruccin. De esta forma, se consi-
gue que la siguiente instruccin encuentre la misma situacin que se ha supuesto
para la suma, por lo que requerir unas operaciones iniciales equivalentes a las 1 y
2 consideradas aqu.

El cronograma necesario, para realizar las 5 operaciones elementales ante-


riores, se encuentra en la figura 7.8. Veamos detalladamente las seales de cada
una de ellas.
D <- PC. Para hacer esta transferencia, que introduce en el registro
de direcciones el contenido del contador de programa, hay que abrir el
registro PC al bus de direcciones, mediante la seal TP, y hay que acti-
var la seal de flanco FD. Esta operacin se realiza en el periodo -1.
I <- M(D) Segn se vio en la figura 7.6 (pgina 274), se requieren 3
periodos para realizar la lectura de memoria principal (periodos 0, 1 y
2), emplendose las seales CM y L para realizar este ciclo de lectura.
Puesto que se desea almacenar el resultado en el registra I, en el ltimo
periodo (periodo 2) se activa la seal TM, que abre la memoria al bus
de datos, y se activa la seal de flanco FI, que introduce la instruccin
leda en el registro I.
La decodificacin de la instruccin supone el reconocimiento de su
cdigo de operacin. Desde el punto de vista del cronograma, esto sig-
nifica que no se pueden generar seales de control, correspondientes a
la instruccin leda, hasta un cierto tiempo despus de estar almacenada
en el registro I. Este tiempo viene determinado por los retardos internos
de la unidad de control. Se supondr, en este ejemplo, que la decodifi-
cacin requiere un periodo (periodo 3).
Re < - R4 + Rz. Para conectar el registro R4 a la entrada Y del ope-
rador, hay que introducir, por los cuatro bits de DA, el valor de la
direccin del R4, esto es, 0100 (= 4). Adems, las dos seales XY debe-
rn tomar el valor 10, para seleccionar la entrada 2 del multiplexor Y.
De forma similar, para conectar R7 ala entrada X, hay que hacer DB =
0111 (= 7) y XX = 11, para seleccionar la entrada 3 del multiplexor X.
Por ello, la unidad de control deber encaminar los bits 8 a 11 de la ins-
truccin, a la entrada de direcciones DA, y los bits 12 a 16, a la entrada
de direcciones DB del banco de registros.
Encaminados los dos operandos R4 y R7 al operador, se debe activar ste
con el cdigo OP de suma (OP = X + Y). La salida del operador debe abrirse,
mediante la seal TA, al bus de datos, a travs del cual se puede acceder a la
entrada A' del banco de registros, destino del resultado.

Arquitectura de Ordenadores I 157


Tema 10

Todas estas seales se activan durante el periodo 4, al final del cual, la se-
al de flanco E almacena el resultado de la suma en el registro R4, tal y como se
desea.

El cronograma de la figura 7.8 incluye, en lnea de trazos, el incremento


del contador de programa, operacin elemental que se realiza en el ciclo 2, "recir-
culando" el contenido del registro PC atreves de la unidad aritmtica, que se
activa como incrementador. Las seales para establecer este camino son las si-
guientes: XY = 11, OP = Y + 1 y TD. Por su lado, la seal de carga FD almacena
este valor incrementado otra vez en PC.

Obsrvese que, el incremento del contador de programa, puede hacerse en


cualquier ciclo posterior al -1. Lo normal es hacerlo durante el periodo muerto de
la fase de fetch, pero lo ms tarde posible para poder solapar al mximo, el final
de cada instruccin, con el principio de la instruccin siguiente.

Se analizarn, finalmente, las seales FEST y PO. La primera se activa al


final del periodo 4, esto es, cuando se ha realizado la suma especificada por la
instruccin. Sin embargo, esta seal no se activ al usar la unidad aritmtica para
incrementar el contador de programa, puesto que lo que interesa es almacenar, en
el registro de estado, las condiciones de la operacin R4 + R7, pero no las del
incremento de PC. La seal PO se activa al iniciarse la lectura de la instruccin,
poniendo a cero el contador RF, y volvindose a activar cuando se inicia la lectura
de la siguiente instruccin.

158 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

LD .3,#734[.4++]
Se trata, en este caso, de una instruccin de transferencia entre una posicin de
memoria principal y un registro. La direccin de memoria se especifica mediante
direccionamiento relativo autopostincrementado. La instruccin se supone con el
formato siguiente:

Las operaciones elementales a realizar son las siguientes:


1: D r PC.
2: I <- M(D). Lectura de la instruccin.
3: Decodificacin.
4: D <- DESPLAZ + Re, en este caso D <- 734 + R4. Clculo de la direccin
origen.
5: RA <-- M(D). Lectura del dato y almacenamiento en destino.
6: R4 r- R4 + 1. Autoincremento del registro ndice o base. Esta operacin
elemental debe ser posterior a la 4, para que se ajuste al tipo postincremen-
to.
7: PC F PC + 1. Incremento del contador de programa. El cronograma corres-
pondiente se encuentra en la figura 7.9. Las operaciones elementales se
realizan de la siguiente forma:

Arquitectura de Ordenadores I 159


Tema 10

En el periodo -1, se realiza la transferencia D <- PC, mediante las


seales TP y FD. Simultneamente, se pone a cero el contador RF, me-
diante la seal PO.
La lectura de la instruccin y su almacenamiento en el registro I se
realizan en los periodos 0, 1 y 2, emplendose las seales L, CM. TM y
FI
De igual forma que en el ejemplo anterior, el incremento del conta-
dor de programa se hace en el periodo 2, mediante las seales XY -- 11,
OP = Y + 1, TD y FP.
Se supondr que, durante la decodificacin, se inicia de forma au-
tomtica el clculo de la direccin relativa del operando origen D = RB
+ Desplazamiento. Obsrvese que, el hacer esta operacin elemental de
forma automtica, presupone que se har siempre, aunque la instruccin
no lo necesite (p.e. se hara en la instruccin anterior ADD .4, .3, aun-
que en este caso no se utilizara el resultado). Esta operacin se realiza
en el periodo 3 mediante las siguientes seales de nivel DA = 0100 (=
4), XY = 10, XX = 10, TF, TD y OP = X + Y, almacenndose el resul-
tado en D, mediante la seal FD.
Cargada en D la direccin del operando, su lectura se inicia en el
periodo 4.
En este mismo periodo se autoincrementa el registro ndice o base
114. Para ello, se recircula a travs de la unidad aritmtica, mediante
las seales: DA = 0100 (= 4), XY = 10, OP = Y + 1 y TA, y se almace-
na en el R4, mediante el pulso E.

160 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

En el periodo 6, coincidiendo con el ltimo periodo del ciclo de


lectura del origen, se abre la memoria principal al bus de datos, se se-
lecciona el registro R3. haciendo DA = 0011 (= 3), y se almacena aqul
en el destino Re, mediante el pulso E.
Se resaltar, finalmente, que no se ha activado la seal FEST, lo cual sig-
nifica que esta instruccin no se modifica el estado.

SUB .12,[#1734[.13]]
En esta instruccin, se utiliza direccionamiento indirecto relativo, por lo que se
debern hacer dos accesos a la memoria principal, para obtener el segundo ope-
rando. La instruccin tendr el formato siguiente:

Las operaciones elementales son las siguientes:


1: D < PC.
2: I r- M(D). Lectura de instruccin
3: Decodificacin.
4: D r- Desplaz. + R e ; D - 1734 + R13. Clculo de la direccin del operando
5: D r- M(D). Lectura de la direccin del operando y carga en D.
6. RM F M(D). Lectura del operando y carga en el registro interno RM
7: R12 <- R12 - RM. Operacin de resta.
8: PC - PC + 1. Preparacin de la instruccin siguiente.
Los primeros 4 pasos son Idnticos a los de la instruccin del ejemplo an-
terior, por lo que no merecen ningn comentario adicional.
La operacin elemental 5 consiste en una lectura de memoria prin-
cipal, cuyo resultado se enva directamente, durante el periodo 6, al
registro D, para preparar as la lectura del operando en un ciclo de lec-
tura posterior. Las seales empleadas son las siguientes: L, TM, TBD y
FD, desarrollndose este ciclo de lectura en los periodos 4, 5 y 6.
La operacin elemental 6 consiste en la lectura del operando. Este
se deja almacenado en el registro RM, para su empleo posterior Las se-
ales empleadas son las siguientes: CM, L y FLM, utilizndose los
periodos 7, 8 y 9. Obsrvese que cabra haber establecido un camino
desde la memoria principal hasta la entrada X de la unidad aritmtica,
va el bus de datos. Sin embargo, puesto que el resultado de la memoria
slo estara disponible al final del ciclo, se ha supuesto que no habra
tiempo suficiente para realizar la operacin de resta.
El resto de la Instruccin se realiza de forma solapada con el inicio de la
siguiente. En concreto, se emplean sus dos primeros periodos 0' y t'.

Arquitectura de Ordenadores I 161


Tema 10

La operacin elemental R12 r- R12 - RM no puede hacerse de gol-


pe. En efecto, para llevar el contenido del registro RM a la entrada X de
la unidad aritmtica, se emplea el bus de datos Igualmente, para llevar
el resultado a la puerta A', de entrada del banco de registros, se emplea
tambin el bus de datos Por tanto, estos dos caminos no se pueden esta-
blecer simultneamente. Para evitar este problema, se hace primero la
resta, pero almacenando el resultado en el registro temporal RA Esta
resta, RA r- R12 - RM, se hace en el periodo 0', empleando las siguien-
tes seales DA -- 12, XV = 10, XX = 01, TRM, OP = V - X, y el pulso
de carga FRA.
Por su lado, la transferencia R12 <- RA se hace en el periodo 1',
mediante las seales DA -- 12, TRA y el pulso E.
Para terminar, cabe destacar que la seal de flanco FEST se activa al final
del periodo 0', lo que significa que el resultado de la resta actualiza los biestables
de estado.

162 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

BZ #1342[.6]
Se trata, en este caso, de una instruccin de bifurcacin condicional 'si cero', cuyo
formato es el siguiente:

Como es lgico, esta instruccin puede presentar dos cronogramas distin-


tos, uno para el caso de bifurcacin y otro para no bifurcacin. La unidad de
control seleccionar uno de estos dos cronogramas, empleando para ello la seal
de salida del circuito que compara los biestables de estado del computador con la
condicin de bifurcacin. Como se ha indicado con anterioridad, el resultado del
comparador puede considerarse como un bit adicional del cdigo de operacin, bit
que selecciona la opcin de no operacin o la de bifurcacin.

Las operaciones elementales a realizar son las siguientes


1: D <- PC.
2: I <- M(D). Lectura de la instruccin.
3: Decodificacin y comprobacin de la condicin de comparacin. Si no se
cumple la condicin de comparacin se sigue con:
4: Iniciar la instruccin siguiente.
Si se cumple la condicin de comparacin se sigue con:
4': PC 1- D r- Desplaz. + RB.
5: Iniciar la instruccin siguiente.
La figura 7.11 presenta los dos cronogramas. Se destacarn los siguientes
puntos:
El contador de programa es incrementado durante la parte de cro-
nograma comn. Obsrvese que este incremento sera innecesario para
el caso de bifurcacin, puesto que este valor incrementado se destruye
sin emplearse, pero es ms sencillo incrementarlo siempre.
En la operacin elemental 4', el resultado de la suma se carga si-
multneamente en los registros D y PC, al activarse al mismo tiempo
las dos seales de flanco FD y FP. De esta forma se ahora el periodo de
transferencia D - PC, con lo que se gana un poco de tiempo.
Evidentemente, esta instruccin no debe modificar el estado, por lo que no
se activa FEST.

Instrucciones mayores o menores que la palabra


En todos los ejemplos analizados se ha supuesto, por simplicidad, que la instruc-
cin se lee en un solo acceso a memoria principal y que cabe en el registro de
instrucciones I. Sin embargo, en la prctica la instruccin puede ser una fraccin
del ancho de palabra, o puede ser mayor que ste, lo que se desprende de un anli-

Arquitectura de Ordenadores I 163


Tema 10

sis de los formatos de instruccin reales presentados en la seccin 6.11, pgina


257.

Para tratar estas situaciones eficazmente, se debe disponer de los meca-


nismos que permitan hacerlas siguientes operaciones:
Si la instruccin no ocupa toda la palabra, se deben guardar tempo-
ralmente los bits sobrantes, que corresponden a la siguiente instruccin,
para evitar tener que volverlos a leer. Esto exige tener un mecanismo
que recuerde esta situacin y modifique, en su caso, el cronograma de
forma adecuada para recuperar esos bits y mandarlos al registro I, sin
repetir el acceso a memoria.
Si la instruccin requiere ms de una palabra de memoria hay que
repetir el ciclo de lectura de instruccin (fetch), tantas veces como sea
necesario. Generalmente, la primera palabra de la instruccin, que con-
tiene su cdigo de operacin, se mantiene en el registro I, cargndose
las otras palabras, que generalmente almacenan datos inmediatos o di-
recciones absolutas, en registros temporales.

Asignacin de periodos a cada instruccin


Aunque, por claridad conceptual, se han iniciado los ejemplos de crono-
gramas, presentados en las secciones anteriores, mediante la lectura de la

164 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

instruccin que se va a ejecutar, es evidente que una instruccin slo puede gene-
rar seales de control una vez leda e interpretada.

En este sentido, los periodos correspondientes a un cdigo de operacin


determinado son los que van desde que ha sido cargado en el registro I e interpre-
tado, hasta que ha cargado la instruccin siguiente y ha sido interpretada. Cada
instruccin termina con la carga o fetch de la siguiente. En este sentido, las ins-
trucciones consideradas en los ejemplos anteriores empiezan en el periodo 3 de
los respectivos cronogramas y terminan en el periodo 2'.

Diseo de la Unidad de Control


Como se indica en la figura 7.5, la unidad de control toma como entrada el cdigo
de operacin, contenido en el registro I, as como del periodo en que se encuentra
la instruccin, periodo que est recogido en el contador RE Con estas informacio-
nes (a las que ocasionalmente se debe aadir la salida del comparador de estado)
quedan perfectamente definidas las seales de control que deben activarse durante
ese periodo.

En este sentido, la unidad de control es un mero traductor (esto es, un cir-


cuito combinacional) que convierte la combinacin [cdigo de operacin +
periodo + estados] en las seales de control especificadas en el correspondiente
cronograma.

El diseo de la unidad de control exige, por tanto, haber definido previa-


mente las seales que hay que activar en cada una de las instrucciones de mquina
que debe ser capaz de interpretar Esta definicin puede hacerse a nivel de crono-
grama, a nivel de operaciones elementales o mediante un lenguaje simblico, que
exprese en todo detalle las operaciones a realizar, as como el orden en que deben
llevarse a cabo.

Obsrvese que, el secuenciamiento de instrucciones, se encuentra incluido


en cada una de ellas. En efecto, en las secciones anteriores, se ha visto que toda
instruccin se encarga de iniciar la siguiente, por tanto, el secuenciamiento de
instrucciones no implica ninguna condicin adicional de diseo sobre la unidad de
control

Por otro lado, la duracin de las seales viene determinada por el reloj u
oscilador general, debiendo acomodarse a un nmero entero de periodos.

Para tener una idea de la dimensin y complejidad que reviste el diseo de


la unidad de control de un computador, basta con tener en cuenta que, un modelo
pequeo, puede tener las siguientes caractersticas:
Cdigos de operacin de 8 bits.
Mximo de 32 periodos por instruccin.
Media de 16 periodos por instruccin.
Del orden de 150 seales de control.

Arquitectura de Ordenadores I 165


Tema 10

Por tanto, las entradas de la unidad de control son las siguientes:


El registro RE que debe ser de 5 bits
El resultado del comparador (un bit).
El cdigo de operacin de 8 bits.
Todo ello supone que la unidad de control es un circuito con 14 seales de
entrada, 150 seales de salida y del orden de 4.000 combinaciones de excitacin
distintas.

A todo ello debe aadirse el anlisis y ajuste de los retardos de todos los
distintos caminos internos de la unidad de control, lo cual hace que el diseo de
este tipo de circuitos no sea sencillo.

Existen dos mtodos de construir y, por tanto, de disear una unidad de


control:
Mediante lgica cableada.
Mediante una memoria (lgica almacenada).
Veamos, seguidamente, los principios de cada una de ellas.

UNIDAD DE CONTROL EN LGICA CABLEADA


La unidad de control cableada se construye mediante puertas lgicas, y se disea
siguiendo alguno de los mtodos clsicos de diseo lgico.

No entraremos aqu en estas tcnicas de diseo, que se encuentran perfec-


tamente expuestas en los textos de diseo lgico. Solamente haremos unos
comentarios sobre las ventajas e inconvenientes de este tipo de solucin:
Dada la complejidad del circuito considerado, es muy laborioso y
costoso su diseo y puesta a punto.
Adems, es muy difcil de modificar, puesto que suele exigir un re-
diseo completo.
Sin embargo, en igualdad de condiciones, este circuito es ms rpi-
do que el diseado mediante lgica almacenada, por lo que los
computadores muy potentes usan lgica cableada.
Obsrvese que, tericamente, se podra construir la unidad de control con
slo dos niveles de puerta Aunque esto no es posible por la limitacin en el nme-
ro de entradas que tienen las puertas, as como por su limitacin de fan-out (esto
es, por la limitacin en el nmero de entradas al que se puede conectar cada salida
de una puerta), sin embargo, se puede disear con unos pocos niveles, por lo que
puede ser muy rpida.

A pesar de las dificultades expuestas, el diseo de unidades de control ca-


bleadas est tomando un nuevo auge. Esto se debe a las modernas tcnicas de
diseo por computador (CAD) para circuitos VLSI, que resuelven
automticamente la mayor parte de las dificultades de diseo de lgica cableada,
existiendo los llamados compiladores de silicio que generan directamente las

166 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

los llamados compiladores de silicio que generan directamente las matrices de


fabricacin de los circuitos VI-SI. A ello hay que aadir la carrera de los fabrican-
tes hacia mquinas cada vez ms rpidas, en las que la lgica cableada ofrece una
buena solucin.

UNIDAD DE CONTROL ALMACENADA:


MICROPROGRAMACIN
La idea bsica de la unidad de control almacenada reside en emplear una memoria
para almacenar la informacin de las seales de control de cada periodo de cada
instruccin. Por tanto, para generar un cronograma basta con ir leyendo las distin-
tas palabras de esta memoria.

A cada palabra, que define un periodo de una instruccin, se le llama mi-


croinstruccin, por lo que estas unidades de control tambin reciben el nombre de
unidades de control microprogramadas.

El mbito de aplicacin de las unidades de control microprogramadas, es


tpicamente el de los computadores de tamao medio. En los muy pequeos, la
estructura que necesita la microprogramacin es demasiado compleja y no resulta
econmica, mientras que para los grandes su funcionamiento es demasiado lento

Introduccin histrica
Hacia el ao 1950 M.V. Wilkes y otros autores proponen la idea de la unidad de
control microprogramada. El esquema propuesto por M.V. Wilkes, que se recoge
en la figura 7.12, se compone de dos memorias A y B, construidas como matrices
de diodos, con el funcionamiento siguiente: Las microinstrucciones se encuentran
almacenadas en la matriz A, de donde son ledas mediante un rbol de decodifica-
cin. La matriz B contiene la direccin de la siguiente microinstruccin. Las
micro bifurcaciones se producen mediante ur , seal que selecciona entre dos
entradas a la matriz B.

Arquitectura de Ordenadores I 167


Tema 10

Histricamente, la microprogramacin se utiliza comercialmente por pri-


mera vez en la familia de computadores IBM 360, iniciada a mediados de los aos
60. Esta tcnica se aplic a la gama baja de esta familia, pero, por razones de
velocidad, no se aplic a la alta.

Concepto de microprograma
Como se ha dicho, una microinstruccin es una cadena de "unos' y "ceros" que
representa los valores de las seales de control durante un periodo.

El conjunto ordenado de microinstrucciones, que constituyen el cronogra-


ma de una instruccin se llama microprograma. Ejecutar un microprograma
consiste en ir leyendo cada una de las microinstrucciones que lo forman, enviando
las seales ledas al computador como seales de control. La cadencia de lectura
deber ser la del reloj bsico del computador, para as reproducir fielmente los
cronogramas de las instrucciones

Se emplea el trmino de firmware para referirse globalmente al conjunto


de los microprogramas de una mquina, es un trmino de difcil equivalencia
castellana, que en algunas ocasiones puede traducirse por microcdigo.

A ttulo de ejemplo, la instruccin ADD .4, 7 de la figura 7.8 (pgina 278)


se puede definir mediante el microprograma de 5 microinstrucciones de la tabla
7.1 Obsrvese que, por las razones apuntadas en la seccin 7.5.6 (pgina 284), el
microprograma empieza con el periodo 3 de ejecucin de la suma y que las mi-
croinstrucciones n' 3, 4 y 5 se encargan de hacer el fetch de la instruccin
siguiente. Para establecer estas microinstrucciones se ha considerado que el cdi-
go de incremento es OP = 0110 y el de suma es OP -- 1011.

Obsrvese que, en las microinstrucciones, las seales de flanco han sufrido


el mismo tratamiento que las de nivel. Esto no produce ninguna dificultad espe-
cial, puesto que, para obtener una seal de flanco, basta con recortar una de nivel

168 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

con la seal de reloj, lo que se puede hacer, sencillamente, con una puerta AND
por cada seal.
I1 I2 I3 I4 I5
TP 0 1 0 0 0
FD 0 1 0 0 0
CM 0 0 1 0 0
L 0 0 1 1 1
TM 0 0 0 0 1
FI 0 0 0 0 1
DA0 0 0 0 0 0
DA1 0 0 0 0 0
DA2 0 1 0 0 0
DA3 0 0 0 0 0
DB0 0 1 0 0 0
DB1 0 1 0 0 0
DB2 0 1 0 0 0
DB3 0 0 0 0 0
XY1 0 0 0 0 1
XY2 0 1 0 0 1
XX1 0 1 0 0 0
XX2 0 1 0 0 0
OPO 0 1 0 0 0
OP7 0 1 0 0 1
OP2 0 0 0 0 1
OP3 0 1 0 0 0
TA 0 1 0 0 0
E 0 1 0 0 0
TD 0 0 0 0 1
FP 0 0 0 0 1
FEST 0 1 0 0 0
PO 0 1 0 0 0

Ventajas de la microprogramacin
Como ya se ha indicado, la unidad de control microprogramada puede ser dema-
siado compleja para mquinas sencillas y demasiado lenta para mquinas grandes.
Sin embargo, presenta una serie de ventajas que hacen que su uso sea muy atracti-
vo.

La ventaja principal de la unidad de control almacenada es su simplicidad


conceptual, y el hecho de que la informacin de control reside en una memoria,
que, si bien suele ser de tipo ROM, tambin puede ser de tipo RAM. Todo esto
hace que:
1: Las correcciones, modificaciones y ampliaciones son mucho ms fciles de
hacer que en una unidad cableada. No hay que redisear toda la unidad, sino
simplemente cambiar el contenido de algunas de las posiciones de la memo-
ria de control.
2: Se pueden incluir, sin grandes dificultades hardware, instrucciones comple-
jas, que tengan muchos periodos de duracin. basta con poner una memoria
de control suficientemente grande

Arquitectura de Ordenadores I 169


Tema 10

3: Permite bajar, a este nivel de interpretacin, algunas de las funciones ms


empleadas del computador, especialmente, algunas de las funciones del sis-
tema operativo.
4: Se pueden construir computadores que sean capaces de ejecutar varios jue-
gos de instrucciones, basta con cambiar el contenido de la memoria de
control para pasar de un juego de instrucciones a otro. Obsrvese que en, es-
te caso, la memoria de control deber ser de tipo RAM.
5.- La propiedad anterior permite emular otros computadores, esto es, repro-
ducir su juego de instrucciones para poder ejecutar sus programas mquina.
Incluso permite que las instrucciones de una mquina varen de forma di-
nmica, esto es, en tiempo de ejecucin.
6: Permite hacer rutinas de diagnstico del computador muy completas, puesto
que, desde la microprogramacin, se controlan en mucho ms detalle todos
los elementos del computador, que desde las instrucciones de mquina.
Conviene resaltar aqu que la elaboracin del microcdigo es muy dificul-
tosa, por lo que la simplificacin del diseo del hardware se paga con el diseo
del firmware.

Estructura bsica de la unidad de control microprogramada


Para que una unidad de control microprogramada pueda llevar a cabo su cometi-
do, ha de cumplir las tres condiciones bsicas siguientes
1: Ha de tener una memoria de control con capacidad suficiente para almacenar
todos los microprogramas correspondientes a todas las instrucciones de m-
quina.
2: Ha de tener un procedimiento para hacer corresponder a cada instruccin de
mquina su microprograma, o lo que es lo mismo, ha de tener un procedi-
miento para convertir el cdigo de operacin de la instruccin en la
direccin de la memoria de control donde empieza su microprograma.
3: Ha de tener un mecanismo para )r leyendo las sucesivas microinstrucciones
del microprograma en curso y para bifurcar a un nuevo microprograma,
cuando termina el que se esta ejecutando.
Existen dos alternativas para resolver las condiciones 2 y 3, que denomina-
remos de secuenciamiento explcito y de secuenciamiento implcito.

Secuenciamiento explcito

El secuenciamiento explcito, propuesto por Wilkes, consiste en incluir en cada


microinstruccin la direccin de la microinstruccin siguiente. Puesto que, en este
caso, las microinstrucciones de un microprograma pueden estar desordenadas, la
condicin 2 anterior se cumple fcilmente. Basta reservar las primeras posiciones
de la memoria de control para albergar la primera microinstruccin de cada ins-
truccin, justamente en la direccin que expresa el valor de su cdigo de
operacin. Por otro lado, no exige ningn mecanismo de secuenciamiento, puesto
que cada microinstruccin suministra la nueva direccin que se tiene que usar en

170 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

la memoria de control. El encadenamiento con una nueva instruccin se resuelve


mediante una seal de control, que toma como direccin de la siguiente microins-
truccin el nuevo cdigo de operacin.

El mayor inconveniente de esta solucin es la gran cantidad de memoria


de control empleada en el secuenciamiento de las microinstrucciones. A 10ulo de
ejemplo, supngase una memoria de control de 4K palabras. Se requieren 12 bits
para direccionar esta memoria, lo que supone que se emplean 4Kx12 bits para
direcciones, una cantidad importante de memoria.

La figura 7.13 presenta el esquema de esta solucin. El oscilador genera la


seal de carga en el registro de microinstrucciones, estableciendo el periodo
bsico de la mquina. La parte de direccin se realimenta ala memoria de control
para iniciar la lectura de la microinstruccin siguiente. El multiplexor de direccio-
nes permite seleccionar entre el cdigo de operacin de una nueva instruccin o la
direccin de la microinstruccin. Este multiplexor, gobernado por una serial de
control, permite, a la ltima microinstruccin de un microprograma, enganchar
con la primera microinstruccin del siguiente.

Secuenciamiento Implcito

El secuenciamiento implcito obliga a tener ordenadas las microinstruccio-


nes, de cada microprograma, en posiciones consecutivas de la memoria de control
De esta forma, ya no es necesario que las microinstrucciones contengan la direc-
cin de la siguiente, con el evidente ahorro de memoria. Como contrapartida, se
necesita establecer un mecanismo que resuelva las condiciones 2 y 3 antes men-
cionadas.

La primera, se resuelve de forma sencilla, introduciendo una etapa traduc-


tora entre el cdigo de operacin y el multiplexor de direcciones de la memoria de
control. Este traductor no es ms que una pequea memoria ROM o una PLA.
Suponiendo que el cdigo de operacin tiene 8 bits y que la memoria de control
tiene 4K palabras, el tamao del traductor ser de 256 palabras de 12 bits.

Arquitectura de Ordenadores I 171


Tema 10

La segunda condicin se resuelve dotando a esta unidad de control de un


registro de microdirecciones y de un incrementador.

La figura 7.14 muestra el esquema general. La temporizacin base viene


generada por un oscilador, que genera una seal peridica empleada en cargar el
registro de direcciones y el de microinstrucciones.

El encadenamiento de microprogramas es muy similar al caso anterior.


Una seal de control activa el multiplexor, de forma tal que la ltima microins-
truccin de un microprograma selecciona como siguiente direccin, la
informacin que proviene de la ROM o PLA.

Formato y codificacin de las microinstrucciones


De acuerdo con el concepto bsico de microinstruccin, introducido al principio
de esta seccin, sta tiene un bit por cada seal de control y una duracin de un
periodo

Esta solucin, conceptualmente muy sencilla, no es, sin embargo, muy


empleada, puesto que es cara. En efecto, segn se puede desprender de los crono-
gramas ejemplo de la seccin 5, las instrucciones realizan, generalmente, una sola
operacin elemental en cada periodo, por lo que las microinstrucciones estn
llenas de "ceros". Aunque en computadores ms complejos se pueden simultanear
operaciones elementales, sus microinstrucciones contendran tambin una gran
cantidad de ceros, puesto que hay muchas seales de control incompatibles. Por
todo ello, la microinstrucciones se codifican de manera que tengan una longitud
ms reducida.

A veces, a cada microinstruccin se le asigna una duracin de ms de un


periodo, tambin con el objetivo de reducir el tamao total de la memoria de
control.

Se denomina microprogramacin horizontal al caso de usar microins-


trucciones no codificadas. Por el contrario, se denomina microprogramacin
vertical al caso de usar instrucciones altamente codificadas. Evidentemente,

172 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

segn el grado de codificacin existen microprogramaciones ms o menos hori-


zontales o verticales, emplendose, corta se ver a continuacin, una gran
cantidad de soluciones.

Como es lgico, las microinstrucciones horizontales presentan formatos


muy largos, pero permiten utilizar los elementos del computador en paralelo. Por
el contrario, las microinstrucciones verticales tienen formatos cortos, pero no
permiten paralelismo La ventaja de la microprogramacin vertical estriba en que
utiliza menor cantidad de memoria de control, aunque exige una decodificacin
posterior.

Formato de la microinstruccin

El formato de las microinstrucciones especifica el nmero de bits que tienen, y el


significado de cada uno de ellos. Las seales de control, que sirven para accionar
un mismo rgano, se suelen agrupar, formando un campo del formato de la mi-
croinstruccin. Por ejemplo, formarn campos las seales siguientes:
Las seales triestado que gobiernan el acceso a un bus,
Las seales de gobierno de la unidad aritmtica.
Las seales de gobierno del banco de registros.
Las seales de gobierno de la memoria.
La seccin 7.8.9, presenta algunos ejemplos de formatos de microinstruc-
ciones

Codificacin de campos

Una primera tcnica, para acortar el tamao de las microinstrucciones, es codifi-


car todos o algunos de sus campos. Supngase, por ejemplo, que el computador
tiene un bus de datos al que se conectan 13 elementos distintos. Si no se codifica-
ra, haran falta 13 seales para gobernar este bus, pero dado que, de estas 13
seales, solamente una puede estar activa en cada periodo, se puede emplear un
campo que tenga slo 4 bits. Mediante un pequeo decodificador de 4 en 16, este
campo permitira conectar al bus hasta 16 elementos distintos. La figura 7.15
representa esta solucin, cuyo principal inconveniente es que requiere una etapa
de decodificacin con su correspondiente coste y el retardo que inevitablemente
introduce en las seales de control.

Arquitectura de Ordenadores I 173


Tema 10

Solapamiento de campos

Segn se ha indicado anteriormente, solamente unas pocas seales de control


estn activas en cada periodo. Es ms, existen con frecuencia seales excluyentes,
esto es, que no se pueden activar nunca simultneamente. Estas situaciones permi-
ten acosar la longitud de las microinstrucciones solapando campos.

Este solapamiento, consiste en emplear un nico grupo de bits de la mi-


croinstruccin para dos campos distintos C1 y C2. Para especificar el significado
de estos bits, y definir si corresponden al campo C1 o al C2, se emplea una seal
adicional Ci2 decodificadora. Un sencillo demultiplexor permite separar ambos
campos, tal y como indica la figura 7.16.

Los dos inconvenientes de esta tcnica son que hace incompatibles las
operaciones elementales gobernadas por los campos C1 y C2, y que el circuito
demultiplexor introduce, adems de su coste, un inevitable retardo en las seales
de control.

Codificacin total

Una alternativa, para reducir drsticamente el tamao de las microinstrucciones,


es hacer una codificacin total de la misma, de forma similar a como se hace con
los cdigos de operacin de las instrucciones de mquina. Ello dara lugar a la
microprogramacin de mxima verticalidad.

El procedimiento consiste en definir todas las microinstrucciones diferen-


tes necesarias para escribir los microprogramas y, seguidamente, codificarlas con
el menor nmero de bits posible. En este caso se requiere un decodificador com-
plejo, cuyo diseo puede ser muy laborioso y cuyo retardo puede ser importante.
Sin embargo, el ahorro en memoria de control puede ser muy grande.

En algunos computadores de bajas prestaciones se ha utilizado esta tcni-


ca, pero realizando la decodificacin mediante otra memoria. La figura 7.17
representa esta solucin. Obsrvese que las informaciones contenidas en la memo-
ria de control no son ms que las direcciones para extraer, de la memoria auxiliar,
la microinstruccin correspondiente. El mayor problema de esta solucin es el
doble retardo de la memoria de control ms el de la memoria auxiliar, lo que hace
que el mecanismo sea lento.

174 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

Microinstrucciones de varios periodos. Nanocontrol

Otra manera de reducir la memoria de control necesaria en un computador, y de


acelerar su funcionamiento, consiste en hacer que cada microinstruccin contenga
la informacin necesaria para realizar las rdenes elementales de varios periodos.
A veces, se dota ala microinstruccin de un campo adicional que especifica el
nmero de periodos que dura

Para poder ejecutar estas microinstrucciones, de duracin variable, la uni-


dad de control deber tener un pequeo contador de periodos. Este contador se
inicializa con la informacin de nmero de periodos de la propia microinstruc-
cin, y se decremento hasta cero.

En caso de emplearse microprogramacin vertical y microinstrucciones de


varios periodos de duracin, cabe plantearse el uso de una unidad nanoprogra-
mada para la ejecucin de las microinstrucciones. Se tendran dos niveles de
microprogramacin, llamndose nanoprogramacin al nivel ms elemental. Esta
solucin, cuyo esquema puede derivarse fcilmente de la figura 7.17, se ha utili-
zado en algunas mquinas de pequeas prestaciones.

Estructura completa de la unidad de control microprogramada

En la seccin 784 (pgina 288) se han planteado las estructuras bsicas de la


unidad de control microprogramada, tanto para el caso de secuenciamiento expl-
cito como implcito. Dichas estructuras no permiten ejecutar ms que
microprogramas lineales, puesto que no tienen ningn mecanismo de ruptura de
secuencia de microprograma.

Ahora bien, las instrucciones de bifurcacin condicional presentan dos


cronogramas alternativos, que se diferencian a partir del punto en el que se hace la
comprobacin de la condicin de bifurcacin. Esta situacin se traduce en que, los
correspondientes microprogramas, han de presentar una microbifurcacin condi-
cional, para seleccionar la rama deseada. Por tanto, es necesario aadir, a la
estructura de la unidad de control microprogramada, un mecanismo de microbi-
furcacin condicional.

Adems, las instrucciones tienen con frecuencia partes comunes, y existen


instrucciones con operaciones repetidas, como pueden ser las de desplazamiento
mltiple, las de divisin y las de multiplicacin. Todo ello hace aconsejable dotar
a la unidad de control microprogramada de los mecanismos necesarios para esta-
blecer microbucles y llamadas a microsubrutinas.

Veamos seguidamente corta se pueden ir aadiendo estas caractersticas a


la unidad de control microprogramada.

Arquitectura de Ordenadores I 175


Tema 10

Microbifurcaciones condicionales

La bifurcacin condicional exige que la microinstruccin de bifurcacin pueda


elegir entre dos direcciones, para poder seguir por uno de los dos caminos alterna-
tivos.

En el secuenciamiento explcito, la mencionada microinstruccin debera


tener dos direcciones completas, pero como esto sera muy costoso, se suele hacer
que ambas direcciones difieran solamente en un bit. Este bit toma el valor del
resultado del comparador de la condicin de bifurcacin, obtenindose as dos
direcciones distintas.

En el secuenciamiento implcito se debe poder elegir entre la microins-


truccin siguiente u otra distinta Por tanto, la microinstruccin de bifurcacin
deber contener dicha direccin. Este es un buen caso para el uso de campos
solapados, solapando el campo de direccin con otros, puesto que slo se necesita
en las microinstrucciones de bifurcacin. Por ejemplo, se puede solapar con los
campos de seales de entrada / salida, de memoria, etc, puesto que incluir un
campo especfico para ello, existente en todas las microinstrucciones, conducira
deforma natural al secuenciamiento explcito.

La figura 7.18 presenta las modificaciones introducidas al esquema de la


figura 7.14, para realizar microbifurcaciones condicionales. Puede observarse, que
el bit resultado del comparador se emplea en la seleccin del multiplexor de di-
recciones, permitiendo elegir entre la direccin anterior incrementada o la
contenida en el campo solapado C4 de la propia microinstruccin. El campo C2
establece la condicin de bifurcacin, por lo que sirve de entrada al comparador.
Por su lado, el bit C3 permite "des-solapar' el campo C4, empleando para ello un
demultiplexor de dos salidas, cuyo control lo realiza C3.

Microbucles y microsubrutinas

La realizacin de microbucles exige una bifurcacin condicional, ms un contador


con autodecremento, que se emplea como condicin de bifurcacin. Dicho conta-
dor debe ser accesible desde la microinstruccin, para poder inicializarle
adecuadamente

176 Arquitectura de Ordenadores I


Diseo de la Unidad de Control

La llamada a subrutina exige poder disponer de un almacenamiento para


salvaguardar la direccin de retorno. La solucin ms usual consiste en aadir una
pila al registro PD, en la que se guardan estas direcciones de retorno

Ms adelante se estudiar el secuenciador AMD 2910 que incluye estos


dos mecanismos.

ARRANQUE DEL COMPUTADOR


Un aspecto importante, en el diseo de un computador, es su arranque. En efecto,
al estar la memoria principal, los registros y los biestables fabricados con semi-
conductores, cuando se activa la alimentacin toman un estado desconocido de
antemano. Esto quiere decir que el contador de programa, los biestables de estado,
el registro de instrucciones, los registros generales y los registros internos tomarn
valores desconocidos, y que, por supuesto, la memoria principal no tendr ningn
programa.

Sin embargo, una vez alimentada, la mquina comenzara con la secuencia


de ejecucin normal Tomara el valor desconocido del registro PC, leera un valor
desconocido de la memoria principal y tratara de ejecutado

Para evitar esta situacin, y que el computador arranque correctamente al


encenderlo, se genera una seal de inicializacin (reset general) que se emplea
para dar un valor determinado a los registros y biestables. Una solucin es poner
todos estos elementos a cero, y asignar el cdigo de operacin de valor cero a la
no operacin (NOP) De esta forma se garantiza que, en el arranque, el computa-
dor inicie la ejecucin en una posicin de memoria determinada (p.e. en la 0).
Basta con disear la memoria principal de forma que, en esa zona, se emplee
memoria de tipo ROM, para que la ejecucin comience correctamente.

Arquitectura de Ordenadores I 177


Tema 10

En general, esta ROM es de tamao reducido y se limita a tener un peque-


o programa cargador, llamado boot-strap, que tiene por objetivo traer a
memoria principal, desde un perifrico de almacenamiento auxiliar (disco, disket-
te, cinta, etc.), el sistema operativo residente.

Cabe, finalmente, considerar la utilizacin de una memoria de control de


tipo RAM. Esto servira, como se vio anteriormente, para tener un computador
cuyo juego de instrucciones se pueda modificar de acuerdo a las necesidades de
cada momento, pero presenta un problema de arranque. Si la memoria de control
no tiene un contenido vlido, el computador no puede empezar a funcionar. Por
ello, deber haber una zona de memoria de control de tipo ROM que contenga una
microrrutina de carga, de forma que lo primero que se haga, al arrancar el compu-
tador, es traer, de la parte ROM de la memoria principal, el microcdigo del juego
de instrucciones en el que est escrito el programa cargador.

178 Arquitectura de Ordenadores I

Vous aimerez peut-être aussi