Capitulo7 Modif-PatriciaQuiroga
Capitulo7 Modif-PatriciaQuiroga
Capitulo7 Modif-PatriciaQuiroga
Contenido Objetivos
7.1 Introducción.......................................................................... 146 • Incorporar el lenguaje técnico.
7.2 Módulo de cálculo en una computadora digital................... 146 • Rescatar la importancia del lenguaje en-
7.3 Relación entre el diseño del hardware y la ejecución samblador; para conocer y programar
de instrucciones.................................................................... 147 a nivel hardware una computadora. Su
7.4 Presentación del modelo de estudio.................................... 150 inclusión obedece a la consideración
7.5 Resumen................................................................................ 176 de que la programación de máquina
7.6 Ejercicios propuestos............................................................ 177 permite comprender de manera más
7.7 Contenido de la página Web de apoyo................................ 177 eficaz el módulo más importante de la
computadora.
• Conocer una máquina Von Neumann
para comprender el funcionamiento
de una computadora en relación con
su diseño interno.
• Comprender la capacidad del hardware
para interpretar una secuencia de ins-
trucciones ordenadas lógicamente: el
programa.
• Reconocer los componentes de una
computadora y el set de instrucciones
básicos de la máquina del ejemplo.
146 7 - Diseño de una computadora digital
7.1 Introducción
Cada módulo realiza una o varias operaciones sobre datos codificados en sistema binario,
que se almacenan en registros asociados al módulo mientras dura la operación. Una operación
aplicada a un registro se denomina microoperación (μop) y se activa en un instante de tiem-
po sincronizado por los pulsos del reloj. El diseño de una computadora es más abstracto que
el diseño de la lógica de un módulo y se ocupa de ensamblarlos.
Considérese como ejemplo de módulo de cálculo el sumador binario paralelo de la figura 7.1.
A B
Fig. 7.1. Diagrama de bloque de un dispositivo que suma los bits de los registro A y B.
Su función es operar datos binarios para obtener en la salida el resultado de su suma. Los
datos de entrada se almacenan en forma temporal en los registros A y B y, tras la orden de
comando S, el resultado se obtiene sobre el registro C. La orden de comando es la microope-
ración de suma que habilita al registro C para que actúe de receptor del resultado. La orden
puede ser una señal “1” generada por otro módulo, cuya función es “dar órdenes” en el caso de
que este sumador pertenezca a una computadora.
BEGIN
Input A
Input B
C =A + B
Output C
END
este programa será convertido en programa ejecutable con la ayuda de un programa “traduc-
tor”, donde para cada sentencia del programa fuente (o source) corresponderán n instruccio-
nes en lenguaje de máquina. En este caso, las sentencias “entrada A” y “entrada B” solicitan
el ingreso de las variables que se han de sumar (que aún no se describirán); la sentencia C =
A + B equivale a ordenarle a la computadora que sume la variable A a la variable B y guarde
el resultado en la locación de memoria asignada para la variable C . La sentencia “salida C”
permite mostrar el resultado en un dispositivo de salida.
Para un experto en Informática, dos buenas herramientas son el conocimiento de las ca-
racterísticas de diseño de su computadora y el aprovechamiento de las facilidades del sistema
operativo, o sea, maximizar la eficiencia de la computadora.
7.3.1 Instrucciones
Cuando la computadora realiza una tarea compleja, a pedido del usuario, ejecuta una serie
de pasos simples representados por su propio juego de instrucciones. Estas instrucciones
constituyen su lenguaje de máquina o lenguaje nativo. Como ya se indicó, no es usual que
el programador plantee la tarea en términos de secuencias binarias, sino que se utiliza un
lenguaje simbólico más orientado a su modalidad de expresión que a la de la computadora.
Sin embargo, todo programa que utiliza un lenguaje simbólico debe traducirse a código de
máquina antes de su ejecución.
Por el momento no se entrará en detalle respecto de esta herramienta “que traduce” ins-
trucciones simbólicas a instrucciones de máquina. Considérese la notación simbólica como
una forma alternativa para representar instrucciones binarias, teniendo siempre presente que
la computadora sólo ejecuta códigos de instrucción en lenguaje de máquina.
El formato de instrucción más simple es el que asigna un grupo de bits para representar
una “acción” y otro grupo para representar el “dato” al que afecta esta acción. Como se ve en la
figura 7.3, el primer grupo de bits se denomina código de operación (OPCODE). La cantidad de bits
del COP determina el número de acciones distintas que se podrían definir, según la fórmula
siguiente:
Por lo general, el segundo grupo de bits hace referencia a un dato en memoria, por lo tanto,
determina la dirección de la posición de memoria (locación) donde se aloja el dato. La cantidad
de bits debe permitir hacer referencia a cualquier posición de memoria.
Sin embargo, no siempre los datos se encuentran en memoria. Un dato puede estar almace-
nado en un registro de CPU y, en este caso, los bits de dato deben poder hacer referencia a ese
registro. Incluso hay códigos de operación que no afectan dato alguno y, si es así, el segundo grupo
de bits puede aparecer como redundante o tomarse como una extensión del código de operación.
Según se indicaba antes, una computadora de propósito general tiene definida la tarea que se
ha de realizar según las instrucciones de un programa almacenado en memoria, que es intercam-
biable. La memoria de lectura/escritura está dividida lógicamente en memoria asignada a progra-
ma y memoria asignada a datos y constituye el módulo de almacenamiento de la computadora. La
unidad de control lee una instrucción de la memoria, la aloja en un registro interno (que llamaremos
en este capítulo registro de instrucción) e interpreta si el código de operación afecta a un dato
almacenado en memoria, en cuyo caso provoca su lectura. Cuando una instrucción está alojada en
la unidad de control se afirma que está en estado de ejecución y su código binario indica dónde
está el dato, cuál es la acción que lo afecta y, por lo tanto, qué módulo del hardware la llevará a cabo.
Conocer la naturaleza del juego de instrucciones de máquina es una de las mejores formas
de aprovechar (con programas mas simples de ejecutar) la potencia de la computadora y com-
prender la relación entre los módulos que la constituyen.
En ocasiones se hace difícil encontrar un límite entre las capacidades del hardware y las
del software, ya que algunas funciones no definidas por uno pueden ser provistas por el otro.
Los diseños actuales muestran la tendencia para desarrollar la mayor cantidad de funciones
sobre hardware, porque esto incrementa la velocidad de procesamiento, acompañada de un
declive constante de su costo. Hasta principios de la decada del 80, la tendencia era hacer el
hardware más complejo (más funciones en hardware); desde aquellos años hasta hoy, se usa
un criterio cuantitativo, que indica que se implementan en hardware las funciones que se
utilizan en forma mas frecuente y el resto se implementan en software.
Cada computadora está diseñada para abastecer las necesidades de un grupo determinado
de usuarios en el mercado total, lo que implica que las bondades y las limitaciones de un diseño
siempre son características relativas a las aplicaciones para las que sirven mejor. Computado-
ras muy buenas para aplicaciones comerciales pueden ser bastante inútiles para aplicaciones
científicas. Organizar el diseño del hardware de la computadora y de su software de base es una
empresa cuyo objetivo es lograr la mayor eficiencia a menor costo en el mercado al que apunta.
SR S Z V C control
RELOJ y direcciones
SECUENCIADOR datos o instrucciones
El modelo plantea cómo evoluciona la ejecución de las instrucciones sin mencionar cómo
llegaron a la memoria desde el exterior.
Formato de datos:
Los datos son del tipo enteros signados de 16 bits (1 para el signo y 15 para la magnitud),
según se puede observar en la figura 7.5.
±
S MAG.
15 14 0
signo magnitud
Formato de instrucción:
0000a1111
1. Tratamiento de instrucciones.
RELOJ y
SECUENCIADOR
La memoria de “X” no necesita más detalle del que se aportó. El medio de comunicación
entre la memoria y la CPU es un bus que transmite órdenes y datos, interpretando como bus
de datos el camino que permite la transferencia de grupos de bits que identifican el contenido
de una posición de memoria.
La etapa 1 también se denomina fase de búsqueda o fase fetch, mientras que las otras
tres se agrupan en la llamada fase de ejecución o execute. Se puede afirmar que una vez
que la computadora comienza a funcionar, su CPU se encontrará siempre en una de estas dos
fases. Para organizar el estudio de estas etapas, la atención se debe centrar primero en qué
elementos intervienen en la gestión y luego en cómo operan para llevarla a cabo.
Para cada fase f(Ii) la CU debe enviar a la memoria la dirección de la palabra donde se en-
cuentra la instrucción, una orden de lectura y una orden de transferencia de la instrucción a la
CU. La CU retiene la dirección de la instrucción en un registro especial denominado “puntero
de instrucción” (IP o Instruction Pointer) o “contador de programa” (PC o Program Counter).
Considérese este registro como el señalador de páginas del libro que usted está leyendo; el se-
ñalador le permite cerrar el libro en forma distraída y luego retomar en la página correcta. El IP
cumple la misma función al permitir que la CU “se distraiga” de la secuencia de la próxima ins-
trucción del programa que se ha de ejecutar. La longitud del IP depende de la cantidad de bits
que se necesiten para direccionar cualquier instrucción en la memoria asignada al programa.
Considérese que para “X” una instrucción In podría, "supuestamente," alojarse en la pa-
labra FFFH que es la última, por lo tanto, el IP mide 12 bits como máximo, que permiten 212
direcciones numeradas de 0 a 4095(10). O sea que este puntero puede hacer referencia a las 4K
direcciones de memoria, la última de ellas se representa con doce 1 binarios (FFFH).
Se indicó que Io siempre se carga en la palabra 000H (esta condición es válida para “X”,
pero no para todas las computadoras), de modo que éste es el valor inicial del IP cuando se
arranca el funcionamiento de la computadora. Por otra parte, las instrucciones se almacenan
en palabras sucesivas y ocupan en este caso una sola palabra; por esta razón, el IP debe poder
incrementarse en una unidad para señalar siempre la próxima instrucción para buscar, luego
de una ejecución. Más adelante veremos que el IP también puede aceptar un valor cualquiera
impuesto por una instrucción que provoca una ruptura de secuencia en el programa. En la
figura 7.8 se muestran las posibilidades de actualización y función de este registro.
Incremento Carga
IP + 1 IP DATA IP
Una vez que la CU envía a memoria el contenido del IP, da la orden de lectura para que la
palabra implicada, que llamaremos W, se almacene en el registro de palabra de memoria (MDR
o Memory Data Register).Usualmente, la unidad de acceso a memoria es el bit; aquí la computa-
dora “X” tiene una memoria organizada por palabras de 2 bytes y la unidad de direccionamiento
es entonces la palabra (W).
Por último, la etapa fetch termina con la transferencia de la instrucción leída a un registro
interno de la CU, donde la instrucción permanece almacenada mientras dure su ejecución.
Este registro se denomina registro de instrucción (IR o Instruction Register) y su capacidad
soporta el conjunto de bits del código de instrucción ejemplificado, en este caso, 16 bits.
Como se observa en la figura 7.9, IR se relaciona directamente con el hardware que genera
microoperaciones de ejecución y que denominaremos CU.
1. Carga de la instrucción
MDR IR
COP DATA
15 14 13 12 11 0 Por orden de la CU (último evento
ocurrido durante la fase fetch
2. Envío directo al módulo 3. Envío a registros receptores de
de control que dirección (por ejemplo: MAR, IP).
decodifica la instrucción Por orden de la CU
La zona denominada DATA es de 12 bits; se relaciona con el MAR cuando se debe tomar
un dato de memoria y con el IP cuando se debe romper la secuencia normal del programa. Esta
zona se ignora cuando la instrucción no afecta dato alguno. La CU actualiza el IP y entra en la
fase execute de la instrucción buscada. En una flag llamada F (fase) se retiene un “1” durante
la fase de búsqueda que cambia a 0 cuando comienza la fase de ejecución. Su función es
importantísima para la CU de “X”, porque le permite alternar de una fase a la otra, inhibiendo
órdenes de búsqueda durante la fase de ejecución, y al revés.
Ahora que se conocen los dos registros de la CU de “X” implicados en la búsqueda de la instruc-
ción, veremos quién y cómo se realiza su operación. En el caso de “X”, el que genera la secuencia
de microoperaciones de las fases fetch y execute es el circuito denominado control de instrucción.
Aunque su nombre lo asocia a la segunda fase, gestiona la fase fetch comandado por el valor “1” de la
flag F y por señales de tiempo que le permiten sincronizar las microoperaciones de búsqueda.
Por el momento no se entrará en detalle respecto de la estructura interna del control ni del
sistema de reloj, pero se debe considerar que las microoperaciones obviamente no pueden
enviarse simultáneamente. Por lo tanto, los componentes de hardware implicados en la fase
fetch y la secuencia de sus eventos, que se muestran en la figura 7.10, son los siguientes:
1. IP MAR
2. Word MDR (por orden de lectura)
3. MDR IR
4. IP + 1 IP
5. 0 F
Memoria principal
CU *4*
0 11 S
0 E
IP *1* M L MEMORIA DE
E *2*
A C LECTURA Y
R T ESCRITURA
11 O Lectura
R
0123 4 15
Arranque/ IR 0 15
COP DATA
reset u *3*
orden MDR
externa *1*
*2*
CONTROL *3*
*4*
*5*
RELOJ
1 Indicador de
*5* Fase F
F es una flag cuyo valor realimenta como información de entrada al control, de modo de
inhibir la búsqueda de una instrucción nueva a partir del evento 5 de la fase fetch y, de esta
manera, delimitar esta fase con la de ejecución.
La primera es una transferencia del contenido del puntero IP al MAR para seleccionar la
palabra que se ha de leer.
La cuarta corresponde a la actualización del IP para que señale la próxima instrucción para
ejecutar.
La quinta corresponde a la actualización del indicador de fase F para entrar en fase execute
(nótese que la cuarta microoperación puede producirse al mismo tiempo con la segunda o la
tercera, porque no afecta los mismos registros; no así con la primera, porque se corre el riesgo
de incrementar el IP antes de acceder a memoria). Si se quiere tener una idea de la estructura
de hardware del control que gestiona este nivel de microoperaciones, la forma más simple
es armar un circuito cuyas funciones de salida dependan de las variables de tiempo ti y de la
variable de fase F.
Para este ejemplo se debe asumir que el tiempo de respuesta de memoria es igual a cuatro
pulsos del reloj (4 ti ) y que ninguna ejecución de instrucción supera los ocho tiempos del ciclo
de la computadora.
f1 = F · t0 IP MAR
f2 = F · t1 W MDR
f3 = F · t5 MDR IR
f4 = F · t1 IP + 1 IP f4 se solapa con f2 ya que es
una microoperación independiente de la anterior
f5 = F · t7 0 F
Nótese que el tiempo que transcurre entre la orden de lectura (f2) y la transferencia
del contenido de la palabra (f3) coincide con el tiempo de respuesta de la memoria. En
el tiempo t7 se resetea la flag de estado de la CU para forzar la etapa de ejecución de la
instrucción.
F t0 t1 ............. t5... t7
f3 MDR IR
f4 IP + 1 IP
f5 0 F
Fig. 7.11. Estructura de una parte del módulo de control para la fase fetch.
Ahora es oportuno que se analice cómo se comporta el control cuando decodifica las ins-
trucciones del programa y genera las microoperaciones de ejecución.
Supóngase que el programa almacenado es muy elemental: sumar dos datos almacenados
en memoria en las palabras A0A y A0B y calcular su promedio, almacenando el resultado en
la palabra A0C.
Visor de 16 bits
+ = Desplazamiento
0 1 a derecha
S Z V C
0000000000000100 Visor
0000000000000100 0000000000000010
0000000000000110
El estado de las luces le indicará ciertas condiciones de la operación que podrá tomar en
cuenta o no:
Por lo tanto, para el juego de valores operados todas las luces permanecerán apagadas.
C 00
0000 0000 0000 0100 V=0
+ 0000 0000 0000 0010 Z= 0
0000 0000 0000 0110 C=0
S Resultado ≠ 0 S=0
Su última acción será presionar la tecla de desplazamiento a derecha y verá el resultado final.
0000000000000011
Esta calculadora elemental permite realizar operaciones muy simples. Esto se debe a su
escasa cantidad de teclas “de control” (suma, igual y desplazamiento), por lo que se deduce
que cuanto más deficiente sea la capacidad de “hardware”, tanto más acciones serán necesa-
rias para realizar lógicamente tareas complejas.
Esta calculadora pretende dar una noción del dispositivo de cálculo de nuestra compu-
tadora “X”, su unidad aritmético-lógica. Llamemos acumulador a un registro de 16 bits que
cumple la función del visor. Las teclas 0 y 1 no tienen sentido práctico, ya que los datos son
traídos de memoria; las teclas +, ÷, → son órdenes que recibe la ALU por parte del control.
Las luces podrán, eventualmente, ser consultadas y permitirán que el programa lleve un
control de qué ocurrió con la operación. Las llamaremos flags o banderas de estado; si el bit
almacenado es 0, la condición no se satisface; si el bit almacenado es 1, sí. Ahora cada acción
se transforma en una instrucción del programa P. A cada instrucción se le asigna un nombre
simplificado y un código binario que se mostrará en hexadecimal.
Código
Nombre
(representa al código de máquina)
- Desplazar el SHR
AXXX
acumulador Shift right
- Almacenar el
STA A0C
acumulador en la 3A0C
Store accumulator
palabra A0C
LDA A0A
La interpretación de su COP (0001) permite la transferencia del dato almacenado en la
palabra A0A al acumulador de la ALU.
Las dos primeras microoperaciones hacen efectiva la lectura del dato de memoria y la
tercera procede a la carga en sí.
CU MP
MAR
D
COP DATA
f6 A E
IR 1 A0A 0 C
O A0A 0004
A
D
I
t0 MDR F.
f6
t1 0
.. f7 f8 0 f7
.. CONTROL
f8 0
t7 f9 4
f9
F 0 ALU
1 AC 0004
f6. Microoperación que habilita la transferencia de la dirección del dato indicada por la
instrucción al registro de direccionamiento de memoria.
ADA A0B
Las salidas Si están listas cuando la microoperación final habilita al acumulador como receptor
de la suma, la misma microoperación habilita al status register para que se actualice.
Como en la instrucción anterior, las dos primeras microoperaciones permiten la lectura del
dato almacenado en la palabra A0B (fig. 7.14).
CU MP
MAR
D
COP DATA A E
f10
IR 2 A0B 0 C
A0B
B O 0002
D A0A 0004
I
t0 MDR
f10 F.
t1 0
.. CONTROL f11
f12 0 f11
.. (esquema f12 0
t7 parcial) f13 2
ALU
f13
F 0 AC 0004
f12
1 f12
+
f12
SR S Z C V
DATA MAR
WORD MDR
MDR + AC AC
1 F
f10. Similar a la microoperación f6.
f11. Similar a la microoperación f7.
f12. Microoperación que habilita al acumulador como receptor del resultado (0006H) y al SR,
o status register, como receptor de la información del estado final de la operación (signo, cero,
carry y overflow).
SHR
Esta única microoperación afecta una entrada especial del registro acumulador que hace
posible habilitar la función “desplazar”. Más adelante se verá que ésta es una de las varias
funciones propias que tiene este registro (fig. 7.15).
CU
COP DATA
IR A XXX
t0
f14
t1
.. CONTROL ALU
.. (esquema
parcial) AC 0006
t7
0003
f15
F 0
1
AC AC
1 F
f14. Microoperación que permite desplazar la información del AC una posición a la derecha,
con lo que divide por la base.
STA A0C
CU MP
MAR
D
COP DATA
f16 A E
C 0003
IR 3 A0C 0
O A0A 0002
C
D 0004
I
t0 MDR F.
f16
t1 0
.. CONTROL f17 f17 0 f18
.. (esquema f18 0
parcial)
t7 f19 3
f19
F 0 ALU
1 AC 0003
DATA MAR
AC MDR
HLT
CU COP DATA
Generador de
IR 0 XXX
secuencias
inactivo
8 f20
RELOJ t1 = 0 CONTROL
INHABILITAR
Aclaraciones:
Para la representación de instrucciones se adopta un lenguaje que permite que el usuario ex-
prese sus programas, sin necesidad de recordar el código binario asignado a cada una de las ins-
trucciones. Este lenguaje asume, por convención, un mnemónico de tres letras para definir el COP
y tres dígitos hexadecimales para definir la dirección del operando en memoria en aquellas instruc-
ciones de referencia a memoria. En la tabla 7-3 se muestra la expresión simbólica, la representación
binaria en hexadecimal, el código binario ejecutable y las microoperaciones de ejecución.
Algunas de las instrucciones de la tabla 7-3 fueron analizadas para la ejecución del progra-
ma P, las demás, tal vez requieran una explicación adicional.
JMP HHH Es una instrucción de salto incondicional, o sea que usted debe usarla
cuando necesite romper el orden secuencial del programa. HHH es la di-
rección de la palabra de la instrucción a la que quiere saltar. Por eso el con-
trol transfiere directamente esta dirección al PC, de modo que la próxima
etapa de búsqueda lo encuentre actualizado.
ANA HHH Es una instrucción que permite asociar al acumulador y al dato obtenido
mediante el operador lógico AND, de modo que el contenido final del
acumulador sea el resultado de la operación “producto lógico” para cada
par de valores bit a bit.
XOA HHH Es una instrucción que permite asociar al acumulador y al dato obtenido
mediante el operador lógico OR EXCLUSIVE, de modo que el contenido fi-
nal del acumulador sea el resultado de la operación “suma exclusiva” para
cada par de valores bit a bit.
SNA HHH Es una instrucción de salto condicionado, que permite tomar una decisión en el
programa, en función de una condición preestablecida. En este caso, la condi-
ción es que el dato almacenado en el acumulador sea negativo, esto es, que para
efectuar el salto la instrucción considera el valor 1 de la flag “S” en el registro
de estado. Si S = 1, entonces, modifica el contenido actual del PC con la direc-
ción de salto especificada en el campo DATA, lo que provoca que la próxima
fase fetch no busque la instrucción siguiente al SNA, sino la indicada en esta
instrucción. Si S = 0, significa que el dato almacenado en el acumulador no es
negativo, por lo tanto, no se satisface la condición y no se produce ninguna
microoperación de ejecución, continuando la secuencia normal del programa.
SZA HHH Es una instrucción de salto condicional igual que las anteriores. En este
caso, la condición que se ha de verificar es que el dato almacenado en el
acumulador sea 0, por lo tanto, la bandera consultada es la Z. Con Z = 1 la
condición se satisface.
SCA HHH Es una instrucción de salto condicional igual que las anteriores. En este
caso la condición que se ha de verificar es que el último acarreo sea 1, para
considerar que ésta se encuentra satisfecha.
palabra (DATA → MAR) o para que la transferencia al acumulador (MDR → AC) no se produz-
ca antes de que la palabra haya sido cargada en el MDR? Es obvio que cada microoperación
debe ser controlada por una variable fundamental: el tiempo. Tomando el último ejemplo, la
palabra no estará disponible en el MDR hasta que se haya cumplido el tiempo estimado de
respuesta de memoria; antes sería inútil intentar transferir su contenido al acumulador.
Las señales de tiempo que afectan a las microoperaciones están reguladas según el tiempo
de respuesta de los registros que involucran.
En la mayoría de las computadoras las señales de tiempo son generadas por un sistema de
reloj. Éste se encuentra constituido por un oscilador y circuitos asociados que generan pulsos,
cuyo ancho y separación son determinados en forma precisa. Se denomina ciclo de reloj o
ciclo menor al intervalo entre dos pulsos consecutivos de reloj (0 y 1), como lo muestra la
figura 7.18.
25.000.000
25 MHz =
seg
luego
0 1 2 3 4 5 6 7
t0 t1 t2 t3 t4 t5 t6 t7
Ck
RELOJ 1 0 0 0 0 0 0 0
estado inicial
El registro se carga con el estado inicial mediante un comando externo controlado por el
usuario, que indica el comienzo del procesamiento, llamémoslo ON, y se resetea mediante
otro comando externo, también controlado por el usuario, que indica fin del procesamiento,
llamémoslo OFF. Puede ser causa de reseteo de este registro un evento interno del procesa-
miento en curso, por ejemplo, la interpretación de una instrucción de fin de programa. Es obvio
que el reseteo de este registro provoca que no se generen señales de tiempo y, por lo tanto, la
interrupción de la actividad en “X”.
Repasemos los componentes de “X”: memoria de 4096 palabras de 16 bits cada una; suma-
dor binario asociado al acumulador de 16 bits y al MDR de 16 bits; tres banderas de estado de
operación en el status register (S, Z y C); puntero de instrucción de 12 bits, llamado contador
de programa, que indica la próxima instrucción que ha de ejecutarse.
Convengamos que la primera instrucción del programa siempre se carga en la palabra 000H,
por lo tanto, es éste el valor inicial de PC. El registro de instrucción de 16 bits almacena la instruc-
ción que está siendo decodificada y ejecutada por el control y se encuentra dividido en dos par-
tes: cuatro bits para el código de operación (COP) y 12 bits para la dirección del operando (DATA).
El usuario presiona la tecla ON para iniciar la ejecución del programa, lo que desencadena
una serie de operaciones internas para la búsqueda de la primera instrucción de memoria. A
partir de ese momento, la unidad de control estará en uno de dos estados: búsqueda de la
instrucción (o fase fetch) o ejecución de la instrucción (o fase execute). La unidad de control
actualiza la flag de control de fase para pasar de un estado a otro. Acordemos que el valor de
este biestable es 1 para la fase de búsqueda y 0 para la fase de ejecución. Todos estos com-
ponentes brindan cierta información al control que genera, considerando estas variables, las
“funciones de control” necesarias para llevar a cabo el procesamiento: las microoperaciones.
El esquema de la figura 7.20 muestra en forma general la CU de “X” formada por dos blo-
ques: el decodificador de instrucción y el secuenciador que genera microoperaciones desfa-
sadas en el tiempo. El primero puede obtenerse a partir de un decodificador 4 · 16. Las cuatro
entradas al circuito varían entre 0000 y 1111, según la instrucción almacenada en el IR. Las
salidas indican con un 1 cuál de las dieciséis combinaciones se dio en la entrada.
IR
COP DATA
CONTROL
Lógica de
decodificación Decodificador 4 . 16
del COP COP15 ............................... COP0
S t0
E µop0
C t1 RED DE Microoperaciones
C I .. µop1
COMPUERTAS (señales de control
RELOJ U A .. (lógica de generación que afectan a los
10MHZ E D componentes del
N t7 de microoperaciones)
O µop7 sistema)
R
Lógica de FLAG F
Entrada de
generación
habilitación 0 1
del señales
Indica Indica
fase fase
EXECUTE FETCH
DATA MAR
WORD MDR
En consecuencia, deben producirse en los primeros dos tiempos del ciclo de la computa-
dora. Las dos compuertas que generan en su salida una de estas microoperaciones dependen,
entonces, de las variables siguientes:
7.4.5.2 Diseño parcial del módulo del control asociado a la fase execute de algunas instrucciones
Para finalizar, en la figura 7.21 se observa un diseño parcial del control considerando so-
lamente la función de control WORD—MDR (orden de lectura de memoria). Si se analizan los
casos de lectura en los ejemplos desarrollados, se notará que la CU sólo dispara una orden
de lectura en la fase de búsqueda de la instrucción (lectura de la palabra que contiene la ins-
trucción) y en la fase de ejecución de aquellas instrucciones que necesiten un operando de
memoria (lectura de la palabra que contiene el operando).
f
t1 AND
OR WORD MDR
COP1 f
t1 AND
COP2
OR
COP3
COP4
Fig. 7.21. Diseño parcial del control para la orden de lectura de la memoria.
Si la computadora “X” tuviese sólo las cinco instrucciones del programa P, podríamos
armar la red de compuertas del control para generar las distintas microoperaciones. Es im-
portante analizar que la flag indicadora de fase cambia a 0 en el último paso de ejecución de
cualquier instrucción, o sea que el estado de F es independiente del valor del COPi y puede
producirse en el último ti del ciclo de la computadora, que puede ser t7, esto es, SET F = t7. El
registro MDR recibe la transferencia del PC sólo en la fase de búsqueda, o sea:
SETF = f1 = F · t ;
0
recibe la transferencia del campo DATA en f6, f10 y f16, que se puede expresar como:
El registro MDR recibe la transferencia de la palabra de memoria en f2, f7 y f11, que se puede
expresar como:
Las instrucciones de “X” que hacen referencia a la ALU son ADA, INC, CMA, SHR y SHL,
correspondientes a los operadores aritméticos “suma” (+), “incremento” (+1), “complemento”,
“división por la base binaria” y “multiplicación por la base binaria”. ANA y XOA responden a
los operadores lógicos “y” (AND) y “o excluyente” (or exclusive).
Las instrucciones LDA, STA y CLA permiten el control del registro acumulador pertene-
ciente a este módulo, gestionando su carga, descarga y puesta a 0.
Como se ve, la mayor parte de las instrucciones de “X” requiere la intervención de la ALU.
15 0 15 0
AC MDR
MDR + AC AC
LOGICA ADD,
MDR ˆ AC AC
AND y XOR
MDR + AC AC
A A X
D N O
A A A
CONTROL
Es importante destacar el valor de las banderas (flags) del registro de estado asociado a
esta unidad (status register o SR). El estado de las banderas permite que el programador con-
trole la condición final de una operación para establecer o no una ruptura de la secuencia nor-
mal del programa. Cada bandera se actualiza después de una operación en la ALU (asumiendo
un valor 0 o 1), según la lógica presentada en la figura 7.23.
15 0 15 0 C15 C14
C15 AC S .......... AC C15 C14 V
Å
0 0 0
Función NOR OR OR 0 1 1
Exec 1 0 1
Signo 1 1 0
C S Z V Función XOR
•• N –a veces denominado S por signo– (resultado del acumulador negativo) que vale 1
cuando S (AC15) = 1.
•• Z (resultado = cero) que vale 1 cuando todos los ACi son iguales a 0.
•• C (carry o acarreo que se produce al sumar el último par de bits del acumulador) que
asume el valor de C15.
Las instrucciones de salto condicional SNA, SZA y SCA provocan salto cuando la con-
dición de la bandera es verdadera. Por lo tanto, la lógica que genera la microoperación en el
control depende de ellas y se representa en la figura 7.24.
Control
f0
AND DATA PC
t0
OR
Reloj
ALU
S Z C V Status register
ALU
CLA
15 0
CMA
INC AC
SHR
SHL
Del control
15 0
ANA Lógica de operaciones
MDR
ADA sobre datos
XOA
Lógica de actualización
de flags
S Z C V
Al reloj
Al control
El ejemplo siguiente le permitirá ver una aplicación del efecto que causa el estado final de
una operación para la toma de decisiones en un programa. Considere una porción de progra-
ma Assembler, donde el resultado de comparar dos números por mayor, menor e igual permite
que el programador se bifurque a otros puntos del programa. El método usado para la compa-
ración es la resta de los datos.
En este momento, cabe preguntarse por qué razón se desplazan bits en un registro. Bási-
camente, por tres razones esenciales:
•• Para multiplicar.
•• Para dividir.
En efecto, usted sabe que hemos remarcado que en las operaciones aritméticas definidas
para la ALU la multiplicación y la división no figuran. Una multiplicación se define por medio
de una serie de instrucciones en código de máquina, que implican sumas y desplazamientos
sucesivos. Por ejemplo, supóngase en un formato de sólo tres dígitos decimales el valor si-
guiente:
080 080
008 800
Un desplazamiento a derecha divide el valor 080 por 10 (008), mientras que uno a izquierda
lo multiplica por 10 (800). En sistemas de numeración de cualquier base, el desplazamiento
permite multiplicar o dividir un número por su base (siempre representada por 10). De la mis-
ma manera, en binario, para multiplicar un número 2 (la base) es necesario agregarle un 0 a
derecha, que es equivalente a desplazar todos sus bits un bit a izquierda; para multiplicarlo por
4, se necesitan dos desplazamientos. Veamos el ejemplo siguiente, que se trata de multiplicar
el número 6 por 5:
6 · 5 = ((6 · 2) · 2) + 6 = 30
Así, en formato de 8 bits, los registros contendrán los valores que se detallan en la figura 7.26,
S
0 0000110 +6
desplazamiento 0 0001100 +12
desplazamiento 0 0011000 +24
sumo +6 0 0011110 +30
10100101
01011010
Una de las aplicaciones tiene lugar en el cálculo de una resta, X − Y = Z, mediante la suma
del complemento del sustraendo. Ejemplo:
LDA, Y
CMA complemento
INC suma 1
ADA, X
STA, Z
El “y” lógico: es una operación que se aplica a dos operandos A Λ B = Z. La operación
consiste en hallar el producto lógico (bit a bit), no aritmético, de cada par de bits. Entonces:
00110010 A
Λ 00001111 B
00000010 Z
El producto lógico consiste en multiplicar ai · bi para 7 ≥ i ≥ 0. Ejemplo:
LDA, A
ANA, B
STA, Z
Una de las aplicaciones es el uso de máscara para indicar qué grupo de bits del operando
A se va a reconocer como información en el operando Z.
En este caso, la máscara 0001111 permite que sobre Z se “copien” los primeros 4 bits de A
y se anule el resto de la información.
El “o” lógico: es una operación que se aplica a dos operandos A v B = Z. La operación con-
siste en hallar la suma lógica (no aritmética) de cada par de bits.
0000 1000 A
v 0011 0000 B
0011 1000 Z
3 8
Aplicación: permite agregar los bits de zona para transformar un dígito BCD en el corres-
pondiente carácter ASCII.
El “o” exclusivo: es una operación lógica que se aplica a dos operandos A v B = C. La ope-
ración es similar a la suma aritmética, sólo que no se consideran los acarreos al operar cada
par de bits.
10101100 A
v 10101100 B
00000000 C
Aplicación: permite comparar si dos operandos son iguales, en cuyo caso el resultado es 0.
S Z V H O P Y C
La flag S o N es el indicador del signo del resultado. S = 1 indica que el resultado es nega-
tivo y S = 0, que es positivo.
La flag H es el indicador de acarreo de los 4 primeros bits (utilizado cuando la ALU suma
dos dígitos BCD); indica el valor que se tomará como acarreo para el próximo par de dígitos
BCD.
La flag C es el indicador del último acarreo (carry) de una operación y puede llegar a inter-
venir en los desplazamientos como un bit más asociado al acumulador.
En la presentación de nuestro modelo de arquitectura se indicó que “X” no era una com-
putadora concreta del mercado actual. Suponemos que “X” lo habrá ayudado a familiarizarse
con algunos conceptos importantes sobre el procesamiento de datos con computadoras; sin
embargo, es necesario considerar las variaciones que permiten una mayor eficiencia de esta
tarea en computadoras que se alejan del modelo básico. Estas variaciones afectan tanto a los
elementos de hardware como a los de software.
7.5 Resumen
Las CPU actuales utilizan múltiples registros para el almacenamiento temporal de datos
y de referencias a memoria. Están categorizados como registros invisibles, registros de uso
exclusivo de las instrucciones privilegiadas del sistema operativo, en los cuales los bits al-
macenados se relacionan con la administración de la dinámica del sistema. Por otra parte,
están categorizados como registros visibles o de propósito general, que son aquellos utilizados
por las instrucciones de las aplicaciones. También se agregan a los procesadores actuales
memorias de almacenamiento ultra-rápidas denominadas “caché de instrucciones” o “caché
de datos”; estos subsistemas de almacenamiento están incluidos con el fin de adelantar la
búsqueda de ambos tipos de objetos (instrucciones y datos) desde su almacenamiento en
la memoria principal. El almacenamiento en cachés brinda a la CPU una disponibilidad casi
continua de instrucciones y datos, esto mejora la velocidad de ejecución, pues obtiene objetos
en tiempos acordes a sus necesidades (existe una diferencia notable entre ésta y los tiempos
de respuesta de las tecnologías que se utilizan en la memoria principal). La organización de
las memorias, las diversas tecnologías y la manera en la que el sistema operativo puede dividir
territorios en las distintas áreas de almacenamiento se verán en el capítulo Memorias.
En relación con las instrucciones de máquina o nativas, casi todas ellas se pueden clasificar
en instrucciones del tipo memoria-registro, o del tipo registro-registro como veremos en el
capítulo Instrucciones. Por ejemplo, si previamente se cargan dos operandos en registros de
cálculo de la CPU, se utilizan instrucciones de transferencia memoria-registro (MOVER reg1,
mem), que luego se podrán “operar” con instrucciones aritméticas o lógicas de tipo registro-
registro (SUMAR reg1, reg2). Puede ocurrir también que una única instrucción involucre tanto
la carga en CPU de dos operandos, como la operación entre ellos y el posterior almacenamien-
to del resultado. Cuanto más rápido se pueda realizar este ciclo, mejor. La velocidad de proce-
samiento no sólo tiene que ver con la velocidad del reloj, también es necesario un modelo de
ejecución adecuado. Esto último tiene que ver con los paradigmas presentados para mejorar
el ciclo de ejecución de una instrucción. Al paradigma original enunciado por Von Neumann,
se agregó un nuevo modelo de ejecución, RISC (Reduced Set Instruction Set Code), cuyos
referentes principales fueron, David Patterson, de la Universidad de Berkeley, y John Hennessy,
de la Universidad de Stanford.
7.6 Ejercicios propuestos 3) Diseñar un control (gráfico de compuertas del circuito) que indi-
que las microoperaciones necesarias para obtener el promedio
1) Problema de programación: de 2 números, según el programa:
En la memoria de nuestra computadora (“X”) se almacenaron 3 LDA XXX
valores en representación de punto fijo con negativos comple- ADD XXX
mentados a 2 en las direcciones: 03A, 03B y 03C. SHR XXX
a) Realizar el programa en Assembler, sumando los 3 valores STA XXX.
y almacenando el resultado en la dirección 0FE, si el valor es Tenga en cuenta que cada microoperación tarda un ciclo de
mayor o igual que 0, o en la dirección 0FF, en caso contrario. computadora (para “X” 8 señales de tiempo).
b) Codificar el programa en código de máquina representando 4) Diseñe un circuito que, acoplado al reloj maestro, genere una
los valores binarios en hexadecimal. secuencia repetitiva de cuatro señales de tiempo.
c) En una tabla indicar las microoperaciones que permiten la 5) Diseñe un semicircuito incluido en el control para la habilitación
ejecución de cada instrucción y representar los contenidos de de la microoperación PC + 1PC.
los registros especiales AC, PC, MAR, MDR, IR, S, Z, V y C, y en
6) Programe en Assembler la estructura condicional de un lenguaje
las palabras de memoria 03A, 03B, 03C, 0FE y 0FF.
de alto nivel similar a la siguiente semántica. Considérese que
DATOS: las referencias a memoria para A, B y C son 300, 301 y 302
(03A) = 7F00 IF A = B THEN C=A + B ELSE C=A-B
(03B) = 91A2 7) Programe en Assembler la estructura iterativa de un lenguaje de
(03C) = 6AB1 alto nivel similar a la semántica siguiente:
El material marcado con asterisco (*) sólo está disponible para docentes.
Presentaciones*