MAN30 Fundamentos Computadores PDF
MAN30 Fundamentos Computadores PDF
MAN30 Fundamentos Computadores PDF
FUNDAMENTOS DE
LOS COMPUTADORES
Universidad de Málaga
© Los autores
© Publicaciones y Divulgación Científica. Universidad de Málaga.
I.S.B.N.: 84-7496-855-0
Depósito Legal: MA-141/2006
Índice de Figuras IX
Prefacio XIII
i
ii FUNDAMENTOS DE LOS COMPUTADORES
Apéndices 209
Bibliografı́a 277
Índice de figuras
vii
viii FUNDAMENTOS DE LOS COMPUTADORES
xi
xii FUNDAMENTOS DE LOS COMPUTADORES
http://www.ac.uma.es/academia/educacion/cursos/FundCompST/
con apuntes, formulario de consulta/tutorı́a on-line, enlaces a páginas de in-
Prefacio xv
Los Autores
1
Introducción a los
Computadores
OBJETIVOS
Desde tiempos muy antiguos el hombre ha necesitado hacer cálculos. Para ello
se ha buscado máquinas que lo ayudasen, como el ábaco, de origen oriental,
perfeccionado por los griegos; las Hileras de John Napier, que facilitaban la
multiplicación y la división; las Reglas de Cálculo, para calcular funciones
trigonométricas, exponenciales y logaritmos; etc.
Instrucciones Datos
Tarjetas de Tarjetas de
Operaciones Variables
Programa
ter). Esta máquina tiene más memoria pero es más lenta. Utiliza 44 bits
en punto fijo. Las instrucciones son de cuatro direcciones y tiene dos uni-
dades aritméticas. Sin embargo no fue la primera máquina con programa
almacenado.
En 1946, Maurice Wilkes, de la universidad de Cambridge comienza
el EDSAC (Electronic Delay Storage Automatic Calculator). Acaba en
1949 (tres años antes que el EDVAC).
En 1946 von Neumann entra en el Institute for Advanced Study (IAS
de Princeton). Con subvención militar construye el IAS. Algunas de sus
caracterı́sticas son:
• Dimensiones 2.4×2.4×0.6 m
• Memoria de 1024 palabras de 40 bits
Unidad de
Control
Datos Control
Datos
Memoria
Instrucciones
2. ARQUITECTURA:
3. FUNCIONAMIENTO:
El objetivo del procesador es ejecutar instrucciones. Las instruccio-
nes son órdenes elementales (instrucciones máquina). Partimos de un
programa máquina (conjunto de instrucciones máquina) en memoria y
veremos cómo se ejecuta. Como las instrucciones están en memoria acce-
demos a ellas mediante direcciones. Una vez que conocemos la dirección
de la siguiente instrucción a ejecutar, las fases son las siguientes:
4. DEFINICIONES:
- RALU: ALU + Registros.
- PROCESADOR: U.C. + RALU + lógica adicional para interconec-
tar todos los elementos.
- MICROPROCESADOR: procesador integrado en una pastilla de
silicio (chip).
X Sistema Z
ESPECIFICACION IMPLEMENTACION
SINTESIS
SINOPSIS
OBJETIVOS
y en los siguientes apartados iremos viendo, para cada uno de los tipos de
información, qué estrategia de codificación utilizamos normalmente.
Pero antes de entrar en el estudio de la representación de los datos y de
las instrucciones, nos vamos a plantear una cuestión que se presenta inevita-
blemente, debido a que tanto los datos como las instrucciones se representan
mediante cadenas de unos y ceros: desde que von Neumann almacenó tanto
datos como instrucciones en memoria, estos dos tipos de información son in-
distinguibles entre sı́ (es decir, si elegimos una palabra aleatoriamente de
la memoria no podemos decir si es un dato o una instrucción). Algunos di-
señadores argumentaban que se deberı́a añadir una etiqueta (secuencia de bits
especial) para distinguir los datos de las instrucciones y evitar cosas como
intentar ejecutar un dato. Pero añadir etiquetas incrementa el tamaño de la
memoria, el coste HW y realmente es innecesario. Si el procesador esta co-
rrectamente diseñado y el programa a ejecutar se inicializa adecuadamente y
está bien programado, un registro, llamado Contador de Programa (PC), per-
CAPÍTULO 2: REPRESENTACIÓN DE LA INFORMACIÓN 17
2.2.2. Enteros
1. Posicionales, ponderados o pesados.
✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿
Son los utilizados por la gran mayorı́a de computadores. Un número
se representa como un vector o secuencia de dı́gitos, donde cada uno
tiene un peso de acuerdo con la posición que ocupa. Si la base de repre-
sentación es b, el rango de cada dı́gito va de 0 a b − 1. Como hemos dicho
anteriormente, en los sistemas de computadores se emplea la base b = 2.
O sea, si el número x se codifica mediante el siguiente vector de
dı́gitos:
xn , xn−1 , ..., x1 , x0 , x−1 , ..., x−m
su valor es
n
'
|x| = xi bi (2.1)
−m
b) Complemento a 1: (C1)
Es un caso particular del complemento a la base menos 1, en
el que la base es 2. Representaremos un número de n bits en
complemento a uno siguiendo la siguiente fórmula:
&
x Si x ≥ 0,
C1(x) = n (2.2)
(2 − 1) − |x| Si x ≤ 0.
operación que resulta equivalente a complementar los bits de x
cuando x es negativo.
como ventajas, cumple el requisito (a), puesto que la cantidad
de números positivos es igual a la de números negativos. Es
decir, el rango va desde el −(2n−1 − 1) al 2n−1 − 1. Además,
cumple el requisito (b), porque es fácil detectar el signo y cum-
ple el requisito (d), porque facilita las operaciones (restar no
es más que complementar el sustraendo y sumar, es decir, el
algoritmo y el HW para sumar y restar es común)
como inconveniente, da lugar a una representación dual del 0
(tanto el 00000 como el 11111), por lo que no cumple el requisito
(c).
c) Complemento a 2: (C2)
Es un caso particular del complemento a la base, en el que la
base es 2. Representaremos un número de n bits en comple-
mento a dos siguiendo la siguiente fórmula:
&
x Si x ≥ 0,
C2(x) = (2.3)
2n − |x| Si x < 0.
operación que resulta equivalente a complementar los bits de x
y sumar 1 (C2(x) = C1(x) + 1) si x < 0.
como ventajas, cumple el requisito (a), puesto que la cantidad
de números positivos es prácticamente igual a la de números
negativos. Es decir, el rango va desde el −2 n−1 al 2n−1 − 1.
Además, cumple el requisito (b), porque es fácil detectar el sig-
no y cumple el requisito (c), porque no tiene representación
dual del 0, ası́ que es fácil detectarlo. Cumple ası́ mismo el re-
quisito (d) como veremos en el tema de algoritmos aritméticos.
como pequeño inconveniente respecto al C1, se puede argumen-
tar que complementar a 2 es más costoso que complementar a
1 ya que hay que realizar una suma adicional. Sin embargo, el
20 FUNDAMENTOS DE LOS COMPUTADORES
2.2.3. Reales
1. Punto Fijo
✿✿✿✿✿✿✿✿✿✿✿
Una posibilidad, a la hora de intentar representar números con deci-
males, puede consistir en colocar un punto en algún lugar de la cadena
de unos y ceros que va a representar nuestro número real. Una vez colo-
cado el punto en una determinada posición ya no se puede modificar, ya
que esa decisión se toma normalmente durante el diseño de la máquina.
A la derecha del punto las potencias de la base son negativas.
Como ventaja, en este sistema de representación los requerimientos
HW son relativamente simples.
Como inconveniente principal, tanto el rango de valores como la
precisión quedan limitados, y el programador o analista numérico
que quiera resolver un problema, tendrá que escalar los números de
entrada y los resultados intermedios para no salirse del intervalo o
rango de valores representables.
Los números enteros se pueden ver como un caso particular de la no-
tación en punto fijo, es decir, como números en punto fijo, pero colocando
el punto detrás del bit menos significativo.
2. ✿✿✿✿✿✿
Punto✿✿✿✿✿✿✿✿✿✿
Flotante
Como hemos dicho, en la aritmética de punto fijo podemos perder
precisión y dı́gitos significativos con facilidad. Para solucionarlo se pro-
pone la notación cientı́fica o de punto flotante. Consiste en representar
el número mediante una mantisa, una base y un exponente. Puesto que
la base es conocida y constante, basta con almacenar la mantisa y el
exponente.
22 FUNDAMENTOS DE LOS COMPUTADORES
Donde:
(S) El bit de signo se interpreta como:
◃ S=0⇒N ≥0
◃ S=1⇒N ≤0
(M) Es la mantisa normalizada. Inicialmente se aplicó el convenio
de normalización de tipo. 0.1xxxx. En una mejora posterior se ar-
gumenta: en lugar de forzar un 1 a la derecha del punto decimal, lo
que hacemos es colocarlo a la izquierda del punto decimal (es decir,
en la forma 1.xxxx). Esta será la representación normalizada. Por
otro lado, como sabemos que el número está normalizado y que hay
un 1 en esa posición, éste no lo representamos. Es decir, como sa-
bemos que el número debe estar normalizado para representarlo, y
que si está normalizado seguro que hay un 1 a la izquierda del punto
¿para qué habrı́amos de desperdiciar un bit de la mantisa almace-
nando un 1 que siempre va a estar ahı́? Por tanto el 1 a la izquierda
del punto no se almacena explı́citamente en la representación, sino
que queda implı́cito en el convenio.
(C) La caracterı́stica representa el exponente en exceso 127. Es
decir, el exponente, E, se calcula como:
24 FUNDAMENTOS DE LOS COMPUTADORES
E = C − 127 ⇒ C = E + 127
Existen dos motivos para representar el exponente mediante una
notación en exceso, en lugar de utilizar una notación en C2 o alguna
otra que permita representar exponentes negativos:
• En primer lugar, mediante la representación del exponente en
exceso, la comparación de dos exponentes para decidir cual es
mayor de los dos se puede realizar mediante un sencillo com-
parador de enteros positivos. La comparación de exponentes es
una operación muy frecuente en aritmética flotante y el HW
que la implemente debe ser simple y rápido.
• En segundo lugar, también encontramos una cuestión semán-
tica para utilizar notación en exceso: a medida que el número va
haciéndose más pequeño, la caracterı́stica también va haciéndo-
se más pequeña. Como el 0 es el más pequeño, es el número
que ha de tener la caracterı́stica mı́nima. Utilizando una nota-
ción en exceso, la magnitud de la caracterı́stica decrece cuando
decrece la magnitud del número representado, como vemos en
la figura 2.1. Si utilizásemos una notación en C2 (por ejemplo)
para la caracterı́stica, la magnitud de la caracterı́stica decrece
cuando decrece la magnitud del número representado si éste es
mayor que uno, pero crece cuando el número es menor que uno.
Casos particulares
Para representar C tenemos 8 bits, es decir, podemos representar en
principio 256 (0-255) caracterı́sticas distintas. O, traducido a exponente,
desde -127 a 128. Sin embargo, reservamos C=0 y C=255 para casos
especiales:
⎧ ⎧ &
⎪ ⎨ S = 0 ⇒ +∞
⎪
⎪ M = 0
⎪
⎪
⎪ C = 255 S = 1 ⇒ −∞
⎨ ⎩
M ̸= 0 ⇒ NaN (Not a Number )
⎪
⎪ &
⎪
⎪
⎪ M =0⇒N =0
⎩ C=0
⎪
M ̸= 0 ⇒ N = (−1)S · 0.M · 2−126
Los valores NaN (la traducción literal serı́a “no un número”) apare-
√
cen cuando el resultado de una operación no es un número real ( −1,
00 , ln(−1), etc...). Por otro lado, el caso en que C = 0 y M ̸= 0 se utiliza
para representar números no normalizados o desnormalizados. Este caso
particular aparece para representar números con exponente menor que
-126. Luego aquellos números con C = 0 y M ̸= 0 son números con
exponente E=-126 y cuya mantisa no está normalizada, es decir, sin 1
oculto, o lo que es lo mismo, la mantisa es exactamente la almacenada.
Los números no normalizados se emplean para representar números muy
cercanos a 0.
A-2) Formato IE 3 754 doble precisión (64 bits)
El formato IE 3 754 de doble precisión utiliza una palabra de 64 bits
organizada en los siguientes campos:
1 bit para el signo (S)
11 bits para la caracterı́stica, (C), en exceso 1023
52 bits para la mantisa (M)
Luego el número representado sera:
N = (−1)S × (1.M ) × 2C−1023
B) FORMATO IBM/360
Es el formato implementado en el IBM/360. Se basa en una palabra
de 32 bits organizada en los siguientes campos:
1 bit para el signo (S)
7 bits para la caracterı́stica (C)
24 bits para la mantisa (M)
26 FUNDAMENTOS DE LOS COMPUTADORES
Lo/Hi 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 NUL DLE DS SP & - { } \ 0
1 SOH DC1 SOS a j ∼ A J 1
2 STX DC2 FS SYN b k s B K S 2
3 ETX DC3 c l t C L T 3
4 PF RES BYP PN d m u D M U 4
5 HT NL LF RS e n v E N V 5
EOB
6 LC BS ET B
UC f o w F O W 6
P RE
7 DEL IL ESC
EOT g p x G P X 7
8 CAN h q y H Q Y 8
9 RLF EM \ i r z I R Z 9
A SMM CC SM ç ! | :
B VT . $ ’ #
C FF IFS DC4 < * % @
D CR IGS ENQ NAK ( ) ’
E SO IRS ACK + ; > =
F SI IUS BEL SUB | ¬ ? ”
Ventajas:
1. Los programas son más cortos lo que supone un menor gasto de
memoria
2. Las instrucciones son más potentes y los tiempos de ejecución me-
nores.
Inconvenientes:
1. Las instrucciones resultantes son más anchas, lo que supone gasto
de memoria.
2. Es necesaria una lógica adicional de decodificación.
Normalmente los procesadores potentes, y en particular los que siguen una
arquitectura RISC, utilizan un formato de instrucciones de tres direcciones.
En general, no suele ser interesante tener un número mayor de direcciones. En
procesadores más simples se toma como compromiso utilizar un formato de
dos direcciones.
Por otro lado, el número de direcciones puede variar de unas instrucciones
a otras, en función de cuantos operandos necesite. Por ejemplo, a la instrucción
NEG, que calcula el complemento a dos de un operando, no tiene sentido darle
un formato de tres direcciones.
SINOPSIS
En este tema hemos analizado los convenios a los que han llegado los arqui-
tectos de computadores para representar la información mediante 1’s y 0’s.
Información que va desde datos numéricos, números negativos, números reales
por medio de un exponente y una mantisa, caracteres, hasta instrucciones,
operandos, etc. Ası́ mismo hemos abordado el problema del acceso a los datos,
mediante el estudio de los modos de direccionamiento. Y todo sólo mediante
1’s y 0’s.
RELACIÓN DE PROBLEMAS 35
RELACIÓN DE PROBLEMAS
c) 0.1
d) 0.5
e) -23.15625
11. ¿Qué inconveniente encontramos en la representación de números reales
en punto fijo?
Dados estos dos números en el formato IEEE 754: C0E80000 y 00080000;
decir que valores representan en decimal.
12. ¿Cuáles son los requisitos deseables de un sistema de numeración de
enteros con signo? ¿Qué sistema cumple mejor esos requisitos? Expresar
el número 9.75 en su representación IEEE 754 de 32 bits (convierte a
hexadecimal la palabra IEEE de 32 bits).
13. En una PDP-11 los números en punto flotante de precisión sencilla tienen
un bit de signo, un exponente en exceso a 128 y una mantisa de 24 bits.
Se exponencia a la base 2. El punto decimal está en el extremo izquierdo
de la fracción. Debido a que los números normalizados siempre tienen
el bit de la izquierda a 1, éste no se guarda; solo se guardan los 23 bits
restantes. Expresa el número 7/64 en este formato.
14. Expresa el número 7/64 en el formato IBM/360, y en el formato IEEE-
754.
15. Expresa el número en punto flotante de 32 bits 3FE00000 (16 como nú-
mero decimal si está representado en los siguientes formatos de 32 bits:
a) IEEE-754
b) IBM/360
c) PDP-11
16. Los siguiente números en punto flotante constan de un bit de signo,
un exponente en exceso a 64 y una mantisa de 16 bits. Normalı́zalos
suponiendo que la exponenciación es a la base 2 y que el formato NO es
del tipo 1.XXXX... con el “1” implı́cito.
0 1000000 0001010100000001
0 0111111 0000001111111111
0 1000011 1000000000000000
17. ¿Cuál son los números positivos más pequeño y más grande representa-
bles para los siguientes convenios?:
a) IEEE-754
b) IBM/360
c) PDP-11
RELACIÓN DE PROBLEMAS 37
OBJETIVOS
Unidad de
MEMORIA
Control
Datos Control
Datos
Unidad de
Memoria Direcciones
Instrucciones Procesamiento
E/S
3.2.1. Registros
Los registros son dispositivos digitales que nos permiten almacenar informa-
ción y acceder a ella en tiempos bastante menores que el que necesitarı́amos
para acceder a memoria. Podemos clasificar los registros que podemos encon-
trar en un µP en función de la información que almacenan:
1. Registros de propósito general (RPG): En estos registros alma-
cenamos la información que utilizamos más frecuentemente (ya que el
acceso a memoria es más lento). Podemos distinguir dos subtipos de
RPG’s:
Registros de datos: Almacenan datos y tienen normalmente un
número de bits igual al de la palabra del µP.
Registros de direcciones: Normalmente almacenan direcciones, por
lo que deben tener un tamaño igual al del bus de direcciones.
2. Contador de Programa (PC o IP): Contiene la dirección de memo-
ria de la cual se leerá la siguiente instrucción a ejecutar. Normalmente
el contenido del PC se incrementa al ejecutar cada instrucción para que
“apunte” a la siguiente instrucción a ejecutar. Si modificamos el conteni-
do del PC cargándolo con la dirección x, estamos realizando un “salto”
a la instrucción almacenada en la posición x de memoria.
3. Registro de Instrucciones (RI): Almacena el código de operación
de la instrucción que estamos ejecutando en un momento dado. Es un
46 FUNDAMENTOS DE LOS COMPUTADORES
figura, las señales c6, c7 y c8 codifican la operación que debe realizar la ALU).
Además, la ALU debe actualizar el registro de Estados (SR) después de cada
operación.
BUS 8
c1
0 MUX 1 c11
8 8 8
c9
SR c6
COS Z ALU c7
8 bits c8
c3 c2
8 c4
c10
AC X
8
8
c5
RI C.O. MD Op 1 Op 2
DECOD
SECUENCIADOR CK
.....
c1 c2 c3 c4 c5 cn
3.4.2. Registros
El 8086 presenta un conjunto de 14 registros de 16 bits que se pueden agrupar
de la siguiente forma:
Registros generales : Su función es el almacenamiento temporal de datos.
AX (acumulador). Es utilizado en las instrucciones aritméticas.
BX (base). Se usa generalmente para indicar un desplazamiento.
CX (contador). Se utiliza en bucles.
DX (datos). Se utiliza también en operaciones aritméticas.
Estos registros ofrecen la posibilidad de usarse además como registros
de 8 bits, refiriéndose al byte más significativo con AH, BH, CH y DH o
al menos significativo con AL, BL, CL y DL respectivamente.
54 FUNDAMENTOS DE LOS COMPUTADORES
Esquema de almacenamiento
Este procesador sigue la regla “el byte menos significativo ocupa la posición
más baja” (Little Endian). Ası́, si escribimos un dato en una posición de me-
moria, dependiendo si es byte, word, doble word,... se ubica en memoria según
se esquematiza en la figura 3.4. La dirección de un dato es la de su byte me-
56 FUNDAMENTOS DE LOS COMPUTADORES
MOV BYTE PTR LAB, 12H MOV WORD PTR LAB, 1234H MOV DWORD PTR LAB, 12345678H
EA(LAB)=N
Modos de direccionamiento
3.4.6. La pila
La pila de un programa ensamblador se define con la directiva SEGMENT STACK.
Si N + 1 es la longitud en bytes reservada para la pila, la zona de pila es la
comprendida entre la direcciones: SS:0000H y SS:N. De esta manera, SP se
inicializa al valor N + 1. El convenio es que SP apunte a la última palabra
(posición más baja) que se ha introducido en la pila. Las operaciones de pila
son siempre a nivel de palabra (2 bytes). Se muestra a continuación el efecto
de las instrucciones más importantes que trabajan con la pila:
Instrucciones
En el programa ensamblador, las instrucciones del 8086 aparecen con el
formato general:
Etiqueta: Nombre Instrucción Operando(s) ;Comentario
De estos campos, sólo el nombre de la instrucción es obligatorio. En la
sintaxis del ensamblador cada instrucción ocupa una lı́nea. Los campos se
separan entre sı́ por al menos un carácter espacio (ASCII 32) y no existe
distinción entre mayúsculas y minúsculas.
El campo etiqueta, si aparece, debe estar formado por una cadena alfa-
numérica seguida de un identificativo que expresa su atributo. La cadena no
debe comenzar con un dı́gito y no se puede utilizar como cadena alguna pala-
bra reservada del ensamblador ni nombre de registro del microprocesador.
El campo nombre instrucción es un mnemónico de la instrucción del pro-
cesador. Está formado por caracteres alfabéticos (entre 2 y 6).
E1 campo operando indica dónde se encuentran los datos. Puede haber 0,
1 ó 2 operandos en una instrucción. Si hay 2, al primero se le denomina destino
y al segundo fuente y deben ir separados por una coma. Los operandos pueden
60 FUNDAMENTOS DE LOS COMPUTADORES
Conjunto de instrucciones
Instrucciones de transferencia de datos. Mueven información entre regis-
tros y posiciones de memoria o puertos de E/S. Pertenecen a este grupo
las siguientes instrucciones: MOV, LEA, IN, OUT, POP, PUSH, XCHG:
1. MOV AX, [VAR1]: (AX ← contenido de la variable VAR1)
2. LEA AX, VAR1: (AX ← dirección de la variable VAR1)
3. IN y OUT: Lectura y escritura en los puertos de E/S
4. PUSH y POP: Escritura y lectura en pila
5. XCHG AX, BX: (AX ↔ BX)
Instrucciones aritméticas. Realizan operaciones aritméticas sobre núme-
ros binarios o BCD. Son instrucciones de este grupo ADD, SUB, CMP,
INC, DEC, NEG, MUL, DIV:
1. ADD AX, BX: (AX ← AX+BX)
2. SUB AX, BX: (AX ← AX-BX)
3. CMP AX, BX: (AX-BX y actualiza los flags)
4. INC AX: (AX ← AX+1)
5. DEC AX: (AX ← AX-1)
6. NEG AX: (AX ← C2[AX])
7. MUL BL: (AX ← AL × BL)
8. DIV BL: (AX ← AX/BL; AH=resto, AL=cociente)
Instrucciones lógicas. Realizan operaciones de desplazamiento, rotación
y lógicas sobre registros o posiciones de memoria. Están en este grupo las
instrucciones: AND, OR, XOR, NOT, SHL, SHR, SAL, SAR, ROL, ROR:
1. AND AX, BX: (AX ← AX∧ BX)
2. OR AX, BX: (AX ← AX∨ BX)
3. XOR AX, BX: (AX ← AX⊕ BX)
4. NOT AX: (AX ← C1[AX])
5. SHL AX,n / SHR AX,n: Desplazamiento lógico a la izquierda/de-
recha de n bits
6. SAL AX,n / SAR AX,n: Desplazamiento aritmético a la izquier-
da/derecha de n bits. El desplazamiento aritmético a la derecha
provoca extensión de signo
CAPÍTULO 3: PROCESADOR CENTRAL 61
DATOS SEGMENT
;definiciones de variables
D1 DW 1
D2 DB ?
DATOS ENDS
PILA SEGMENT STACK
;reserva de espacio para pila
DB 1024 DUP(0)
PILA ENDS
CODIGO SEGMENT
ASSUME CS:CODIGO, DS:DATOS, SS:PILA
;instrucciones del código
...
CODIGO ENDS
END INICIO
SINOPSIS
RELACIÓN DE PROBLEMAS
CODIGO1 ENDS
CODIGO2 SEGMENT
ASSUME CS:CODIGO2, DS:DATOS, SS:PILA
FILL_IN PROC FAR
PUSH BP
MOV BP,SP
LEA SI,[BP+8]
LEA DI,[BP+6]
MOV AX,SS:[SI]
MOV DH,AL
MOV AX,SS:[DI]
MOV DL,AL
MOV AH,06H
INT 10H
POP BP
RET
FILL_IN ENDP
FILL_INI PROC FAR
MOV BYTE PTR H,33H
RET
FILL_INI ENDP
CODIGO2 ENDS
END INICIO
a) Muestre la evolución de la pila del programa indicando qué valores
(o qué registros) van ocupando las posiciónes de ésta. (Al comenzar
la ejecución del programa AX, BX, CX, DX, BP se suponen cero y
SP vale la longitud de la pila)
b) Explique los modos de direccionamiento que aparecen en el progra-
ma.
c) Si las rutinas FILL IN, FILL INI hubieran estado en el mismo seg-
mento que el programa principal, se podrı́an haber invocado como
etiquetas cercanas (CALL (NEAR PTR) ...). ¿De qué manera afecta
ésto a la ejecución del programa?
13. Las siguientes cuestiones están referidas al procesador Intel 8086:
a) Los dos fragmentos siguientes de programa ensamblador realizan
una operación sobre los registros AX, BX, CX, cuyo resultado nu-
mérico es el mismo. ¿Cuál se espera que se ejecute en menos tiem-
po? ¿Por qué razones? ¿Qué instrucciones podrı́an ser eliminadas
directamente sin modificar la semántica del código?
RELACIÓN DE PROBLEMAS 69
5
Recuerda que el 8086 realiza las operaciones aritméticas en complemento a dos y debes
usar el convenio del fabricante para rotaciones y desplazamientos si procede.
4
Sección de Control
OBJETIVOS
6
En otras palabras, la siguiente microoperación será determinada en función de la mi-
crooperación actual y en algunos casos del estado de ciertos flags.
74 FUNDAMENTOS DE LOS COMPUTADORES
RI C.O. MD Op 1 Op 2
SEÑALES
DE
CONTROL
cn
DECOD
.....
LOGICA
DE c5
LOGICA DE GENERACION LOGICA DE IDENTIFICACION
CK DEL SIGUIENTE ESTADO DEL ESTADO DE CONTROL
DECOD. c4
(opcional) c3
DE CONROL ACTUAL
c2
c1
CONDICIONES FLAGS
RI C.O. MD Op 1 Op 2
SEÑALES
DE
CONTROL
Proyector del cn
Codigo de Operación
.....
LOGICA
microinst. DE c5
Secuenciador de Microprograma direcc. Memoria de Microprograma
CK
DECOD. c4
(Genera la siguiente dirección) (Almacena microinstrucciones) c3
c2
c1
Información sobre la dirección siguiente
CONDICIONES FLAGS
Esta memoria almacena la información del estado de control actual, que es-
tará identificado por la dirección seleccionada en dicha memoria. El contenido
de esta posición será la microinstrucción a ejecutar y suministra la informa-
CAPÍTULO 4: SECCIÓN DE CONTROL 75
ción necesaria para generar las señales de control y para que el secuenciador
de microprograma determine la dirección de la siguiente microinstrucción a
ejecutar.
El concepto de microprogramación fue propuesto en 1951 por Maurice
Wilkes. Aunque conceptualmente la unidad de control microprogramada era
mucho más flexible y estructurada que la cableada, la microprogramación no
se empezó a usar comercialmente hasta 1964, con la serie System/360 de IBM.
La razón es que los tiempos de acceso en las memorias ROM disponibles hasta
entonces eran tan altos que la pérdida de prestaciones en los sistemas micro-
programados era inaceptable para usos prácticos.
A partir de finales de los 60 y principios de los 70, el desarrollo de memorias
de semiconductor rápidas y baratas permitió la expansión de la microprogra-
mación a los minicomputadores, generalizándose su uso. Adicionalmente, el
uso de memorias RAM para contener microprogramas posibilitó el diseño de
sistemas microprogramables dinámicamente, en los que el programa de con-
trol puede ser cambiado durante el funcionamiento simplemente cambiando
los contenidos de la memoria microprograma.
En la actualidad, el uso del control microprogramado es generalizado en
los microprocesadores de juego de instrucción complejo (CISC). Sin embargo,
en el diseño de procesadores de juego de instrucción reducido (RISC), en los
que el control es relativamente simple, se prefiere el uso de unidades de control
cableadas, con el fin de optimizar al máximo las prestaciones del hardware y
reducir en lo posible el tiempo medio de ejecución de una instrucción (es decir,
bajar el CPI – ciclos de reloj por instrucción–).
Puede resultar confuso y quizás poco didáctico intentar definir desde el
primer momento los conceptos relativos a la microprogramación. Por ello, in-
tentaremos hacer una primera aproximación a estos conceptos mediante un
ejemplo para posteriormente adentrarnos más en detalle en temas avanzados.
De acuerdo con esta filosofı́a, comenzaremos describiendo el flujo de datos
de un hipotético procesador simple. A continuación, ilustraremos la técnica
de control microprogramada mediante el desarrollo paso a paso de la sec-
ción de control microprogramada que controle a la sección de procesamiento
inicial. Finalmente, se introducirá un conjunto de conceptos más complejos,
relacionados con la temporización, optimización del diseño, y generación de
microsubrutinas asociadas a instrucciones máquina.
76 FUNDAMENTOS DE LOS COMPUTADORES
RAM
C3 W (CS)
C4
8 8
8
1 0
MUX C6
C7
DR C5
BUS
Z L R C0
C
ALU C1 1 0
C2 C14 C12
MUX C8
1 0
C16 C9
MUX C10
IR PC MAR
C11 C13
(inc)
C Significado C Significado
c0 Selección ADD en ALU c1 Selección AND en
ALU
c2 Selección COMP de la entrada L c3 Read(R) / Write(W )
de la ALU (C1)
c4 Habilitación memoria c5 MEM ← DR
c6 0:(DR ← MEM), 1:(DR ← AC) c7 Escritura en DR
c8 0:(MAR ← DR), 1:(MAR ← PC) c9 Escritura en MAR
c10 0:(AC ← DR), 1:(AC ← ALU) c11 Escritura en AC
c12 PC ← DR c13 INC PC
c14 IR ← DR c15 Desplaza a la derecha
AC
c16 Carga registro de estado (C,Z)
nectado a una única lı́nea de control, tal como se muestra en la figura 4.4.
MicroRI
c0 c2 c3 c16
Memoria
INC Contador de
Microprograma
CK
STORE
MicroRI
c0 c2 c3 c16
Memoria
INC
Contador de
Microprograma
17
STORE
MicroRI
c0 c2 c3 c16
CK
ciclo máquina.
La colección de microinstrucciones almacenadas en la memoria se deno-
mina microprograma. La memoria que contiene el microprograma se
denomina memoria de microprograma, mientras el contador que la
direcciona actúa como un secuenciador de microprograma muy primitivo
que también llamaremos contador de microprograma o MicroPC.
a que ese punto de control, c9, se activa por flanco de subida, de forma que
fuerza la carga del registro MAR cuando pasa de 0 a 1. Por tanto, la primera
microinstrucción si tendrá el efecto esperado 7 , pero la segunda no, ya que que
en principio no existe ninguna transición baja-alta.
Es evidente, pues, que es necesario secuenciar la generación de diferentes
conjuntos de señales de control dentro del ciclo máquina. Una solución simple
que adoptaremos para el ejemplo que estamos desarrollando, en el que dis-
ponemos de una única señal de reloj, es emplear el flanco de bajada de ésta
para temporizar las señales activas por flanco, de manera que si un bit del
MicroRI asociado a un punto de control por flanco esté activo, se produzca
una transición baja-alta con el flanco de bajada del reloj. Los cronogramas
mostrados en 4.7 muestran la situación que deseamos implementar.
CK
bit i Ci (nivel)
bit j Cj (flanco)
n n+1 MicroPC
Escribiendo ciertas ecuaciones lógicas para los puntos de control del sis-
tema se puede diseñar un circuito que permita crear la secuencia descrita
anteriormente. Ello se consigue fácilmente realizando una operación AND de
los bits que corresponden a señales por flanco en MicroRI con CK tal como se
esquematiza en la figura 4.8.
CK
Memoria
INC Contador de
Microprograma
STORE
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
C0 C1 C2 C3 C4 C5 C6 C8 C10
00
0 M
C 01
U
10
LOAD
MicroPC Memoria
Z X INC
de
1 11 1
Microprograma
c17 c18 CK
c0 c1 c16 2 6
c19...c24
también puede ser cargado con un nuevo valor que llega desde el campo Direc-
ción del MicroRI. El incremento o la carga del MicroPC estará determinado
por las entradas de control INC o LOAD respectivamente, siendo estas entra-
das activas a nivel alto. El incremento del MicroPC está asociado a la ejecución
secuencial, mientras que la carga implicará un salto a nivel de microprogra-
ma. Los dos bits del campo Condición de Salto, CS, seleccionan una de las
entradas del MUX1 de forma que:
CS=00 La entrada 00, alimentada con un 0 lógico, provocará el incremento
del MicroPC. Es decir, ejecución secuencial.
CS=11 La entrada 11, alimentada con un 1 lógico, provocará la carga del
MicroPC. Es decir, salto incondicional.
CS=01 La entrada 01, alimentada con el valor del flag C determinará la
carga o el incremento del MicroPC según C=1 o C=0, respectivamente.
Es decir: salto condicional al flag C.
CS=10 La entrada 10, alimentada con el valor del flag Z determinará la
carga o el incremento del MicroPC según Z=1 o Z=0, respectivamente.
Es decir: salto condicional al flag Z.
Este simple mecanismo de salto permite incrementar notablemente las po-
CAPÍTULO 4: SECCIÓN DE CONTROL 85
IR
ROM de
Proyeccion
1 0
c17 MUX2
Memoria
c16
00 de
0 M
01 Microprograma
C U LOAD
Z 10 X INC MicroPC
11 1
FLAGS 1
1 17 20 25
c18 c19 MicroRI Puntos de control P CS Direcc. salto.
2
c0 c1 c2 c16 c17 2 6
c20...c25
instrucción máquina.
Supondremos que en esta máquina hipotética, las instrucciones tiene un
tamaño fijo de 8 bits, interpretándose de la siguiente manera: los 3 bits más
significativos corresponden con el código de operación y los 5 menos significa-
tivos no se usan. Es decir:
<---------- 8 bits ---------->
C.OP. No usado
<- 3 -> <---- 5 ---->
Siguiendo las indicaciones marcadas en el apartado anterior, vamos a elabo-
rar el microprograma que se almacenará en la micromemoria y que implementa
el conjunto de instrucciones mostrado en la tabla 4.2.
Operación N Microprograma
c0 1 5 9 13 17 18 20 25
------------ búsqueda y dec. -------------------------------------
MAR <- PC 0 0 0000 0001 1000 0000 0 00 000 000
DR <- Mem(MAR) 1 0 0011 0010 0000 0000 0 00 000 000
IR <- DR 2 0 0000 0000 0000 0100 0 00 000 000
PC <- PC+1 3 0 0000 0000 0000 1000 1 11 000 000
----------------- load X -----------------------------------------
MAR <- PC 4 0 0000 0001 1000 0000 0 00 000 000
DR <- Mem(MAR), PC++ 5 0 0011 0010 0000 1000 0 00 000 000
MAR <- DR 6 0 0000 0000 1000 0000 0 00 000 000
DR <- Mem(MAR) 7 0 0011 0010 0000 0000 0 00 000 000
AC <- DR; goto 0 8 0 0000 0000 0010 0000 0 11 000 000
---------------- store X -----------------------------------------
MAR <- PC 9 0 0000 0001 1000 0000 0 00 000 000
DR <- Mem(MAR), PC++ 10 0 0011 0010 0000 1000 0 00 000 000
MAR <- DR 11 0 0000 0000 1000 0000 0 00 000 000
DR <- AC 12 0 0000 0110 0000 0000 0 00 000 000
Mem(MAR) <- DR; goto 0 13 0 0001 1000 0000 0000 0 11 000 000
------------------ add X -----------------------------------------
MAR <- PC 14 0 0000 0001 1000 0000 0 00 000 000
DR <- Mem(MAR), PC++ 15 0 0011 0010 0000 1000 0 00 000 000
MAR <- DR 16 0 0000 0000 1000 0000 0 00 000 000
DR <- Mem(MAR) 17 0 0011 0010 0000 0000 0 00 000 000
AC <- AC+DR; goto 0 18 1 0000 0000 0110 0001 0 11 000 000
------------------ and X -----------------------------------------
MAR <- PC 19 0 0000 0001 1000 0000 0 00 000 000
DR <- Mem(MAR), PC++ 20 0 0011 0010 0000 1000 0 00 000 000
MAR <- DR 21 0 0000 0000 1000 0000 0 00 000 000
DR <- Mem(MAR) 22 0 0011 0010 0000 0000 0 00 000 000
AC <- AC & DR; goto 0 23 0 1000 0000 0110 0001 0 11 000 000
-------------------- jmp -----------------------------------------
DR <- AC 24 0 0000 0110 0000 0000 0 00 000 000
PC <- DR; goto 0 25 0 0000 0000 0001 0000 0 11 000 000
--------------------- jz -----------------------------------------
Si Z=1 goto 28 26 0 0000 0000 0000 0000 0 10 011 100
goto 0 27 0 0000 0000 0000 0000 0 11 000 000
DR <- AC 28 0 0000 0110 0000 0000 0 00 000 000
PC <- DR; goto 0 29 0 0000 0000 0001 0000 0 11 000 000
-------------------- not -----------------------------------------
AC <- NOT(AC) ; goto 0 30 0 0100 0000 0110 0001 0 11 000 000
------------------- shr -----------------------------------------
SH_RIGHT(AC); goto 0 31 0 0000 0000 0000 0010 0 11 000 000
C Significado C Significado
c1 I → BUS L del Sumador c2 A → BUS L del Sumador
c3 B → BUS L del Sumador c4 0 → BUS L del Sumador
c5 B → BUS R del Sumador c6 D → BUS R del Sumador
c7 0 → BUS R del Sumador c8 Sumador → Desplazador
c9 BUS X → I c10 BUS X → A
c11 BUS X → B c12 D-Mpx → D
c13 D → BUS MEM c14 0 → pasa BUS X; 1 → pasa
BUS MEM
c15 Carry de entrada al Sumador c16 1 → Desplazamiento; 0 → No
desplaza
c17 1 → Derecha; 0 → Izquierda c18 Habilitación de Memoria
c19 1 → Lectura; 0 → Escritura
MEMORIA
R/W
RAM
c19
BUS X c18
0 1 B
D-Mpx c14 U
c9 c10 c11 S
c12
I A B D M
E
c1 c2 c3 M
BUS L c5 c6 c13
c4
BUS R
00...000 c7
00...000
L R
Z Sumador C
c15
c8
T1
T2
T3
T4
ns
T1 T2 T3 T4
T1 T2 T3 T4
Memoria ENABLE
T1
T4 INC Contador de T2
Microprograma
STORE
T2 MicroRI
T4 1 8 12 16
ENABLE
T3 T4 T4 T2
c1 c8 c12 c16
Microinstrucción
al MicroRI
Salida del MicroRI
Controles 1-7,13,18
Control 8
Incrementa Cont.
Control 16
Controles 9-12
Controles 14,15,17,19
c1 = b1 AN D b2 AN D T3
b1 b2 MicroRI
T3
c1
Código Destino
000 no operación
001 I
010 A
011 B
100 D (hace c14 = 0)
101-111 no usados
La inclusión de un código que no vuelca el contenido del bus X en ningún
registro permite eliminar la necesidad de generar la señal de control para el
conmutador c8, asociado al registro de desplazamiento. En efecto, cuando una
microinstrucción usa el sumador esta señal debe ser 1; sin embargo, cuando
la microinstrucción no usa el sumador, puede también dejarse esta señal a 1
y elegir el código 000 como destino del bus X. En consecuencia, se elimina el
bit de control del conmutador c8, que estará controlado directamente por la
señal de reloj T4.
Existe también redundancia entre los bits 12 a 14 (control de la entrada y
salida del registro D) y los bits 18 y 19 (acceso a memoria y lectura/escritura,
respectivamente). En efecto, en una operación de lectura de memoria (c18 y
c19 a 1), debe habilitarse el conmutador c12, deshabilitarse el conmutador
c13 y ponerse a 1 la lı́nea c14 de selección en el multiplexor D-Mpx. Por el
contrario, en una operación de escritura a memoria (bit 18 a 1, bit 19 a 0) el
conmutador c12 debe permanecer deshabilitado, mientras el c13 deberá habi-
litarse. Teniendo en cuenta que el control del registro D en operaciones que
no involucren a la memoria es efectuado por la microorden destino del bus
X, resulta evidente que los bits 12 a 14 son superfluos, pues el estado de las
señales de control c12 a c14 puede decodificarse de los bits 18 y 19 y de la
microorden del bus X.
Como resumen de las simplificaciones sugeridas, en la tabla 4.5 se mues-
tra la nueva definición de las microordenes, en la que se han reducido las
necesidades de almacenamiento de control en un 37 %; adicionalmente, se ha
reducido de forma significativa las posibilidades de codificar microinstruccio-
nes erróneas o sin significado. El precio a pagar por ello es un aumento de la
lógica de control necesaria y una pérdida de velocidad y posibilidad de funcio-
namiento concurrente. A esta filosofı́a de representación de microinstrucciones
la hemos llamamos vertical o con codificación.
L R
c20 2 c22
c21 ALU
c5
C
Z
FLAGS
B c25 c26
0 1
D-Mpx c14 U
c9 c10 c11 S
c12 PC RI Sección de Control
I A B D M
E ROM de
c1 c2 c3 M Proyeccion
c13 c24
BUS L c5 1 0
c4
BUS R c27 MUX2
00...000 c7 c23 Memoria
c22
00...000 0 00 de
M
L R 01 Microprograma
c20 2 C U LOAD
c21 ALU Z
10 X INC MicroPC
c15 11 1
c8 FLAGS 1
1 18 21 30
L/R c17 c29 c30 MicroRI CS Direcc. / Cte.
Desplazador
SE c16
2
DECOD. 2
c1 c2 c3 c28
Dirección Contenido
^^^^^^^^^ ^^^^^^^^^
00000 00000 00 000 0 00 000 011 00 0 0 00 0000000000
00000 00001 00 011 1 00 101 000 00 0 1 11 0000000000
.
.
00000 01100 00 011 1 00 101 100 00 0 0 00 0000000000
00000 01101 10 010 0 00 010 000 00 0 0 00 0000000000
00000 01110 00 000 0 00 000 001 00 0 0 00 0000000000
00000 01111 11 010 0 00 011 000 11 1 0 11 0000000000
.
La ROM de proyección debe contener la traducción entre códigos de ope-
ración y dirección de microrutina asociada a la instrucción.
Como vemos en este ejemplo, el código de operación de cada instrucción
contiene en este caso información, no sólo de la operación a realizar y del modo
de direccionamiento, sino también de los operandos. Esto implica que, según
nuestro ejemplo, la instrucción AND 10(A), I debe tener una microrrutina
distinta a la descrita anteriormente, con el consiguiente consumo de Memoria
de Microprograma. En diseños más elaborados, el C.O. no ocupará todo el RI,
dejando espacio para especificar los registros que se vayan a acceder, los cuales
serán seleccionados directamente desde el propio RI.
Mnemónico Descripción
LOAD A Transfiere el contenido de la posición A al acumulador: (A) → ACC
STORE A Transfiere el contenido del acumulador a la posición A: ACC → (A)
ADD A Suma al acumulador el contenido de la posición A: ACC + (A) →
ACC
JMPZ A Salta a la dirección A si el resultado fue cero: si Z : A → P C
Vamos a aplicar los métodos antes citados para la construcción de este pro-
cesador simplificado. En la figura 4.18 se representa el diagrama de flujo del
funcionamiento del procesador. BEGIN representa una señal de inicio. Como se
puede observar la tarea del procesador se divide en dos fases básicas: búsque-
da de instrucción y ejecución. Durante la búsqueda se accede a la posición de
memoria apuntada por el PC y se transfiere ese contenido al registro de ins-
trucción IR. El PC es incrementado apuntando ahora a la siguiente dirección
de memoria. El contenido de IR se decodifica (identificación de a qué instruc-
ción pertenece el código de operación) y según la operación a realizar se ejecuta
una u otra cosa. En la fase de ejecución se busca el operando, se ejecuta la
operación de ALU y/o se almacena datos en memoria según proceda.
BEGIN
8 bits
N C.OP.
MAR <- PC
N+1 Operando
INC PC
IR<-DR
DECOD OP
NO
Z?
DR<-(MAR) DR<-ACC DR<-(MAR)
YES
Figura 4.18: Diagrama de flujo a nivel RTL para el procesador de la fig. 4.3
C1,j
tj C2,j
........ Ck,1
set Ci,j Ci,j Ck,2 ........... Ck
DE .......
C1,j+1 Ck,n
tj+1 C2.j+1
set Ci,j+1 .........
Ck,j+1
....... .......
x x
no
x=1?
yes
Existen señales como C8,4 , C8,10 , C8,16 , C8,22 que no se pueden activar
nunca a la vez ya que pertenecen a “ramas” excluyentes en el flujo de
ejecución. Es por esta razón por lo que se ha usado una numeración para
el segundo subı́ndice diferente, aunque las 4 señales, cuando se activan, lo
harı́an en el intervalo ficticio t4 . (Es decir dentro del ciclo de ejecución de
una instrucción t4 , t10 , t16 , t22 representan el mismo intervalo temporal
real).
Una vez que se posee el circuito que en cada instante genera los C ji ade-
cuadamente, hay que generar las señales de control C j . Como el significado de
Cji es la activación de la señal Cj en el instante ti , los Cj los determinamos
con el OR de todos los Cji que se activan para algún ti . Las ecuaciones que
resultan son las siguientes:
'
Cj = Cji
i
ejemplo la señal C7 que controla la carga del registro DR debe ser combinada
con la señal de reloj cuando es conectada en el punto de control c7: c7 ≡
C7 · CK; o para el acceso a memoria c3 ≡ C3 + CK ya que cuando se escribe
el dato se almacena en el flanco de subida de c3.
IR
* DE
C9,1 C8,1
DEC
DE
DE STORE JMPZ
C13,3 C14,3
DE
DE DE DE DE
DE DE DE DE
C3,5 C4,5 C7,5 C3,11 C4,11 C7,11 C3,17 C4,17 C7,17 C3,23 C4,23 C23
DE DE DE DE
DE DE DE
DE
C3,8 C4,8 C7,8 C6,14 C7,14 C3,20 C4,20 C7,20
C12, 25
DE DE DE
C2 = 0
C3 = S2 + LOAD · S5 + ST ORE · S5 + ADD · S5 + JM P Z ·
S5 + LOAD · S8 + ADD · S8
C4 = S2 + LOAD · S5 + ST ORE · S5 + ADD · S5 + JM P Z ·
S5 + LOAD · S8 + ADD · S8
C5 = ST ORE · S9
C6 = ST ORE · S8
C7 = S2 + LOAD · S5 + ST ORE · S5 + ADD · S5 + JM P Z ·
S5 + LOAD · S8 + ST ORE · S8 + ADD · S8
C8 = LOAD · S5 + ST ORE · S5 + ADD · S5 + JM P Z · S5 + S1
C9 = S1 + LOAD · S7 + ST ORE · S7 + ADD · S7 + S4
C10 = ADD · S9
C11 = LOAD · S9 + ADD · S9
C12 = JM P Z · S7
C13 = S3 + S6
C14 = S3
C15 = 0
C16 = ADD · S9
RESET = JM P Z · S8 · Z + JM P Z · S7 · Z
Sobre estas ecuaciones podemos comentar:
Su obtención es inmediata a partir del significado de las señales. Ası́ por
ejemplo C3 nos indica que se activa siempre en la segunda etapa, y en
la etapa 5 cuando la instrucción es un LOAD, STORE, ADD o JMPZ,
y en la etapa 8 cuando se trata de un LOAD o un ADD.
Aunque se han expresado de forma que se entienda como se obtienen, las
expresiones son susceptible de simplificación, más aún teniendo en cuenta
que expresiones mutuamente exclusivas siempre ocurren, por ejemplo
LOAD + ST ORE + ADD + JM P Z = 1.
Hay señales que nunca se activan en este conjunto de instrucciones
(C1 , C2 , C15 ).
No todas las instrucciones consumen la 9 etapas. La instrucción JMPZ
consume menos. Por eso hay que introducir la señal RESET (no olvidar
que es sı́ncrona con el reloj). Esta señal se activa sólo para JMPZ, cuya
ejecución finaliza en la etapa 8 si Z está activo (salto) o en la etapa 7 si
Z está inactivo (no salto).
Como se indicó para el método anterior, las señales de control deben ser
combinadas con el reloj en aquellos casos en el que el conmutador de control
funcione por flanco.
CAPÍTULO 4: SECCIÓN DE CONTROL 111
BEGIN
J Q count
modulo - K
counter
END reset
K Q
c0 cN
....................
CK
1/K - decoder
RESET
S1 S2 ........................................SK
CK
CN..C0 0 1 2 BEGIN
modulo - K
END
sequence counter CK
S1 RESET
S2 ......................
S1 S2 SK
S3
S1 S2 ................ S9
LOAD
STORE
ADD
C1
JMPZ combinational
C2
circuit
N
................
C16
SINOPSIS
RELACIÓN DE PROBLEMAS
SEÑAL Significado
c1, c2, c3 Habilitación de entrada a registros A, B y TMP.
c4 Habilitación de entrada a registro RI.
c5, c6, c7, c8 Habilitación de salida de A, B, TMP y “0” a la ALU.
c9 Control del Multiplexor-1.
c10 Vuelca al BUS el dato de salida de la ALU.
c11, c12 Selecciona la operación al realizar en la ALU:
00=Suma. 01=Resta. 10=Producto. 11=División.
c13 Incrementa el PC.
c14 Carga en PC el dato que haya en el BUS.
c15 Vuelca al BUS el dato almacenado en PC.
c16 Debe estar a 1 cada vez que se utilice la memoria (Chip
Select).
c17 1 = Lectura de memoria a DR. 0 = Escritura en memoria
de DR.
c18 Carga en MAR el dato que haya en el BUS.
c19 Carga en DR el dato que haya en el BUS.
c20 Vuelca al BUS el dato almacenado en DR.
A B TMP "0"
RI
c5 c6 c7 c8
RELACIÓN DE PROBLEMAS
c16 c17
ROM de
c18 Proyeccion
CS RD/WR
1 0
MEMORIA M
A MUX1 c9
RAM R
c11 2 L R
c12 ALU 00
0 M
DR 01
c10 N U LOAD
10 MicroPC Memoria
c19 c20 Z X INC
BUS de
FLAGS 1 11 2
Microprograma
c14 c15
c13 PC 2
c1 c2 c3 c20 2
INBUS 8
c1 RI
Y ROM de
c4 Proyeccion
Contador
c7
1 0
MUX1 c9
8 8 8 0 M
FIN U LOAD Memoria
X(0) X INC MicroPC
SUMADOR de
1 2
8 bits Microprograma
c2 c3
2
8 c8
c4
AC X MicroRI CS Dir. de Salto
8 8
8
c5 c6
c1 c2 c3 c4c5 c6 c7 c8c9 2
OUTBUS
Señal Significado
c1, c2 Selección de registro para lectura al bus X y para escritura.
c3, c4 Selección de registro para su volcado al bus Y .
c5 Permiso de salida al bus X del registro seleccionado por
c1, c2.
c6 Permiso de escritura del resultado de la ALU en el registro
seleccionado por c1, c2.
c7 Carga del registro Acumulador (AC).
c8 Carga del registro de Instrucciones (RI).
c9, c10 Escritura y lectura, respectivamente, del registro DR.
c11, c12 Selecciona la operación al realizar en la ALU:
00=Suma. 01=Resta. 10=Producto. 11=División.
c13 Carry de entrada a la ALU.
c14 Vuelca el resultado de la ALU al Bus de Datos.
c15 Actualiza los flags del registro de estado.
c16 Debe estar a 1 cada vez que se utilice la memoria (Chip
Select).
c17 1 = Lectura de memoria a DR. 0 = Escritura en memoria
de DR.
c18 Permite volcar el campo “Dir. de Salto” de la microins-
trucción al Bus de Datos.
c19 Controla el Multiplexor-1.
BUS DATOS
c10 c9 c8
c7
c18
DR c5 c14 RI
AC
MEMORIA Y X ROM de
Proyeccion
RAM 2
c1,c2 A
00 1 0
CS RD/WR 2
c3,c4 01 B MUX1 c19
2 L R
c16 c17 c11,c12 c15
10 C c13 ALU 00
0 M
11 PC 01
N U LOAD
10 Memoria
Banco de Registros Z X INC MicroPC
de
FLAGS 1 11 2
Microprograma
c6
2
c1 c2 c3 c19 2
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
c3 c4 Registro de c6 c7 c8 Registro
dirección de datos
0 0 PC 0 0 X Rx
0 1 SI 1 0 X Ry
1 0 B X 1 0 R0
1 1 TMP X 1 1 R1
(a) (b)
Tabla 4.15: (a) Selección del registro de dirección; (b) Selección del registro de
datos
Formato de la instrucción
Instrucción Tarea
C.O. NU Ry Rx
MOV Ry,Rx 0011 XXXX Ry Rx Ry → Rx
SUB Ry,Rx 0000 XXXX Ry Rx Rx-Ry → Rx
BCC Ry 0101 XXXX Ry XXXX Si C=0, Ry → PC
MOVE (SI+Ry),Rx 0001 XXXX Ry Rx MEM[SI+Ry] → Rx
c12
DATOS c17
c15 16
16 16 16 16
BUS_CPU[15:0]
16 c6 16 16
c16 2
4 c1 c2 c18
Rx M 4 2
0000 R0
4 U MicroRI CS Dir. de Salto
0001 R1
Ry X c7
0010 R2 2
c8
. .
IR NU c9 0 00
.. .. Memoria
01 M
. . C INC
de
C.O. U LOAD
MicroPC
Z 10 Microprograma
1111 R15 X
1 11 2
4
W c2
R c3 N
UNIDAD .
B BANCO Z .
8 .
A de de
R FORMATO DE
REGISTROS LAS INSTRUCCIONES
c1 CONTROL
(B) EN LA MEMORIA
PRINCIPAL
8 8 c19
8
BDR PC IR COP
c15 R3 ( opcional )
c11 c6 c7
L R c18 MAR
8
8 8 W c16 8 bits
N c8 R c17
ALU
Z MEMORIA
c10 c9 PRINCIPAL
TMP (M)
SEÑAL Significado
c1, c2, c3 Selección de registro para lectura/escritura al BUS.
c4 Carga del dato del BUS al registro seleccionado por c1,c2, c3.
c5 Volcado del registro seleccionado por c1,c2,c3 al BUS.
c6 Carga del registro TMP1 con el dato del BUS.
c7 Carga del registro TMP2 con el dato del BUS.
c8 Reset del registro TMP2.
c9, c10 Selecciona la operación a realizar en la ALU:
00=L+R, 01=L-R, 10=L+R+1, 11=L+R+C.
c11 Carga del registro de estado.
c12 Vuelca la salida de la ALU al BUS.
c13 Carga los 16 bits menos significativos de MAR con el dato del BUS.
c14 Carga los 16 bits mas significativos de MAR con el dato del BUS.
c15 Carga del registro DR con el dato del BUS.
c16 Vuelca el registro DR en el BUS.
c17 1 = Habilita acceso a RAM; 0 = Deshabilita acceso a RAM.
c18 1 = Lectura de RAM; 0 = Escritura en RAM.
c19 Carga los 16 bits menos significativos de PC con el dato del BUS.
c20 Carga los 16 bits más significativos de PC con el dato del BUS.
c21 Vuelca los 16 bits menos significativos de PC al BUS.
c22 Vuelca los 16 bits más significativos de PC al BUS.
c23 Incrementar PC
c24 Carga del registro IR con el dato del BUS.
PC[31:16] PC[15:0]
PC c23
c20 c19
c22 c21
16 16 16 16 BUS[15:0] 16
16 16 c24
c16 c15 16 16
16 16 c6 c7
IR
DR c14 c13 c5 c4 c12 16 OpCode
16 TMP1 TMP2 c8
MAR
MAR[31:16] MAR[15:0]
32 000 D0 Unidad de Control
MEMORIA
001 D1 c11
2 L R
RAM c9,c10
010 D2 ALU Microprogramada
Cin C
4Gx16 bits
011 D3
100 D4
16
101 D5
c1
CS R/W 110 IXL c1 c2 c3
c2
111 IXH
c17 c18 c3
Banco de Registros
10. Diseñar la unidad de control cableada siguiendo los dos métodos ex-
plicados para el procesador planteado en la sección 4.4 extendiendo el
conjunto de instrucciones con las que aparecen en la tabla 4.24.
Mnemónico Descripción
COMP Complemento del acumulador not(ACC) →
ACC
JMP A Salto incondicional a la posición A: A → P C
SHIFTR Desplazamiento de un bit a la derecha del acu-
mulador: RightShif t(ACC, 1) → ACC
AND A Y lógico del acumulador y el contenido de la po-
sición A: ACC ∧ (A) → ACC
STOREI #N Guarda un valor inmediato en el acumulador:
N → ACC
C1
1 2 3 4 5
START CARRY
12. La figura 4.31 representa un procesador con control cableado cuyos pun-
tos de control se detallan en la tabla 4.25. Podemos destacar del proce-
sador:
RELACIÓN DE PROBLEMAS 137
..........
8 8
C.OP. word i
Operando word i+1
..........
’2’
16
+ c6 c7
c11
OP2 a
0 1
c14 MUX1 FZ
ALU
c15 c1 c2 c3 c5 16
PC OP1 b c8
R W OE
16
16 RAM
0 busD(15:0) c4
MUX2
c13 16 16
Dirección Datos
c12
1 c9
c10
MAR 32Kx2bytes IR
c16 ACC
16
Inst-DEC
DUP JMP
JIZ JEQ
OBJETIVOS
Orientaremos esta sección desde dos puntos de vista. El primero será el punto
de vista software, en el que veremos qué algoritmos son necesarios aplicar pa-
ra realizar estas operaciones, en función del convenio de representación de los
operandos (binario natural, Signo/Magnitud, Complemento a 1 o Complemen-
to a 2). Será después cuando veamos las posibles implementaciones hardware
y una comparación entre ellas, atendiendo a las caracterı́sticas, casi siempre
en compromiso, de coste y velocidad.
cn+1 cn ... c3 c2 c1 =C
an . . . a3 a2 a1 = A (5.1)
+ bn . . . b3 b2 b1 = B
sn+1 sn . . . s3 s2 s1 =S
Es decir, el carry ci se genera en la etapa i-1 y se suma en la etapa i.
Suponemos el carry inicial de entrada, c1 , inicializado desde una de las entradas
de control del sumador, de forma que se pueda poner a 0 ó a 1. Como podemos
144 FUNDAMENTOS DE LOS COMPUTADORES
si = (ai ⊕ bi ) ⊕ ci
(5.2)
ci+1 = ai · bi + (ai ⊕ bi ) · ci
Entradas Salidas
ai bi ci si ci+1
0 0 0 0 0
1 0 0 1 0
0 1 0 1 0
1 1 0 0 1
0 0 1 1 0
1 0 1 0 1
0 1 1 0 1
1 1 1 1 1
Signo/Magnitud
Bajo este convenio de representación de enteros negativos, los bits a n y bn de
la expresión 5.1 representan el bit de signo de los sumandos y s n el bit de signo
de la suma. El algoritmo para realizar la suma es:
Si an = bn → Sumandos del mismo signo.
❶ Se suman las magnitudes de n-1 dı́gitos (bits) mediante la ecuación
5.2.
❷ Poner sn = an .
❸ Si cn = 1 ⇒ Overflow.
CAPÍTULO 5: SECCIÓN DE PROCESAMIENTO 145
Complemento a 1
Si los sumandos están representados en un sistema de numeración en C1 de n
bits, el algoritmo de suma es el siguiente:
❶ Sumar los operandos mediante la ecuación 5.2, sin distinguir el bit de
signo del resto de los n bits.
❷ Si cn+1 = 1 se suma 1 al resultado. Es decir, después de operar, se añade
el acarreo de salida.
❸ Si los valores sumados son de igual signo9 hay overflow si el signo del
resultado es distinto del de los operandos. Otra forma de determinar si
hay overflow es mediante la ecuación cn+1 ⊕ cn , que tomará el valor uno
en caso de que éste se produzca.
En este caso, el algoritmo para restar A− B consiste en sumar A+ C1(B).
Este algoritmo tiene la ventaja, frente al de suma/resta en S/M, de no
necesitar un HW especı́fico de resta (no hay que implementar la ecuación 5.3).
Pero aún podrı́a ser más sencillo si nos pudiésemos evitar la suma del acarreo,
necesaria en el algoritmo comentado.
9
Si los sumandos son de distinto signo no puede haber overflow.
146 FUNDAMENTOS DE LOS COMPUTADORES
Complemento a 2
Si los sumandos están representados en un sistema de numeración en C2 de n
bits, el algoritmo de suma es el siguiente:
❶ Sumar los valores mediante la ecuación 5.2, sin distinguir el bit de signo
del resto de los n bits .
❷ Se desprecia el acarreo de salida (cn+1 ).
❸ Si los operandos son de igual signo, hay overflow si el signo del resultado
es distinto del de los sumandos. Al igual que en el algoritmo para C1,
hay overflow si cn+1 ⊕ cn = 1.
De forma análoga a cuando trabajamos con la representación en C1, para
restar A − B bastará con sumar A + C2(B)
Este algoritmo resulta el más rápido de todos, ya que es sencillo y el acarreo
se desprecia.
Por supuesto, también existen algoritmos de suma/resta para otros siste-
mas de representación de los números, como BCD natural, BCD exceso a 3,
etc, pero se apartan del ámbito de este curso.
Sumador serie
El sumador elemental (1 bit) que implementa la ecuación 5.2 se puede
realizar en dos etapas. La primera consiste en la construcción de un módulo
llamado half-adder o semi-sumador, como el de la figura 5.1, que implementa
la ecuación:
A HA
S
B A S
S =A⊕B
B C
C =A·B C
FA
A an . . . . . . . . . . . . a2 a1 xi si sn . . . . . . . . . . . . s2 s1 S
B bn . . . . . . . . . . . . b2 b1 yi ci+1 FF
ci
CK
Sumadores paralelos
1. Ripple adders (Sumador con acarreo propagado o enlazado)
Supongamos que queremos sumar dos palabras de n bits. En lugar
de pasar todos los bits secuencialmente a través de un simple sumador
elemental, podemos presentar los n bits de los dos operandos en paralelo
a través de n sumadores elementales. Estos n sumadores elementales
están conectados de tal forma que el acarreo de salida del sumador i,
148 FUNDAMENTOS DE LOS COMPUTADORES
s1 s2 s3 s n s n+1
ci+1 = ai · bi + (ai ⊕ bi ) · ci
x = 10 001010
y = 5 000101 s 000011
z = 12 + 001100 + 2c 011000
------ ------
s = 000011 011011 => 27
c = 001100
x4 x3 x2 x1 y4 y3 y2 y1 z4 z3 z2 z1
x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4
CSA FA FA FA FA
s 1 c1 s 2 c2 s 3 c3 s 4 c4
s4 s3 s2 s1 c4 c3 c2 c1
S C
a b c d e f g h i
4
CSA 4 CSA 5
2c4
s4 s5
CSA 3
CSA 6 c4 c3 c2 c1
2c5
s6 2c6 0
c4
CSA 7 z4 z3 z2 z1
s7 2c7 CSA 5
SAP
5.3.1. Introducción
Antes de formalizar los algoritmos aritméticos que vamos a implementar, re-
cordaremos como efectuamos la multiplicación con lápiz y papel. Indicaremos
qué recursos hardware serı́an necesarios para su realización como circuito y
expondremos algunas transformaciones simples que reducen la complejidad de
estos procesos.
Consideremos que deseamos obtener el producto Z = Y × X, donde el
multiplicando Y y el multiplicador X admiten la siguiente representación Base
B con n dı́gitos.
X → xn−1 xn−2 . . . x1 x0
Y → yn−1 yn−2 . . . y1 y0
El procedimiento que usamos para multiplicar Y × X en un papel, se
152 FUNDAMENTOS DE LOS COMPUTADORES
Ejemplo: 345×123
Y (n) X (n)
345
x 123 *
-----
SHIFT IZQ
00000 -> P(0)
+ 1035 2n
------
1035 -> P(1) SUMADOR
+ 6900 2n
------
2n
7935 -> P(2)
+ 34500 Z (2n)
------
42435 -> Z
P(0)=0;
for (i=0; i<n; i++)
{
P (i + 1) = xi × Y × B i + P (i);
}
Z = P(n);
Y.
Sin embargo, el coste HW asociado a este algoritmo puede reducirse signifi-
cativamente. Si se observa el algoritmo, el núcleo del ciclo for está constituido
por la siguiente expresión suma,
P (i + 1) = xi × Y × B i + P (i)
donde se aprecian dos sumados, el valor acumulado hasta ese paso, P (i), y la
aportación del producto parcial, P Pi = xi · Y · B i .
Puesto que el producto parcial P Pi está escalado en B i , la suma no afec-
tará a las componentes i-1, i-2,..., 1, 0 del valor acumulado en P (i). Además,
dados los valores posibles de los dı́gitos y números de n dı́gitos en Base B, se
verificará que xi · Y < B n+1 y, por lo tanto, será un número Base B de n+1
dı́gitos como máximo. Es decir, si el recorrido del ı́ndice se realiza de forma
creciente, las componentes B 2n−1 , B 2n−2 , ..., B n+i+1 del valor acumulado P (i)
serán nulas. Por todo ello, en cada paso de la iteración, sólo n+1 dı́gitos del
valor acumulado P (i) serán susceptibles de cambio. En resumen, bastará con
un sumador Base B de n+1 dı́gitos.
En la figura 5.9 mostramos la realización de la multiplicación anterior
siguiendo el nuevo algoritmo mejorado de un sumador de n+1 dı́gitos.
Y AC X Y (n)
0103 512
+ 0690 SUMADOR
n+1
→ 0793 512
n+1
0079 351
+ 0345 AC (n+1) X (n)
→ 0424 351
Z= 0042 435
Y (n)
CONTROLADOR
SUMADOR
Cout n bits
n
Z (2n)
F AC X (n)
Como vemos, la realimentación del carry de salida, C out , a través del biesta-
156 FUNDAMENTOS DE LOS COMPUTADORES
ble, está pintado con lı́nea discontinua. Esa realimentación puede ser suprimida
en el caso de que los números a multiplicar sean positivos y estén representados
en signo/magnitud, C1 ó C2, ya que en ese caso serán de la forma 0XXXX...XX,
y en las sumas implicadas en el algoritmo nunca se producirá carry de salida.
Para terminar, mostramos como queda el algoritmo de multiplicación que
debe implementar el Controlador de la figura 5.10:
AC=0;
for (i=0; i<n; i++)
{
if (x(0)==1) SUMA Y;
DESPLAZA;
}
<- k ->
j i
...011......1110....
El valor con que contribuye dicha cadena de 1’s al número representado será:
CAPÍTULO 5: SECCIÓN DE PROCESAMIENTO 157
Por lo tanto, la contribución de las k sumas puede sustituirse por una suma
y una resta. De esta forma, podemos reescribir el algoritmo de multiplicación
binaria, ya que si Y es el multiplicando y el multiplicador, X, contiene en su
representación una cadena de unos de longitud k a partir del bit i-ésimo, la
ecuación parcial resultante de desarrollar X × Y queda:
xi xi−1 Operación
0 0 desplazar (cadena de 0’s)
0 1 sumar Y y desplazar (fin cadena de 1’s)
1 0 restar Y y desplazar (comienzo cadena de 1’s)
1 1 desplazar (cadena de 1’s)
Tabla 5.2: Operación a realizar en el algoritmo bit-scanning según los bits del
multiplicador, X
coincidirá con el carry, por lo que habrá que utilizar un sumador de n+1
dı́gitos. El algoritmo quedarı́a:
AC=0; X(-1)=0
for (i=0; i<n; i++)
{
if (x(i)==0 AND x(i-1)==1) SUMA Y;
if (x(i)==1 AND x(i-1)==0) RESTA Y; /*+C2(Y)*/
DESPLAZA;
}
/* Corrección */
if (UltimaOperacion==RESTA) SUMA Y;
donde la última lı́nea del código tiene en cuenta el caso en que el multipli-
cador (en binario natural) tenga su bit más significativo a uno, con lo cual la
última operación serı́a una resta y el resultado serı́a incorrecto. Eso se corrige
sumando Y después de la última iteración si la última operación fue una resta.
Por último, presentamos un ejemplo de ejecución de dicho algoritmo y el
HW necesario para su implementación en la figura 5.11
En general, el número de sumas/restas efectuadas en este algoritmo será me-
nor que el de sumas en el clásico basado en suma y desplazamiento. Sin em-
bargo, la eficiencia depende de los datos y, en el peor caso (secuencia de unos
y ceros alternados, ...010101...), requiere más operaciones y, por lo tanto, más
tiempo de cómputo que el tradicional de suma y desplazamiento.
→ 11110 1011
SUMADOR Cin
→ 11111 0101 n+1 bits
CONTROLADOR
11111 1010
n+1
+(Y) 00011 Z (2n+1)
según bloques de c-bits. Habrá que disponer de 2c-1 múltiplos del multipli-
cando. El número de iteraciones se reducirá a nc . En cada paso se analizarán
c-bits y se acumulará el múltiplo correspondiente. Los desplazamientos serán
de c-bits. En la tabla adjunta mostramos los múltiplos para el caso c=2.
xi+1 xi Operación
0 0 desplazar dos bits
0 1 sumar Y y desplazar dos bits
1 0 sumar 2Y y desplazar dos bits
1 1 sumar 3Y y desplazar dos bits
de forma que:
. /
Y × X = Y × (01)24 + (11)22 + (10)20 = Y · 24 + 3Y · 22 + 2Y · 20
X AC Y
0010 0 0 0 1 1 1 1
+C2(X) 1 1 1 0 Resta
1 1 1 1
+X 0 0 1 0 Restaura
← 0 0 0 1 1 1 1 ←0
0 0 1 1 1 1 0
+C2(X) 1 1 1 0 Resta
← 0 0 0 1 1 1 0 ←1
0 0 1 1 1 0 1
+C2(X) 1 1 1 0 Resta
← 0 0 0 1 1 0 1 ←1
0 0 1 1 0 1 1
+C2(X) 1 1 1 0 Resta
← 0 0 0 1 0 1 1 ←1
0 0 1 0 1 1 1
R= 001 Q=0111
AC=0;
for (i=0; i<n; i++)
{
RESTA X;
if (AC(n-1)==1)
{
RESTAURA (SUMA X);
DESPLAZA con 0;
}
else DESPLAZA con 1;
}
X (n)
n n
Control
SUM/RES
n bits
1
n-1
AC (n-1) Y (n)
n-1 1
5.5.2. Multiplicación
Dados X = M1 · B E1 e Y = M2 · B E2 , su producto P viene dado por:
P = M1 · M2 · B E1 +E2
El algoritmo para X e Y normalizados es:
❶ Sumar los dos exponentes, realizando los ajustes necesarios para obtener
la notación en exceso correcta.
❷ Multiplicar las mantisas.
❸ Normalizar la mantisa resultante.
Debemos tener en cuenta que si las mantisas ocupan n bits, el producto
resultante será de 2n bits, por tanto, debemos descartar los n bits menos
significativos.
164 FUNDAMENTOS DE LOS COMPUTADORES
5.5.3. División
Dados X = M1 · B E1 e Y = M2 · B E2 , su cociente Q viene dado por:
Q = M1 /M2 · B E1 −E2
El algoritmo para X e Y normalizados es:
❶ Restar los dos exponentes, realizando los ajustes necesarios para obtener
la notación en exceso correcta.
❷ Dividir las mantisas, guardando sólo el cociente.
❸ Normalizar la mantisa resultante.
Si E1 y E2 están representados en exceso, el exponente resultante vendrá da-
do por su diferencia sumándole el exceso. Hay que preguntar si el divisor es
cero, para evitar que se produzca una división por cero. Se puede realizar la
resta de los exponentes en paralelo con la división de las mantisas.
Si en lugar de utilizar un algoritmo de división (con o sin restauración)
se quiere usar un multiplicador en punto flotante, se puede seguir el llamado
método de la división convergente.
SINOPSIS
Ya se dijo con anterioridad que las instrucciones más frecuentes en los progra-
mas son las que deben ser implementadas con más “esmero” para que consu-
man pocos ciclos de reloj. Pues bien, las instrucciones aritméticas pertenecen
a ese tipo de instrucciones que aparecen frecuentemente. Por tanto, no nos
debe sorprender que se investigue intensamente en ese campo con la intención
de encontrar cada vez mejores técnicas para implementarlas. En este tema
sólo hemos introducido algunos principios, pero nos dan una idea de cómo
está construido, más o menos, una unidad aritmético lógica o un coprocesador
aritmético para números en punto flotante.
RELACIÓN DE PROBLEMAS 165
RELACIÓN DE PROBLEMAS
1. Realizar las siguientes sumas con números de 6 bits: 12+9, 27-15, 14-19,
-7-13, 23+10, -20-13; representando los números mediante los siguientes
convenios:
a) Signo y Magnitud
b) Complemento a 1
c) Complemento a 2
2. Haz, con números de 8 bits trabajando en
a) Complemento a 1
b) Complemento a 2
las operaciones siguientes:
00101101 + 01101111
11111111 + 11111111
00000000 − 11111111
11110111 − 11110111
3. Encuentra la razón por la que, en el algoritmo de suma/resta en C1, hay
que sumar el carry de salida al resultado.
4. Los números decimales con signo de n − 1 dı́gitos se pueden representar
mediante n dı́gitos sin signo utilizando la representación en complemento
a 9. El complemento a 9 es el complemento a la base menos 1 cuando
la base es 10 (igual que el C1 es el complemento a la base menos uno
cuando la base es 2). El C9 de un número decimal N se obtiene mediante
la siguiente expresión:
C9(N ) = 10n − 1 − N
donde n es el número de dı́gitos con que trabajo. Una técnica para hacer
el C9 de un número consiste en restar cada dı́gito de 9. Ası́, el negativo
de 014725 es 985274. Se pide:
a) Expresa como números de tres dı́gitos en complemento a 9 los si-
guientes números: 6, -2, 99, -12, -1, 0.
b) Determinar la regla por la cual se suman los números en comple-
mento a 9.
c) Realizar las siguientes sumas con dicha técnica:
1) 0001 + 9999
2) 0001 + 9998
3) 9997 + 9996
4) 9241 + 0802
166 FUNDAMENTOS DE LOS COMPUTADORES
OBJETIVOS
Jerarquı́a de Memoria
La aplicación de las técnicas de memoria caché, virtual, entrelazada... se lleva
a cabo implementando una jerarquı́a de memoria de la siguiente forma:
Costosas
Registros CPU
Rápidas
Caché
Memoria Principal
Entrelazada
Más Capacidad
Económicas Memoria Secundaria
Lentas
trabajar con todos los módulos a la vez. De este modo podemos multiplicar
el ancho de banda (en el mejor de los casos) por el número de módulos que
estemos utilizando.
Vamos a suponer que tenemos una memoria de N = 2 n palabras y que
ésta se encuentra repartida en M = 2m módulos. Hay dos posibles esquemas,
cada uno con sus ventajas e inconvenientes:
a) Orden Superior: Palabras consecutivas van a parar al mismo módulo.
m bits n-m bits
... CE CE CE CE
...
(
1 si Q ≥ M
α= 0 M
1
Q si 1 ≤ Q < M
que almacena, por lo que este método introduce cierta complejidad lógica
al ser un método de acceso artificial.
b) Emplear uno (o varios) campo(s) para direccionar la información que
queremos localizar. Por ejemplo, nos podrı́a interesar conocer los datos
correspondientes a la persona cuyo campo T ALLA = 1.83. En este tipo
de memoria usarı́amos el campo T ALLA para direccionar y ésta nos
devolverı́a el registro completo: L ÓPEZ, 82, 1.83, 33.
Esto también se podrı́a conseguir con una memoria normal, pero para ello
habrı́a que recorrer toda la tabla secuencialmente en busca de las posibles
concordancias del campo deseado. Al tener que acceder secuencialmente a
todas las posiciones de memoria, este método serı́a muy lento. La ventaja de
las memorias asociativas es que las búsquedas de todas las entradas se realiza
simultáneamente.
Podemos definir la memoria asociativa como aquella que tiene capacidad
de acceder a una palabra almacenada usando como dirección un subcampo
de dicha palabra. La búsqueda de ésta la realiza en paralelo. Este tipo de
memorias recibe otros nombres: MDC o memoria Direccionable por Contenido
(CAM en inglés); memoria de búsqueda en paralelo o memoria multiacceso.
Se usa en gran variedad de aplicaciones, como:
Gestión de memoria caché.
Gestión de memoria virtual.
Manipulación de información almacenada en bases de datos.
Tratamiento de señales de rádar, imágenes.
Inteligencia artificial, etc.
El hecho de que se utilice solo en aplicaciones muy concretas es debido a
que tienen un elevado coste, pues implica redundancia del hardware. Su coste
es bastante superior a una memoria RAM convencional.
La estructura del hardware que implementa este tipo de memorias aparece
representada en la figura 6.4.
Las Celdas Ci son capaces de almacenar un registro completo (apellido,
peso, talla, etc,...). La gestión de los accesos los realiza la Unidad de Control
(U.C.), que posee dos registros básicos:
Comparando (C), donde se escribe la información a buscar.
Máscara (M), que dice qué campos del registro queremos comparar. Los
bits no enmascarados del registro C será comparados con los bits corres-
pondientes de todas las celdas de la memoria asociativa.
Los registros Indicadores Ii se ponen a 1 si su registro asociado Ci contiene
la información que se estaba buscando. El Dispositivo de Evaluación de Datos
CAPÍTULO 6: MEMORIAS 175
UNIDAD DE
CONTROL
COMPARANDO C
MASCARA M
CELDA 1 I1
CELDA 2 I2 D
CELDA 3 I3 D
....
....
CELDA N IN
CACHE Memoria
CPU
Principal
Operación
El procesador, cuando tiene que acceder a memoria, siempre mira antes si la
información que busca se encuentra en la memoria caché. Pueden darse dos
posibilidades:
✔ La información solicitada se encuentra en la caché, acierto: se lee/escribe
la copia en caché.
✘ La información solicitada NO se encuentra en la caché (fallo): leo de me-
moria principal la información buscada y guardo una copia en la caché.
A la hora de escribir un nuevo dato en la caché pueden ocurrir dos cosas:
❶ Hay espacio libre en la caché: escribo el dato en alguna de las
posiciones libres.
❷ NO hay espacio libre en la caché: debo buscar qué dato de
los que se encuentran en la caché sustituiré por el que acaba de llegar.
La elección de las palabras a sustituir se realiza según algún criterio:
RAND (Aleatoriamente), FIFO (la que lleva más tiempo en la caché)
o LRU (menos usada recientemente). Si algún dato de los que se van a
sacar de la caché se modificó por el programa, se deberá actualizar la
CAPÍTULO 6: MEMORIAS 177
Organización
La memoria caché se divide en dos partes, que se representan en la figura
6.6. Consideramos una memoria principal referenciada a nivel de palabra (las
direcciones son direcciones de palabra). Denominamos lı́nea a la unidad básica
de transferencia entre memoria principal y caché. Cada lı́nea se compone de
varias palabras consecutivas de memoria y es la unidad mı́nima de datos que
intercambian caché y memoria principal.
byte 0
palabra 0 Direcciones V M palabra 0 palabra 1
byte 1
línea 0
byte 2 byte 0 byte 1 byte 2 byte 3
palabra 1 línea 0
byte 3
byte 4 línea 1
palabra 2
byte 5 línea 2
línea 1
byte 6
palabra 3
byte 7
byte 8
......
......
byte 9
......
MEMORIA CACHÉ
MEMORIA PRINCIPAL
Palabras de 2 bytes, líneas de 2 palabras
almacena para esa entrada en la caché. Tiene, además, 2 bits por lı́nea: V (Váli-
do, indica si el espacio reservado para almacenar la lı́nea contiene información
válida) y M (Modificación, indica si la lı́nea ha sido modificada). Normalmen-
te, el directorio es una memoria asociativa, de forma que la búsqueda de una
palabra en la memoria caché se hace en paralelo.
La Zona del Almacenamiento es una memoria convencional, de gran velo-
cidad de acceso, que puede guardar tantas lı́neas de memoria principal como
entradas tiene el directorio.
Veamos a continuación un ejemplo de cómo funciona la memoria caché.
Supongamos que en el instante que vamos a tomar como inicial, en la memo-
ria principal se encuentran los datos que aparecen en la Figura 6.7 para las
posiciones indicadas. En este ejemplo, vamos a suponer también que las lı́neas
está formadas por 4 bytes.
Línea
27 0 1 2 3
28
Dirección V M Almacenamiento 29
Línea 0 27 1 0 0 1 2 3 30 7 2 8 9
31 4 1 2 3
1 30 1 0 7 2 8 9
32
2 33 1 1 1 9 5 7 33 1 3 5 7
34
3 31 1 0 4 1 2 3
35
36 9 8 7 6
Memoria Caché
37
38
Memoria Principal
SINOPSIS
OBJETIVOS
7.1. INTRODUCCIÓN
Terminal Red
Memoria
Controlador Controlador
...
Controlador Controlador
CPU
Disco Duro Impresora
Clock
Clock
7.1.1. Organización
La CPU, memoria y periféricos comparten el bus del sistema, tanto el bus
de datos como el bus de direcciones. A cada unión (interfaz) entre el bus
y el periférico se le llama puerto (de E/S). Es la “puerta” a través de la
cual accedemos a los controladores (y, por tanto, a los periféricos que tienen
asociados). Fı́sicamente, un puerto de entrada/salida no es más que un registro
que puede ser leı́do por la CPU (y escrito también en muchos casos).
Para poder seleccionar qué puerto queremos leer (volcar su contenido al
bus de datos), asignamos a cada uno de los puertos una dirección única. De
esta forma, para leer el contenido de un puerto, primero lo direccionamos
(colocando en el bus de direcciones su dirección particular) y luego leemos su
contenido.
En la figura 7.2 podemos ver un esquema de este sistema, incluyendo los
controladores y puertos. Como se puede observar, podemos tener más puertos
que periféricos. En esta figura no hemos incluido las lı́neas de control, ya que
en función del conexionado de este bus de control tendremos dos posibles
configuraciones que veremos a continuación.
DATOS
CPU DIRECCIONES
Controlador Controlador
Periférico Periférico
lı́neas son para el control de los dispositivos de memoria, mientras que otras
lı́neas se dedican al control de los periféricos.
Por ejemplo, en la figura 7.3 vemos como la lı́nea de selección de lectu-
ra/escritura en memoria es distinta de la lı́nea de lectura/escritura en alguno
de los puertos.
Datos
Direcciones
IOR/W
0
1
R/W Controlador Controlador
2 Memoria CPU Periférico Periférico
Mapa de Memoria
0
Mapa de E/S
0
2 m- 1
2 n- 1
De esta forma, según la señal de control que se active (R/W ó IOR/W), sa-
bremos a quién hacen referencia las direcciones del bus de direcciones. Esta si-
tuación, llevada al nivel del lenguaje ensamblador del procesador, se traduce en
que tendremos diferentes instrucciones para transferencia de datos dependien-
do de que las transferencias sean entre CPU/memoria o entre CPU/periféricos.
Por ejemplo, en los micros de Intel la instrucción MOV se utiliza para transferen-
cias con memoria, mientras que las instrucciones IN y OUT para transferencias
con puertos de E/S.
El mapa de memoria o mapa de direcciones representa el rango de
186 FUNDAMENTOS DE LOS COMPUTADORES
direcciones válidas que puede colocar la CPU en el bus. Dado que existen
direcciones de memoria y direcciones de puertos de E/S, tendremos mapas de
memoria independientes para cada uno de los conjuntos de direcciones.
En la E/S por acumulador, al poder distinguirse un acceso a memoria de
otro a periférico gracias a que las señales de control son independientes, los
mapas de memoria pueden solapar parte de su espacio de direcciones. Por
ejemplo, en las arquitecturas con procesadores Intel, la parte más baja de los
espacios de direcciones pueden corresponder tanto a direcciones de memoria
como de E/S.
Datos
Direcciones
R/W
Controlador Controlador
Memoria CPU Periférico Periférico
Memoria
2n - 1
2n
E/S
2 n+m -1
7.3. INTERRUPCIONES
7.3.2. Operación
Supongamos que queremos leer un fichero del disco duro. A partir del nom-
bre del fichero, el sistema operativo puede determinar en qué pista y sector
comienza. Para empezar a leer bytes (su contenido) es necesario posicionar
previamente el cabezal de lectura del HD en el lugar adecuado. El tiempo
necesario para realizar esta operación (tiempo de acceso) es de varios milise-
gundos. Está claro que mantener la CPU sin hacer nada (o realizando una
espera activa) durante varios milisegundos resulta en una pérdida de eficiencia
del sistema.
Por tanto, resulta más interesante permitir que la CPU ejecute otras ins-
trucciones mientras el controlador del HD se encarga de posicionar el cabezal.
Cuando esta operación termine, el controlador enviará una señal de interrup-
ción a la CPU. Ésta señal, activará algún bit de un registro interno a la CPU.
Por su parte, la CPU chequea este bit antes de ejecutar una nueva instrucción
y, si lo encuentra a uno, realiza la siguiente secuencia de operaciones:
1. Resetea el bit e indica al controlador que estamos atendiendo su inte-
rrupción.
2. Deshabilitar la posibilidad de que se nos pueda interrumpir de nuevo
mientras estamos atendiendo a este periférico (no se vuelve a mirar el
mencionado bit, aunque se ponga a uno).
3. Transferir el control a una posición DirRTI de memoria (donde se en-
cuentra la rutina de tratamiento de la interrupción que estamos atendien-
do), guardando previamente el contador de programa (PC) en PCAc-
tual.
4. Ejecutar la rutina de tratamiento de interrupción:
❶ Salvar el estado del procesador (SR, puntero de pila, registros de
propósito general, etc...)
❷ Leer el fichero.
❸ Restaurar el estado del procesador (recupera SR, puntero de pila,
registros de propósito general, etc...).
5. Volver a habilitar las interrupciones.
6. Seguir la ejecución del programa por donde se quedó antes de ser inte-
190 FUNDAMENTOS DE LOS COMPUTADORES
7.4.1. Organización
En la figura 7.5 encontramos un diagrama de bloques con la configuración de
un sistema que incluye DMA. Como puede observarse, el DMA, y al contrario
que los demás dispositivos, puede leer y escribir tanto en el bus de datos
como en el de direcciones. Este dispositivo va a funcionar como un esclavo de
la CPU (o coprocesador para operaciones de E/S), realizando las tareas de
transferencia de E/S que le indique la CPU. El significado de las señales lo
veremos más adelante, al hablar de su modo de operación.
Datos
Direcciones
Puerto
RE
Controlador
ACK
CPU Memoria DMA Periférico
Control
BR
BG
BGACK
7.4.2. Operación
Supongamos que queremos cargar un fichero en memoria. La CPU progra-
mará el DMA para que este dispositivo se encargue de la lectura del fichero y
CAPÍTULO 7: ENTRADA/SALIDA 191
SINOPSIS
OBJETIVOS
8.1. INTRODUCCIÓN
Aplicaciones
S.O.
Hardware
el procesador.
Interfaz con el usuario, es decir, establecer los mecanismos de comu-
nicación entre el usuario y el hardware.
Compartición de recursos ya que las actividades concurrentes, que
se ejecutan a la vez, pueden compartir recursos hardware e información.
Entre estos recursos se incluye procesador(es), memoria, E/S y comuni-
caciones (p.e. conexión a la red).
Almacenamiento a largo plazo (sistema de ficheros) dada la necesi-
dad de los usuarios de guardar sus datos en el computador para usos
posteriores.
Protección, pues, aunque habrá elementos que compartir, otros serán
privados y deberán ser de acceso restringido.
El sistema operativo ha de responder de forma adecuada, independien-
temente de las situaciones impredecibles que pudieran tener lugar. Es
importante que el S.O. pueda realizar recuperación de errores.
Además de implementar estas funcionalidades, serı́a deseable que el S.O.
fuera eficiente, fiable, fácil de corregir o modificar, y que no ocupe excesivos
recursos (p.e. espacio en disco duro, memoria, etc.).
8.2.1. Proceso
Proceso es cualquier programa que el S.O. haya cargado e iniciado, asignán-
dole los recursos del sistema que necesite (espacio de direcciones de memoria
virtuales y fı́sicas, variables de entorno, archivos, ...), y aspire a ser ejecutado
en la CPU cuando sea posible. Observar que el S.O. se compone de varios
programas que se ejecutan y son, por tanto, procesos.
El sistema operativo necesita almacenar ciertos datos sobre cada proceso,
para poder realizar sobre ellos ciertas operaciones que veremos más adelante.
La estructura de datos que se usa para guardar la información relativa a un
proceso se denomina PCB (Bloque de Control de Proceso) y contiene, entre
otros, los siguientes valores:
Estado actual del proceso
Identificador (PID, un número) que es único para cada proceso
Posición de memoria en donde se encuentra el código del proceso
Identificación del proceso padre (el que lo creó)
Identificación de los procesos hijos (los que él cree)
Información de los recursos que le han sido asignados
Prioridad del proceso, etc...
La forma en que el sistema operativo gestiona los programas en ejecución
dependerá de si éste permite o no tener varios procesos usando el procesador
simultáneamente (procesamiento en tiempo compartido o procesos concurren-
tes):
Un S.O. monotarea y monousuario, como MS-DOS, sólo carga en memo-
ria un único programa, pasándole el control a éste, que se ejecutará de
198 FUNDAMENTOS DE LOS COMPUTADORES
time slice=10ms.
memoria
procesador subproceso a
proceso1
subproceso b
proceso2
proceso 3
RUNNING
block
dispatch
Timer_run_out
READY BLOCKED
wake-up
A B C A C A
5 10 10 10 10 10 5 10 5
A B C B C A B A A
block A wake-up A
8.2.3. Planificación
Hemos visto como el S.O. es el encargado de gestionar los recursos del sistema.
Entre ellos, la memoria es uno de los más importantes que debe administrar.
Imagı́nese que quisiésemos usar un rango de direcciones de memoria mayor del
que fı́sicamente tenemos, sin incrementar el hardware. Las posibles soluciones
propuestas por orden cronológico, en la historia de la computación, son:
Conmutar bancos de memoria entre sı́, controlándolos con un registro, de
forma que en un momento dado las direcciones sólo se refieren al banco
seleccionado. Es una solución lenta y cara.
Overlays (recubrimientos). Son definidos por el programador. En ellos,
la información se va cargando conforme se va necesitando, no de una sola
vez al principio del programa (en MS-DOS son los ficheros con extensión
.OVL).
Memoria Virtual. En este caso se usa la memoria principal como “caché”
de la memoria secundaria (disco duro).
La memoria virtual surge, por tanto, por la necesidad de ejecutar progra-
mas que usan una cantidad de memoria superior a la que se tiene fı́sicamente.
Para ello, habrá que desarrollar mecanismos eficientes para la compartición de
la memoria principal.
Al trabajar con la memoria virtual, nos vamos a encontrar con una termi-
nologı́a básica:
Página: bloques elementales con los que se trabaja en las transferencias
entre memoria principal y secundaria.
Fallo de Página (miss o page fault): se produce cuando el programa hace
referencia a una dirección de memoria que no se encuentra entre las
direcciones actualmente cargadas en memoria principal. En este caso,
habrá que traer de memoria secundaria la página que la contenga. Si
en memoria principal no quedase sitio suficiente para almacenarla, se
deberá elegir (siguiendo alguna polı́tica) la página a la que reemplazará.
CAPÍTULO 8: INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS 205
8.3.1. Ejemplo
Vamos a ver, para terminar, un ejemplo con valores numéricos de un sistema
de memoria virtual. El sistema de nuestro ejemplo va a trabajar con páginas
de 4 Kbytes de tamaño. La memoria fı́sica tendrá un tamaño de 4 Megabytes
y el espacio de direcciones virtual será de 4 Gigabytes. En este caso:
Tamaño de página =212 = 4Kbytes = P
Tamaño de Mem. Real =222 = 4M bytes = M → 210 páginas
Tamaño de Mem. Virtual =232 = 4Gbytes = V → 220 páginas
En la figura 8.5 podemos ver los campos en que se dividen las direcciones,
tanto virtuales como fı́sicas. En ambos casos, los 12 bits menos significativos se
usan para dar el desplazamiento dentro de la página. El espacio de direcciones
virtuales tiene 220 páginas, mientras que el fı́sico sólo consta de 2 10 , por lo
que se deberá establecer un mecanismo para traducir las páginas virtuales en
fı́sicas. Para ello se usa una tabla como la que puede observarse en la figura
8.5.
Esta tabla tendrá 220 entradas, una por cada página de memoria virtual,
y cada entrada nos dirá si la página en cuestión se encuentra cargada en
memoria y, en este caso, en qué posición fı́sica (para indicarlo necesitará 10
bits), o si, por el contrario, está almacenada en memoria secundaria y dónde.
En caso de que se encuentre en memoria principal, un bit de modificación M
206 FUNDAMENTOS DE LOS COMPUTADORES
pv w
1 pr pr w
bit de presencia
....... .......
comienzo tabla
1 pr pr w
.......
.......
22 bits -> dirección real
bit de presencia
directorio de tablas
que será más lenta. Se puede usar una TLB (Translation Lookaside
Buffer) , a modo de memoria caché, que contenga los pares (dirección
virtual, dirección fı́sica) más utilizados, acelerando ası́ el proceso.
b) El propio acceso a la tabla, dado que está paginada, puede producir un
fallo de página, con la penalización que eso lleva consigo.
SINOPSIS
Gran parte del rendimiento ofrecido por un computador recae en el buen di-
seño del sistema operativo que utilice. El sistema operativo, aunque software,
es fundamental en el uso de los elementos hardware que componen la máqui-
na. Sólo hay que fijarse un poco para observar que es un producto clave en
el mercado informático, tanto más cuando de él dependen recursos como la
conectividad en red que cada dı́a cobra más importancia. En este capı́tulo he-
mos esbozado las caracterı́sticas generales de un sistema operativo, incidiendo
en dos aspectos básicos: la gestión de procesos y la memoria virtual.
Apéndice A
Sistemas de representación
especiales
209
210 FUNDAMENTOS DE LOS COMPUTADORES
p 1 = b3 ⊕ b5 ⊕ b7
p 2 = b3 ⊕ b6 ⊕ b7
p 3 = b5 ⊕ b6 ⊕ b7
APÉNDICE A. SISTEMAS DE REPRESENTACIÓN ESPECIALES 211
r1 = b1 ⊕ b3 ⊕ b5 ⊕ b7
r2 = b2 ⊕ b3 ⊕ b6 ⊕ b7
r3 = b 4 ⊕ b 5 ⊕ b 6 ⊕ b 7
La clave del código radica en los siguiente: Tal como hemos construido los
bits redundantes si existe un error en el bit b k se activarán aquellos ri que se
correspondan con los lugares donde k expresado en binario tiene 1’s. Es decir,
la palabra r3 r2 r1 considerada un número binario positivo indica el lugar en
B donde se ha producido el error, con lo cual no solo está detectado sino que
cómo sabemos qué bit es podemos corregirlo.
Sı́mbolo Código
1 0
3 10
2 110
4 1110
5 1111
D
1
0
C
1
0 B
1
0
0
A 1
1 3 2 4 5
A.3. EJERCICIOS
1. Elaborar los codigos Hamming para cada uno de los enteros naturales
en binario menores a 31.
2. Utilice el código Huffman para comprimir el siguiente mensaje en octal:
73567356713572252251052525252525252525255252555522237777615435. Cal-
cule la longitud media resultante y compárela con la que se necesitarı́a
si se usara binario natural.
3. Construya el diagrama de estados para un autómata de estados finitos
que sea capaz de reconocer el código Huffman creado para el ejercicio
anterior.
4. Usando el polinomio C = x15 + x12 + x5 + 1 calcule el campo CRC para
la secuencia binaria obtenida en 2.
5. Un procesador con arquitectura de ’cero direcciones (operandos)’ ejecuta
el programa:
1 push A 6 push B 11 pop R
2 push B 7 push C i
Pi
3 inc 8 push A Pi-1
4 add 9 add .......
5 pop A 10 mult
P0
Resumimos a continuación la acción de las instrucciones, número de
bytes en memoria que ocupan y duración del ciclo de instrucción (ck).
Denotaremos Pi el dato que se encuentra en la cima de la pila, siendo i
el puntero de pila. Cada vez que introducimos un nuevo dato en la pila
i se incrementa en 1.
Instrucción Acción N.o bytes ck
push X i ← i + 1 y después Pi ← X 3 75 ns.
pop X X ← Pi y después i ← i − 1 3 75 ns.
add Pi−1 ← Pi + Pi−1 y después i ← i − 1 1 75 ns.
mult Pi−1 ← Pi ∗ Pi−1 y después i ← i − 1 1 100 ns.
inc Pi ← Pi + 1, i no varı́a 1 75 ns.
Rendimiento de un
computador
Tiempo consumido
α=
Tiempo de referencia
215
216 FUNDAMENTOS DE LOS COMPUTADORES
B.1.1. Ejemplo
Queremos mejorar el rendimiento de un computador introduciendo un copro-
cesador matemático que realice las operaciones aritméticas en la mitad de
tiempo. Calcular la ganancia en velocidad del sistema para la ejecución de
APÉNDICE B. RENDIMIENTO DE UN COMPUTADOR 217
α
α
1 αm
1-p
1 1
αm p
1 0 1
(a) (b)
100000
CPUs de Intel Pentium 4
2.5años
10000 Itanium
P6 (PentiumPro)
Miles de transistores
80486
P5 (Pentium)
1000
80386
80286
100
8086
4004
1
1975 1980 1985 1990 1995 2000 Año
B.3.1. Ejemplo
Suponiendo que la potencia de computación de un PC se puede considerar
proporcional a su frecuencia de reloj, estimar cuál será el precio que tendrá el
Pentium a 2 GHz, teniendo en cuenta que un Pentium tı́pico a 500 MHz tiene
un precio de unas 1.000 euros.
Solución:
Aplicando la ley de Grosch, tenemos que el precio será:
4
2000
1.000 × = 1.000 × 2 = 2.000 euros
500
220 FUNDAMENTOS DE LOS COMPUTADORES
B.4. EJERCICIOS
Los siguientes códigos corresponden con algunos de los problemas del capı́tulo
3. En este apéndice los códigos se muestran de forma completa, incluyendo los
segmentos de datos, pila y código para poder ser ensamblados.
1. Tenemos 250 números en C2 de 16 bits en las posiciones 500 a 998 de
memoria. Escribir un programa en ensamblador que cuente los números
P ≥ 0 y N < 0 y que almacene P en la posición 1000 de memoria y N
en la 1002.
;----------------
DATOS SEGMENT
; aqui declarar variables si hace falta
DATOS ENDS
;----------------
PILA SEGMENT
DB 512 DUP(0)
PILA ENDS
;----------------
CODIGO SEGMENT
ASSUME CS:CODIGO, DS:DATOS, SS:PILA
INICIO:MOV CX, 0H ; contador de positivos o cero
MOV DX, 0H ; contador de negativos
MOV DS, 0H ; los datos el el segmento 0
MOV SI, 500 ; inicializar desplazamiento
;----------------
223
224 FUNDAMENTOS DE LOS COMPUTADORES
;----------------
DATOS SEGMENT AT 1200 ; variable que contiene el mayor en 1200
MAYOR DW 0
DATOS ENDS
;----------------
PILA SEGMENT STACK
DB 512 DUP(0)
PILA ENDS
;----------------
CODIGO SEGMENT
ASSUME CS:CODIGO, DS:DATOS, SS:PILA
INICIO:MOV ES, 0H ; los datos el el segmento 0
MOV SI, 1000; inicializar desplazamiento
MOV AX, SEG DATOS
MOV DS, AX ; iniciar DS apuntando a datos
;----------------
LAZO: CMP SI, 1198; hemos llegado al final?
JG FIN
CMP WORD PTR ES:[SI], WORD PTR MAYOR
JLE MENOR
MOV MAYOR, WORD PTR ES:[SI]
MENOR:
APÉNDICE C. CÓDIGOS COMPLETOS PARA EL 8086 225
;----------------
DATOS SEGMENT AT 500
NUMERO DW 6
SUMAT DW ?
DATOS ENDS
;----------------
PILA SEGMENT STACK
DB 512 DUP(0)
PILA ENDS
;----------------
CODIGO SEGMENT
ASSUME CS:CODIGO, DS:DATOS, SS:PILA
MOV AX, SEG DATOS
MOV DS, AX ; DS apuntando a datos
;----------------
INICIO: MOV AX, NUMERO; guardo el numero en AX
MOV CX, 0 ; inicio CX donde metere el sumatorio
LAZO: ADD CX,AX
SUB AX,1
CMP AX,0
JNE LAZO
FIN: MOV SUMAT, CX
;----------------
FINP:MOV AH,4CH ; interrupcion fin de programa
INT 21H
CODIGO ENDS
;----------------
END INICIO
;----------------
DATOS SEGMENT AT 100
TABLA DW 50 DUP(?) ; zona de memoria con los numeros
DATOS ENDS
;----------------
PILA SEGMENT STACK
DB 512 DUP(0)
PILA ENDS
;----------------
CODIGO SEGMENT
ASSUME CS:CODIGO, DS:DATOS, SS:PILA
MOV AX, SEG DATOS
MOV DS, AX ;cargar DS con el seg de datos
LEA SI, TABLA ;SI apuntando a TABLA
;----------------
MOV DX,50 ;contador de elementos de la tabla
LAZO: MOV AX, [SI]
MOV BX, AX
AND BX, 01H
CMP BX, 01H
JE IMPAR
SAL AX, 01H
JMP SEGUIR
IMPAR: SAR AX, 01H
SEGUIR:MOV [SI], AX
ADD SI, 2 ; SI apunta a la siguiente palabra
SUB DX, 1 ; decremento contador del bucle
CMP DX, 0
JNE LAZO
;----------------
FINP:MOV AH,4CH ; interrupcion fin de programa
INT 21H
CODIGO ENDS
;----------------
END INICIO
;----------------
DATOS SEGMENT AT 100
TABLA DW 50 DUP(?) ; zona de memoria con los numeros
DATOS ENDS
;----------------
PILA SEGMENT STACK
DB 512 DUP(0)
PILA ENDS
;----------------
CODIGO SEGMENT
ASSUME CS:CODIGO, DS:DATOS, SS:PILA
MOV AX, SEG DATOS
MOV DS, AX ;cargar DS con el seg de datos
LEA SI, TABLA ;SI apuntando a TABLA
;----------------
MOV DX,50
LAZO: MOV AX, [SI]
CMP AX, 00H
JE NEGA
SAL AX, 01H
ADD [SI], AX
JMP SEGUIR
NEGA: MOV [SI], 0H
SEGUIR:ADD SI, 2 ;apuntar a la siguiente palabra
SUB DX, 1
CMP DX, 0
JNE LAZO
;----------------
FINP:MOV AH,4CH ; interrupcion fin de programa
INT 21H
CODIGO ENDS
;----------------
END INICIO
Apéndice D
229
230 FUNDAMENTOS DE LOS COMPUTADORES
n w
línea memoria principal
CACHE
linea k
.....
.....
etiqueta ....... pal. w ....... linea k
.....
.....
.....
linea k+2**n
directorio
N w
......
CACHE
......
......
......
etiqueta ....... pal. w .......
......
......
......
......
directorio
......
asignación directa.
N+w bits (dirección de palabra de memoria)
n bits línea cache
N bits línea memoria principal
N-c c w
MEM principal
conjunto 0 CACHE
..... .....
linea 2**c
conjunto 1
......
linea 2*2**c
......
......
......
linea 3*2**c conjunto c-1
......
directorio
Por último, apuntar que es posible interponer varios niveles de caché en-
tre la memoria principal y el microprocesador. Cada caché tratarı́a la de nivel
superior como si fuera su memoria principal, funcionando tal como hemos vis-
to, siendo cada nivel más rápido y de menor capacidad cuanto más cerca se
encuentre del microprocesador.
D.4. EJERCICIOS
249
250 FUNDAMENTOS DE LOS COMPUTADORES
números en base r?
Solución: Variaciones con repetición de r elementos tomados de k en
k, es decir, RVrk = r k .
6. El siguiente conjunto de 16 bits:
1001 1000 0101 0100
puede representar un número que depende del convenio utilizado.
Dar su significación decimal en el caso de que el convenio sea:
a) Signo y Magnitud
b) Complemento a 1
c) Complemento a 2
d) BCD natural (8,4,2,1)
e) BCD exceso a 3
f) BCD Aiken (2,4,2,1)
Solución:
a) Signo y Magnitud = -6228
b) Complemento a 1 = -26539
c) Complemento a 2 = -26540
d) BCD natural (8,4,2,1) = 9854
e) BCD exceso a 3 = 6521
f) BCD Aiken (2,4,2,1) = sólo válido el 4 final
7. Para las siguientes representaciones de n bits, dar el rango, precisión,
representaciones del 0 y comparar el número de números positivos con
el de negativos.
a) Signo y Magnitud
b) Complemento a 1
c) Complemento a 2
Solución:
Número Sig/Magnitud C1 C2
-63 1011 1111 1100 0000 1100 0001
91 0101 1011 0101 1011 0101 1011
-23 1001 0111 1110 1000 1110 1001
9. ¿Cuántos bits son necesarios para representar todos los números entre
-1 y +1 con un error no mayor de 0.0001(10 en complemento a dos y con
notación en punto fijo?
5 6
Solución: n = ceil log2 ( 102−4 + 1) = 15
10. Representar los siguientes números como flotantes IEEE-754 en simple
precisión.
a) 10
b) 10.5
c) 0.1
d) 0.5
e) -23.15625
Solución:
a) 10 = 0 1000 0010 0100 0000 ... 0
b) 10.5 = 0 1000 0010 0101 0000 ... 0
c) 0.1 = 0 0111 1011 1001 1001 1001 1001 ... 1001
d) 0.5 = 0 0111 1110 0000 ... 0
e) -23.15625 = 1 1000 0011 0111 0010 1000 0000 ... 0
11. ¿Qué inconveniente encontramos en la representación de números rea-
les en punto fijo? Dados estos dos números en el formato IEEE 754:
C0E80000 y 00080000; decir qué valores representan en decimal.
Solución:
Limita el rango y la precisión y presenta el problema del escalado.
C0E80000(H = -7.25(10 ; 00080000(H = 1 x 2−130 (10
12. ¿Cuáles son los requisitos deseables de un sistema de numeración de
enteros con signo? ¿Qué sistema cumple mejor esos requisitos? Expresar
el número 9.75 en su representación IEEE 754 de 32 bits (convierte a
252 FUNDAMENTOS DE LOS COMPUTADORES
Ya está normalizado
17. ¿Cuál son los números positivos más pequeño y más grande representa-
bles para los siguientes convenios?:
a) IEEE-754
b) IBM/360
c) PDP-11
Solución:
a) IEEE-754 : m = 1.0 x 2−126 (Mirar nota al pie 1 ); M ≈ 2 x 2127
b) IBM/360 : m = 0.0001 x 16−64 ; M ≈ 1 x 1663
c) PDP-11 : m = 1.0 x 2−128 ; M ≈ 2 x 2127
b) 1111 (4) C.O. (6) Desp (6) Dir (10) Reg (4)
c) 1111 (4) 111111 (6) C.O. (6) Dir (10) Reg (4)
con C.O. de 000000 (0) a 111011 (59).
d) 1111 (4) 111111 (6) 1111XX (6) C.O.(2) Reg(4) Reg(4) Reg(4)
Para codificar las 16 instrucciones usamos XX de 00 a 11 (co-
rrespondientes a los códigos de operación 60 a 63 del formato
anterior) junto con los dos bits indicados. Reservamos XX=11
y CO=11 para especificar el siguiente formato:
e) 1111(4) 111111(6) 111111(6) 11 (2) C.O.(4) XX...X(8)
a) LOAD 20 ⇒ AC ← 20
b) LOAD [20] ⇒ AC ← 40
c) LOAD [[20]] ⇒ AC ← 60
d) LOAD 30 ⇒ AC ← 30
e) LOAD [30] ⇒ AC ← 50
f) LOAD [[30]] ⇒ AC ← 70
6. Compara las máquinas de 0, 1, 2, y 3 direcciones escribiendo programas
para calcular
X = (A + B × C)/(D − E × F )
para cada una de las cuatro máquinas. Para que no se pierdan los valores
originales de las variables A, B, C, D, E y F podremos apoyarnos en
una variable temporal T. Suponiendo direcciones de 16 bits, códigos de
operación de 8 bits y longitudes de instrucción que son múltiplos de 4
bits, ¿Cuántos bits necesita cada computadora para calcular X?
Solución:
3 Direcciones
MUL B, C, T
ADD A, T, T
MUL E, F, X
SUB D, X, X
DIV T, X, X
Bits necesarios: 5 x (8 + 3 x 16) = 280.
2 Direcciones
MOVE C, T
MUL B, T
ADD A, T
MOVE F, X
MUL E, X
SUB D, X
DIV T, X
Bits necesarios: 7 x (8 + 2 x 16) = 280.
1 Dirección
LOAD C
MUL B
ADD A
STORE T
LOAD F
APÉNDICE B. SOLUCIÓN A LAS RELACIONES DE PROBLEMAS 257
MUL E
SUB D
DIV T
STORE X
Bits necesarios: 9 x (8 + 16) = 216.
0 Direcciones (usando una pila)
PUSH A
PUSH B
PUSH C
MUL
ADD
PUSH D
PUSH E
PUSH F
MUL
SUB
DIV
POP X
Bits necesarios: 5 x 8 + 7 x (8 + 16) = 208.
a) SHL AX, 16
b) MOV AX, 0
c) SUB AX, AX
d) XOR AX, AX
3. Inventa un método para intercambiar dos registros (AX y BX) sin usar
un tercer registro o variable ni la instrucción XCHG. Sugerencia: piensa
en la instrucción OR EXCLUSIVO.
Solución:
XOR AX, BX
XOR BX, AX
XOR AX, BX
Inicializacion
Leer dato
SAR
No Si (impar)
CF?
Escribe dato
Si
Mas?
No
FIN
Inicializacion
Leer dato en AX
Si (negativo) No
AX<0
MOV BX, AX
AX = 0 SAL AX, 1
ADD AX, BX
Escribe dato
Si
Mas?
No
FIN
Dir 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Cont. 8 10 4 5
Dir 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Cont. 11 7 5 3
Dir 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Cont. 6 11 4 9
TMP ⇐ [RY] 4 1 1 1 1 1
[RX] ⇐ TMP 5 1 1 1 1 11 0
TEMPA ⇐ [RX] 6 1 1
TEMPB ⇐ [RY] 7 1 1 1
[RX] ⇐ ALU 8 1 1 1 1 11 0
Si C=1 salta a 0 9 01 0
PC ⇐ [RY] 10 1 1 1 11 0
TEMPA ⇐ SI 11 1 1 1
TEMPB ⇐ [RY] 12 1 1 1
APÉNDICE B. SOLUCIÓN A LAS RELACIONES DE PROBLEMAS
TMP ⇐ ALU 13 1 1 1 1
[RX] ⇐ (TMP) 14 1 1 1 1 11 0
C1(y − x) = 2n − 1 − (y − x)
∥x∥ > ∥y∥ → el resultado es positivo, queremos tener x − y y
sin embargo hemos obtenido:
2n − 1 + x − y
Esto se traduce, por un lado, en un uno en la posición del c n+1
(2n ) y en otro uno que aparece restando y que nos sobra. Para
cancelarlos lo que hacemos es sumar el acarreo obtenido con lo
que desaparece el acarreo y se compensa el -1.
c) Los dos números a sumar son negativos (x n = yn = 1). Como los
dos bits de signo son uno, cn+1 = 1 siempre. Si sn = 0 se habrá pro-
ducido overflow, pues no podemos tener un resultado positivo. En
este caso también se debe sumar el acarreo para obtener el resultado
correcto:
C9(N ) = 10n − 1 − N
donde n es el número de dı́gitos con que trabajo. Una técnica para hacer
el C9 de un número consiste en restar cada dı́gito de 9. Ası́, el negativo
de 014725 es 985274. Se pide:
a) Expresa como números de tres dı́gitos en complemento a 9 los si-
guientes números: 6, -2, 99, -12, -1, 0.
272 FUNDAMENTOS DE LOS COMPUTADORES
12 + 5 + 7 + 3 +10 + 9 = 46
CSA1 CSA2
s1 2·c1 s2 2·c2
CSA3
s3 2·c3
CSA4
s4 2·c4
SAP
SUMA=46
001100 x1 000011 x4
000101 x2 001010 x5
000111 x3 001001 x6
--------- ---------
001110 s1 000000 s2
000101 c1 001011 c2
s1 001110
2c1 001010
s2 ------
000100 s3
001010 c3
274 FUNDAMENTOS DE LOS COMPUTADORES
s3 000100
2c3 010100
2c2 010110
------
000110 s4
010100 c4
s4 000110
2c4 101000
------
101110 = 46
7- 5 + 9
CSA1
SAP
000111 x1
111011 x2
001001 x3
------
110101 s
001011 c
APÉNDICE B. SOLUCIÓN A LAS RELACIONES DE PROBLEMAS 275
110101 s
010110 2c
------
001011 = 11 (once en decimal)
9. Realiza las siguientes multiplicaciones mediante el algoritmo de multi-
plicación binario de suma y desplazamiento con n=5.
a) 12 × 10
b) 7 × 12
c) 6 × 15
10. Realiza las siguientes divisiones mediante el algoritmo de división binario
con restauración con n=5.
a) 12 ÷ 3
b) 15 ÷ 2
11. Realiza las siguientes operaciones con números en punto flotante en el
formato IEEE 754.
a) C30C0000 + C1500000
b) 3B370000 + 39F 68000
Solución:
a) C30C0000 → 1 | 100 0011 0 | 000 1100 00..00 = −1.00011 × 2 7
C1500000 → 1 | 100 0001 0 | 101 0000 00..00 = −1.101 × 2 3
1.01101110000 × 2−9
0.00111101101 × 2−9
1.10101011101 × 2−9
277
Parece que ya deja de sorprender la creciente omnipresencia de los ordena-
dores en todos los ámbitos de la sociedad. A nosotros nos sigue impresionando
la rapidı́sima evolución de los sistemas basados en computador, su creciente
potencia de cálculo capaz de resolver cada vez problemas de mayor compleji-
dad y su capacidad de simplificar y reducir el tiempo necesario para realizar
muchas tareas cotidianas. Pues bien, los fundamentos, conceptos y modos de
operación de estas máquinas tan comunes hoy en dı́a, son los que tratamos
de introducir y desentrañar en este texto. O con otras palabras, este libro
está orientado a aquellas personas que alguna vez se han preguntado “¿Cómo
es posible que los transistores y puertas lógicas que hay dentro de mi ordena-
dor me permitan editar un archivo o ejecutar un programa que he escrito en
Modula o en C?”, pregunta, que por otro lado, esperamos se hayan planteado
todos nuestros alumnos de asignaturas de introducción a los computadores.
Aunque no son del todo necesarios, suponemos que el lector tiene algunos
conocimientos de electrónica digital y programación. Pues bién, en este libro
precisamente queremos cubrir el desnivel semántico que existe en un sistema
computador entre esas dos materias (electrónica digital y lenguajes de alto
nivel), contemplando el control microprogramado y cableado, el lenguaje en-
samblador y los sistemas operativos, según desglosamos a continuación por
temas.
El tema 1 introduce los primeros conceptos básicos y una descripción ini-
cial de la arquitectura de von Neumann. El tema 2 describe los convenios
comúnmente utilizados para representar números, caracteres e instrucciones
en el computador. A partir del tema 3 profundizamos en la arquitectura de
computadores siguiendo un esquema estructural, en el que el computador se
compone del procesador (tema 3), el cual engloba la sección de control (tema
4) y de procesamiento (tema 5), jerarquı́a de memoria (tema 6) y unidad de
Entrada/Salida (tema 7). Por último, el tema 8 describe como los Sistemas
Operativos permiten gestionar toda la arquitectura, dando una visión global
del computador.