Sei sulla pagina 1di 23

FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

CAPÍTULO 4. ARQUITECTURA DE UN
COMPUTADOR SIMPLE

Imagine que lleva a ejecución una de las secuencias desarrolladas en el


ejercicio #4 del capítulo 3. Imagine, asimismo, que el sistema
electrónico está montado en una placa prototipo. Una vez más, imagine
que debe repetir la ejecución de la secuencia veinte veces … o cincuenta
o cien … o mil veces: no parece un esfuerzo muy productivo.

Esta situación hace que se requiera el uso de un mecanismo que


permita la ejecución repetida de la secuencia en forma automática; la
solución consiste en usar una memoria de lectura y escritura (RAM)
para almacenar la secuencia.

En este capítulo se encara el diseño de un computador, en el marco de


la metodología de desarrollo evolutivo de una arquitectura como se ha
aplicado en los capítulos precedentes.

Asimismo, se explora varias arquitecturas diferentes y se completa el


diseño de un modelo de computador simple.

Ing. Marcelo Ramírez M. Página 80


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

4.1. ARQUITECTURA DE UN COMPUTADOR SIMPLE.


MEMORIA DISTRIBUIDA.
Por lo expuesto en el prólogo del capítulo, nuevamente surge la
necesidad de automatización. La solución se describe a
continuación.

4.1.1. MEMORIA DE PROGRAMA.

El sistema integrado USC + memoria de datos es:

Figura 4. 1 - Sistema integrado USC + memoria de datos

Como ya se sabe, el código de la función está compuesto por el código


de operación y el código de argumento. La señal de pulso  dispara la
ejecución. En estas condiciones, la necesidad establecida se satisface
incorporando una memoria que genere, una tras otra, todas las
palabras binarias correspondientes a los códigos de las funciones que
son parte de una secuencia cualquiera. Esta memoria, además, debe
tener la habilidad de contener no sólo una sino varias secuencias
operativas de aplicación y, es más, la facilidad de poder eliminar
secuencias e introducir otras nuevas, según la necesidad.

Por tanto la memoria debe ser de lectura y escritura (RAM), como es el


caso de la memoria de datos. Ambas memorias contienen información
transiente que cambiará según la aplicación.

A su vez, la memoria que almacena la secuencia de operaciones


necesita ser direccionada secuencialmente en forma automática y en
modo de lectura, para que pueda generar los códigos de función en el
orden establecido en la secuencia descriptiva ensamblada. Para ello se
usa un contador binario.

El esquema parcial se muestra en la Figura 4. 2. Nótese que el


direccionamiento automático de la memoria se establece mediante un
contador binario alimentado por una señal de pulso, la memoria está
habilitada permanentemente y, al menos en la fase de ejecución de
secuencias, la señal WR no es requerida.

Ing. Marcelo Ramírez M. Página 81


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

Figura 4. 2 - Memoria de programa

El ancho de la memoria (tamaño de palabra) debe permitir contener


toda la palabra del código de la función. En este contexto es preciso
modificar alguna terminología. La secuencia de funciones será
almacenada o programada en la memoria, de esta forma se redefine a
la secuencia como un programa. Ahora, cada función es una
instrucción, en el entendido de que constituye una invocación a una
función emitida por la unidad de control, en forma de palabra de
control, para dirigir actividades internas del sistema que permitan la
ejecución exitosa de la operación invocada.

En estas condiciones, el sistema resultante es un computador cuyo


esquema se muestra en la Figura 4. 3. La memoria es distribuida en
dos: memoria de datos (contenida en la USC) y memoria de programa.

Figura 4. 3 - Computador de memoria distribuida

El contador binario que genera las direcciones de la memoria de


programa se denominará, de ahora en adelante, puntero de
instrucciones, debido a que su función es apuntar instrucciones,

Ing. Marcelo Ramírez M. Página 82


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

esto es direccionar la memoria de programa para buscar y obtener


códigos de instrucciones.

El descodificador de operaciones (DO) ahora será denominado


descodificador de instrucciones (DI).

En un momento dado ocurre lo siguiente:

1. el puntero de instrucciones direcciona a la memoria,

2. el código de la instrucción es leído a la salida de las líneas de


datos de la RAM,

3. la instrucción es ejecutada en la ALU (y el resultado almacenado


en el acumulador mediante el pulso ahora denominado 1 y

4. el puntero de instrucciones es incrementado mediante una nueva


señal de pulso 2.

Luego, el ciclo se repite una y otra vez, instrucción por instrucción, para
toda la secuencia del programa.

Es claro que la unidad de control, que ahora cuenta con más señales de
control, también controla la RAM de programa.

La memoria de programa, durante el tiempo de ejecución de una


secuencia, está en modo de lectura, pues su función es proporcionar
códigos de instrucción. En la Figura 4. 3 se muestra a la salida de la
RAM el código de instrucción como una composición del código de
operación y el código de argumento.

La función de escritura de la RAM de programa, como sugiere la Figura


4. 3, es utilizada en una instancia pre-operativa, es decir, antes de la
ejecución de un programa. Una forma de cargar un programa en la
memoria consiste en el uso de un subsistema externo que permita
controlar al puntero de instrucciones, su carga inicial, la señal de pulso
de avance del puntero, la señal de escritura en la memoria (WR) y las
entradas de datos para poder grabar código ejecutable. Una
consideración similar aplica para la memoria de datos.

El diseño de la unidad operativa puede ser algo muy sencillo como un


subsistema digital que permita introducir datos a las memorias,
direccionarlas secuencialmente y disparar pulsos de escritura. La Figura
4. 4 muestra las conexiones a emplearse para acoplar una unidad
operativa.

Ing. Marcelo Ramírez M. Página 83


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

Figura 4. 4 - Conexiones hacia una unidad operativa

La unidad operativa debe tener la habilidad de cargar una dirección


inicial en el puntero de instrucciones, luego preparar un código de
instrucción a la entrada de la RAM, disparar la escritura e incrementar
automáticamente el puntero para proceder con el siguiente dato y así
sucesivamente hasta finalizar la introducción de la secuencia.

También es necesario escribir datos en la memoria de datos (p. ej.:


valores iniciales), para lo cual se puede emplear un mecanismo similar
al descrito o emplear la funciones de lectura de puerto y escritura en
memoria (sta) alternativamente por cada dato a ser introducido. Una
opción interesante es emplear un dispositivo inteligente que tome
control de los componentes citados y permita tanto escritura como
verificación.

Se alienta al lector a diseñar una unidad operativa para el sistema


descrito.

4.1.2. FUNCIONAMIENTO - CICLO DE INSTRUCCIÓN.

El funcionamiento del computador de memoria distribuida se puede


describir mediante un diagrama de flujo como el de la Figura 4. 5. La
acción neta del computador es la ejecución de instrucciones una tras
otra, por tanto es una acción cíclica, repetitiva.

En la gráfica se emplea, en lugar de la abreviatura DO (descodificador


de operaciones), la abreviatura DI (descodificador de instrucciones).

Ing. Marcelo Ramírez M. Página 84


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

Figura 4. 5 - Ciclo de instrucción

El puntero de instrucciones apunta a la memoria de programa para


obtener un código de instrucción, éste es descodificado y, si se requiere
de argumento, éste es transferido a la ALU; de todas formas, con o sin
argumento, la instrucción es ejecutada y la última actividad es la
actualización del puntero de instrucciones. Luego se repite el ciclo con
una nueva instrucción. A este procedimiento se conoce como el ciclo de
instrucción.

4.1.3. TEMPORIZACIÓN.

A continuación, en la Figura 4. 6, se muestra el diagrama de


temporización del modelo de computador simple (MCS). La referencia
para las operaciones son ahora las dos señales de pulso: 1, de
ejecución, y 2, de actualización del puntero de instrucciones.

La fase activa de 1, que se denominará t, puede tener un tiempo de


duración diferente al de la fase activa de 2, denominado t. El retardo
de todo el proceso, tR, incluye el tiempo de acceso de lectura de la
memoria de programa, retardo de descodificación del código de

Ing. Marcelo Ramírez M. Página 85


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

operación, tiempo de la unidad de control, retardo de la ALU y tiempo


de acceso de lectura o escritura de la memoria de datos y el retardo del
acumulador.

En el caso de la memoria de datos incluida en la USC, el retardo es el


tiempo de acceso de lectura, que corre paralelo al retardo del
descodificador de operaciones. Si la instrucción no requiere de
argumento, entonces este retardo no importa, sin embargo, en caso
contrario, al retardo de la memoria de datos se suma el retardo de la
interfaz y del mux de datos en la entrada B de la ALU que, dependiendo
de las tecnologías empleadas, probablemente sea mayor que el del
descodificador de operaciones.

Figura 4. 6 - Temporización del modelo de computador simple

El ciclo de instrucción es el periodo comprendido entre los flancos


descendentes de dos pulsos 2 consecutivos.

El tiempo máximo que toma el proceso desde que se da inicio al ciclo de


instrucción hasta que el resultado está estable a la salida de la ALU es
tR y está compuesto de la siguiente manera:

tR  tPI  tMPRG  tMDAT  tUSC Ec. 4. 1

Donde:

tPI = retardo del puntero de instrucciones


tMPRG = tiempo de acceso de lectura de la memoria de programa
tMDAT = tiempo de acceso de lectura de la memoria de datos,
incluida la interfaz
tUSC = retardo de la Unidad Secuencial de Cálculo

Finalmente, en este contexto, se observa que la operación de los pulsos


1 y 2 es alternada. El paso final de la automatización completa es
emplear una fuente automática de pulsos y generador de fases. Ambas
señales son desfasadas y de la misma frecuencia. De esa forma se logra
una ejecución automática del programa a partir de la carga de la
dirección inicial en el PI.

Ing. Marcelo Ramírez M. Página 86


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

En el diagrama se sugiere que los ciclos de trabajo (duty cycle) de las


fases 1 y 2 pueden ser diferentes. El cálculo de las fases activas de
ambas señales de pulso depende de la temporización de los
componentes elegidos para la implementación.

4.1.4. NUEVAS INSTRUCCIONES.

Hasta ahora, la colección de 12 instrucciones de la USC no ha tenido un


incremento adicional, sin embargo la arquitectura actual permite crear
nuevas operaciones.

4.1.4.1. Suspensión de la operación.

Al analizar la ejecución de un programa como el del ejemplo 3.5 del


anterior capítulo, que se muestra a continuación nuevamente, esta vez
ensamblado en la nueva arquitectura, se observa que el puntero de
instrucciones (PI) avanza en su conteo ascendente gracias al pulso 2.
Al llegar a la última instrucción el valor del PI es D16.

El programa del ejemplo 3.5 se presenta ahora ensamblado en la


arquitectura del computador simple. El ensamblado da como resultado
el listado que se muestra a continuación. Esta vez las instrucciones
están almacenadas en la memoria de programa y cada una ocupa una
posición de memoria y, por tanto, una dirección de memoria de
programa. Por ello el segmento de datos y el segmento de programa
tienen, cada uno, su propio espacio de direcciones.

Al final del ciclo de la instrucción sub const, el PI es incrementado en 1


por 2, por tanto su nuevo valor es E16. Luego de finalizado el ciclo de la
instrucción, se inicia un nuevo ciclo y el computador busca la siguiente
instrucción en la posición E16 de la memoria de programa, pero lo que
obtiene no estaba planificado ya que el contenido de esa posición no
está definido y es completamente aleatorio. El computador lee el
contenido de la posición, descodifica y ejecuta. Sin embargo el
resultado es imprevisible.

Al final del ciclo el PI nuevamente es incrementado y la situación se


repite cíclicamente. Ello da lugar a un funcionamiento errático del
sistema y, muy probablemente, a la pérdida de los resultados. No sólo
eso, el PI es un contador de tamaño finito, luego de alcanzar la cuenta
final el siguiente valor es 0, con lo que el ciclo se repite nuevamente y
no existe una forma de que la ejecución del programa se detenga.

Es necesario diseñar una nueva instrucción que detenga la ejecución del


programa luego de que se haya ejecutado la última operación del
algoritmo.

Ej. 4.1: Programa del ejemplo 3.5, esta vez ensamblado para la
arquitectura del computador simple.

Ing. Marcelo Ramírez M. Página 87


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

; calcular f(x,y,z) = 2x-y+ z -3

; datos y variables

.datos <dirección inicial>

MONTO .def 3 ; constante

0 ?? x .oct ?
1 ?? y .oct ?
2 ?? z .oct ?
3 ?? aux .oct ?
4 03 const .oct MONTO

; secuencia de cálculo

.prog

; introducir variables (leer datos)

0 20 in ; leer x
1 D0 sta x ; y guardar
2 20 in
3 D1 sta y
4 20 in
5 D2 sta z

; calcular f(x,y,z)

6 C0 lda x ; cargar x en el acumulador


7 80 add x ; duplicar x
8 91 sub y ; restar y
9 D3 sta aux ; guardar resultado intermedio
A C3 lda z ; leer z
B 40 not ; invertir
C 83 add aux ; sumar con resultado parcial
D 94 sub const ; finalmente, restar 3

.fin

Diseño.

La nueva instrucción se denominará hlt, acrónimo de “hacer un alto en


el programa”.

Para el diseño de la instrucción hay que considerar que la ejecución de


instrucciones se mantiene mientras la memoria de programa las
entregue al descodificador de operaciones, que desde ahora será
llamado descodificador de instrucciones (DI). Ello ocurre porque el

Ing. Marcelo Ramírez M. Página 88


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

PI es el “motor” de la memoria de programa, entonces una solución es


detener la acción del PI mediante la inhabilitación de 2, solución que se
muestra en la figura a continuación.

Figura 4. 7 - Diseño de la instrucción hlt

Un nuevo bit de control, S15, controla el paso de 2 hacia el PI.


Entonces S15 es 1 en todas las palabras de control excepto en la
instrucción hlt.

¿Qué pasa con 1? Este pulso sigue actuando sobre el acumulador y
sobre las banderas, en este caso el efecto debería ser nulo en el
resultado de la última operación antes de hlt (acumulador y banderas).
Para ello es preciso establecer los valores adecuados de los bits de la
palabra de control.

Operación S15 S14 S13 S12:7 S6:0


hlt 0 0 0 000111 111000
Tabla 4. 1 - Palabra de control para la instrucción hlt

La UBC (S4:0) mantiene la salida del acumulador en la entrada A de la


ALU; la ALU selecciona la UBC (S6:5); la lógica de control de las
banderas (S9:7) permite el paso de los estados de las banderas
controladas; la lógica de temporización de las banderas no permite el
disparo de los flip flops del registro, manteniendo así el estado original
de los indicadores; no hay escritura en memoria, entonces S14:13 están
en cero; finalmente S15 está en cero para inhibir el paso de 2 hacia el
PI.

En los casos de las demás instrucciones, el nuevo bit de control S15 está
en uno.

Ing. Marcelo Ramírez M. Página 89


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

4.1.4.2. Ramificación condicional.

Los programas que pueden ser diseñados con el conjunto de


instrucciones actual tienen una secuencia directa de inicio a fin, es
decir, una programación fija de operaciones, siempre en el mismo
orden.

Existen, sin embargo, recursos aún no aprovechados; uno de ellos es la


bandera de acarreo, que señala desborde en operaciones aritméticas
con números no signados. Surge entonces la necesidad de establecer
actividades diferentes en caso de que el acarreo sea 1 y en caso de que
sea 0. Esta forma de decisión básica es el componente fundamental en
lo que se conoce como inteligencia computacional o artificial.

Un caso de ejemplo simple e interesante es la determinación del mayor


de un grupo de números, supóngase dos: x y y. Un algoritmo básico de
búsqueda del número mayor se inicia con la comparación entre ambos.
Aquí viene la decisión: si x es mayor que y, x se asigna a max (un
registro que contendrá al número mayor), si no lo es, y pasa a ser
max. Un diagrama de flujo sencillo (Figura 4. 8) ilustra esta situación.

Figura 4. 8 - Determinar el mayor de dos números

La manera de implementar el flujo de decisión en un programa consiste


en un mecanismo que permita modificar la secuencia típica de un
programa, es decir, la decisión debe provocar que el proceso continúe
en la siguiente instrucción (adyacente a la instrucción de decisión) o
que continúe en otra no adyacente. El mecanismo consiste en alterar la
secuencia natural incremental del puntero de instrucciones (PI)
mediante una carga de valor inicial en el contador.

Esta alteración de la secuencia ascendente del PI se conoce como


ramificación condicional. Para esquematizar las operaciones se
empleará un sencillo diagrama descriptivo de la porción de un
programa. En la Figura 4. 9 la línea vertical denota el avance del PI y
los segmentos horizontales simbolizan las instrucciones.

Ing. Marcelo Ramírez M. Página 90


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

Figura 4. 9 - Porción de un programa

La ramificación se esquematiza según la siguiente gráfica:

Figura 4. 10 – Ramificación o salto.

En la Figura 4. 10 se señala que la ramificación se produce si se cumple


la condición evaluada mediante la instrucción de decisión. Esta
instrucción tiene la función de modificar el contenido del puntero de
instrucciones si la condición evaluada es verdadera. Si la condición es
falsa, no ocurre ningún cambio en el PI y éste continúa su conteo
ascendente.

El efecto lógico de la ramificación se muestra en la Figura 4. 11. La


instrucción de decisión, simbolizada con un rombo, evalúa la condición y
el proceso sigue una de dos ramas. Como se indica en la Figura 4. 10, la
acción de ramificación se conoce generalmente como “salto”.

Ing. Marcelo Ramírez M. Página 91


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

Figura 4. 11 - Ramificación lógica

Diseño.

La nueva instrucción, entonces, debería ser “ramificar si existe


acarreo” o “saltar si c=1”. Con el fin de emplear abreviaturas
mnemónicas que resulten familiares y, posteriormente, útiles, se
empleará el sinónimo brincar, entonces la nueva instrucción será
“brincar si c=1”. Una abreviatura mnemónica apropiada es brc y la
sintaxis es: brc destino, que significa: brincar, si c=1, a la dirección
de destino.

Una implementación de la ramificación condicional se muestra en la


Figura 4. 12. Nuevamente se emplea una compuerta de control de paso
de una señal de pulso, en este caso 2. Las señales habilitantes son
dos: un nuevo bit de control S16 y la bandera de acarreo C. El control
S16 está en 1 para brc y en 0 para las demás instrucciones.

Figura 4. 12 - Ramificación condicional

Ing. Marcelo Ramírez M. Página 92


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

La palabra de control para la nueva instrucción brc es:

Operación S16 S15 S14 S13 S12:7 S6:0


brc dirmem 1 1 0 0 000111 1110000
Tabla 4. 2 - Palabra de control de brc

4.1.4.3. Ramificación incondicional.

La ramificación condicional surge por un aprovechamiento de los


recursos (banderas, unidad de control). En este sentido la ramificación
incondicional parecería no tener sentido: ¿alterar la secuencia de una
programa incondicionalmente? ¿para qué? ¿no es simplemente mejor
colocar la siguiente instrucción a continuación y evitar un salto?. Para
responder a estos cuestionamientos es necesario usar un ejemplo.

Ej. 4.1: El programa de ejemplo es el que deriva del flujograma de la


Figura 4. 8 que describe un procedimiento para determinar el mayor de
dos números.

Un diagrama de flujo más detallado se muestra a continuación:

Figura 4. 13 - Procedimiento de comparación detallado

El detalle se muestra por razones didácticas. Se puede notar con mucha


claridad la repetición de los bloques o pasos en el procedimiento.

Ing. Marcelo Ramírez M. Página 93


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

El código resultante del flujograma de la Figura 4. 13 es el siguiente:

; comparar dos números y mostrar el mayor

.datos

x .oct ?
y .oct ?
max .oct ?

; secuencia de comparación

.prog

lda x ; ¿es x mayor que y?


sub y
brc x_max ; ¡sí!, mostrar x
lda y ; no, mostrar y
sta max
hlt

x_max: lda x
sta max
hlt

.fin

Se observa que las dos últimas operaciones del primer segmento están
repetidas en el segundo segmento, que tiene la etiqueta x_max (¡oh!,
una nueva regla en el lenguaje para el ensamblador), nombre simbólico
asignado a la dirección de memoria destino del salto.

El ejemplo es muy sencillo y permite observar que, luego de la decisión,


es posible tener un proceso más largo a continuación para la variable
encontrada max, entonces se tendría dos porciones de programa
repetidos. Estas porciones están remarcadas en el cuadro anterior.

También se observa que la instrucción previa a cada porción repetida es


la misma sólo que con diferente argumento.

Es necesario recordar, entre paréntesis, que:

 la resta de dos números x y y afecta el contenido del acumulador


y

 si x es mayor o igual que y, el acarreo c = 1.

Luego de la resta, empleada en el ejemplo como mecanismo de


comparación, se recurre a la instrucción brc x_max para evaluar la

Ing. Marcelo Ramírez M. Página 94


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

condición. Si la condición es falsa, se lee la variable y en el acumulador,


se guarda en la posición reservada max y se detiene el programa. Si la
condición es verdadera, se lee la variable x en el acumulador, se guarda
en la posición reservada max. Se puede observar con claridad un corto
procedimiento que se repite.

En el ejemplo la porción de código que se repite es muy corta pero en


otras aplicaciones podría ser más larga. La repetición de código ocupa
innecesariamente espacio de memoria de programa.

Una solución alternativa se observa en la Figura 4. 14 a continuación.

Figura 4. 14 - Uso de la ramificación incondicional

La unión de ambas salidas muestra una segunda ramificación: si la


condición evaluada en la comparación es verdadera, se produce el
primer salta a la dirección x_max y el flujo sigue la rama de la derecha
hasta la finalización del programa.

Si la condición evaluada es falsa, entonces no se produce el salto y el


flujo continúa en la siguiente instrucción (leer y en el acumulador). En
este punto se aplica un salto incondicional hacia la instrucción que
almacena el acumulador en la variable max.

Ing. Marcelo Ramírez M. Página 95


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

La traducción del flujograma de la Figura 4. 14 a código es la siguiente:

; comparar dos números y mostrar el mayor

.datos

x .oct ?
y .oct ?
max .oct ?

; secuencia de comparación

.prog

lda x ; ¿es x mayor que y?


sub y
brc x_max ; ¡sí!, mostrar x
lda y ; no, mostrar y
bri salida

x_max: lda x
salida: sta max
hlt
.fin

Existe un pequeño ahorro en memoria: el anterior programa emplea


nueve instrucciones, el actual ocho. El ahorro es pequeño pero notorio.

Un flujograma más simplificado y elegante se muestra a continuación.

Figura 4. 15 - Ramificación condicional e incondicional

Ing. Marcelo Ramírez M. Página 96


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

Diseño.

La nueva instrucción, por todo lo expuesto, debería llamarse “ramificar


incondicionalmente” o, simplemente, “saltar”. Aprovechando el
diseño de la instrucción brc la nueva instrucción de salto incondicional
tendrá la abreviatura mnemónica bri y la sintaxis es bri destino.

La implementación lógica se muestra en la Figura 4. 16.

Figura 4. 16 - Diseño de la ramificación incondicional

Finalmente, la palabra de control para la instrucción bri es:

Operación S17 S16 S15 S14 S13 S12:7 S6:0


bri dirmem 1 0 1 0 0 000111 1110000
Tabla 4. 3 - Palabra de control de bri

Sólo existe una entrada LOAD en el puntero de instrucciones, con lo


que el diseño debe completarse como se ve en la Figura 4. 17.

Se completa el diseño lógico de las tres nuevas instrucciones con una


pequeña tabla que incluye las palabras de control completas.

Operación S17 S16 S15 S14 S13 S12:7 S6:0


hlt 0 0 0 0 0 000111 1110000
brc dirmem 0 1 1 0 0 000111 1110000
bri dirmem 1 0 1 0 0 000111 1110000
Tabla 4. 4 - Palabra de control de bri

Ing. Marcelo Ramírez M. Página 97


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

Figura 4. 17 - Control completo de la ramificación

4.1.4.4. Conjunto de instrucciones.

Finalmente, con las nuevas incorporaciones, el conjunto de


instrucciones del computador simple de memoria distribuida se muestra
en la tabla a continuación.

Formato
Código de máquina simbólico de Palabra de estado
operación Descripción de la función
C.Op. Código de
Op. Arg. N Z V H P C
Hex argumento
0 x … x x clr 0 1 0 0 0  Cero aL Resultado
1 x … x x hlt       Ninguna OPeración
2 x … x x in    0   Introducir dato externo
3 x … x x neg       NEGativo de a
4 x … x x not       NOT a
5 m … m m and dirmem    0  0 AND
6 m … m m or dirmem    0  0 OR
7 m … m m xor dirmem    0  0 XOR
8 m … m m add dirmem       ADicionar Dato
9 m … m m sub dirmem       SUBstraer
A x … x x inc       INCrementar a
B x … x x dec       DECrementar a
Leer Dato de memoria en el
C m … m m lda dirmem    0  
Acumulador
depoSitar daTo del
D m … m m sta dirmem    0  
Acumulador en la memoria
E m … m m bri dirmem       BRincar Incondicionalmente
F m … m m brc dirmem       BRincar si C es 1

Ing. Marcelo Ramírez M. Página 98


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

Para facilitar la implementación del modelo en laboratorio y no


modificar sensiblemente el tamaño del código de operación se
reemplaza nop por hlt. La instrucción nop está presente en muchos
microprocesadores y tiene una utilidad que será discutida más adelante.

4.1.5. DIMENSIÓN DEL SISTEMA.

Con el fin de observar las memorias y analizar sus dimensiones, se


emplea el diagrama de la Figura 4. 18 a continuación.

Figura 4. 18 - Unidades de memoria del computador

De la Figura 4. 18 se deduce las siguientes observaciones:

1. la dimensión de palabra de la USC simple es independiente de las


dimensiones de las memorias.

2. El tamaño de palabra de la memoria de datos depende de la


dimensión de palabra de la USC simple y es independiente de las
dimensiones de la memoria de programa.

3. La memoria de programa puede tener una capacidad de


direccionamiento arbitraria y el ancho de palabra depende de la
capacidad de direccionamiento de la memoria de datos.

El impacto en el ensamblado de código fuente es notorio y se aprecia


con los ejemplos a continuación.

Ej. 4.1: Un caso de dimensión de las memorias es como sigue:

1. USC simple: 8 bits.

Ing. Marcelo Ramírez M. Página 99


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

2. Memoria de datos: 64K x 8 (64 KOctetos = 64 KBytes). Esto


quiere decir que le memoria tiene 16 líneas de direcciones y un
ancho de palabra de datos de 8 bits.

3. Memoria de programa: 4K x 20. La memoria de programa tiene


12 líneas de direcciones. El ancho de palabra es igual al tamaño
del código de operación (4 bits) más la cantidad de líneas de
direcciones de la memoria de datos (16 bits), es decir 20 bits en
total.

A continuación se muestra el último programa de la comparación de dos


números, ensamblado con las condiciones de dimensión establecidas.

; comparar dos números y mostrar el mayor

.datos

0000 ?? x .oct ?
0001 ?? y .oct ?
0002 ?? max .oct ?

; secuencia de comparación

.prog

000 C0000 lda x ; ¿es x mayor que y?


001 90001 sub y
002 F0005 brc x_max ; ¡sí!, mostrar x
003 C0001 lda y ; no, mostrar y
004 E0006 bri salida

005 C0000 x_max: lda x


006 D0002 salida: sta max
007 10000 hlt
.fin

Se observa en el listado que:

 la memoria de datos tiene definidas las variables con posiciones


de memoria de 16 bits (expresadas en 4 dígitos hexadecimales);

 las direcciones de la memoria de programa se expresan con 3


dígitos hexadecimales;

 los códigos de instrucción son de 20 bits (4 bits de código de


operación y 16 bits de código de argumento);

 las instrucciones que tienen argumento pero no apuntan a la


memoria de datos (en este caso bri y brc), deberían tener una
longitud de 4 dígitos hexadecimales (16 bits), uno por el código
de operación y 3 por el argumento (la dirección de destino del
salto).

Ing. Marcelo Ramírez M. Página 100


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

En este último punto es necesario analizar que el código de la


instrucción podría expresarse en 16 bits pero el argumento debería
estar almacenado en los 12 bits menos significativos de una posición de
memoria y el código de operación en los 4 bits más significativos, lo que
deja un espacio no usado de 4 bits entre ambos componentes. Ello se
resuelve poniendo en cero los bits no usados, lo que finalmente deriva
en un código de instrucción de 20 bits. La conexión de control no se ve
afectada por ello ya que los 12 bits de la dirección de destino son
obtenidas directamente de los 12 bits menos significativos del código de
argumento y las líneas respectivas son conectadas al PI.

Ej. 4.2: Se emplea el mismo programa fuente del ejemplo anterior para
estudiar otro caso de dimensión. Los datos de dimensión son:

1. USC simple: 8 bits.

2. Memoria de datos: 16 x 8 (sólo 16 octetos). Esto quiere decir que


la memoria tiene 4 líneas de direcciones y un ancho de palabra de
datos de 8 bits.

3. Memoria de programa: 256 x 8. La memoria de programa tiene 8


líneas de direcciones. El ancho de palabra es igual al tamaño del
código de operación (4 bits) más la cantidad de líneas de
direcciones de la memoria de datos (4 bits), es decir 8 bits en
total.

El listado ensamblado resultante es:

; comparar dos números y mostrar el mayor

.datos

0 ?? x .oct ?
1 ?? y .oct ?
2 ?? max .oct ?

; secuencia de comparación

.prog

00 C00 lda x ; ¿es x mayor que y?


01 901 sub y
02 F05 brc x_max ; ¡sí!, mostrar x
03 C01 lda y ; no, mostrar y
04 E06 bri salida

05 C00 x_max: lda x


06 D02 salida: sta max
07 100 hlt
.fin

Ing. Marcelo Ramírez M. Página 101


FUNDAMENTOS DE ARQUITECTURA DE MICROPROCESADORES Arquitectura de un Computador Simple

En este caso las direcciones de memoria de programa son más grandes


que en la memoria de datos, sin embargo se homogeneiza el tamaño
del argumento a 8 bits y el código de instrucción es de 12 bits. En este
caso los cuatro bits menos significativos del código de argumento son
conectados a la memoria de datos.

Ing. Marcelo Ramírez M. Página 102

Potrebbero piacerti anche