Funcionamiento de la CPU
Esta sección, primero describe el funcionamiento detallado de las instrucciones de la CPU y explica
cómo la CPU ejecuta el programa ejemplo. La descripción detallada de las instrucciones típicas de la CPU hacen
ver como funciona una CPU. A través del programa ejemplo y usando la técnica de aprendizaje llamada "ver
funcionando el microcontrolador", se pretende interpretar la CPU, así como ejecutando las instrucciones de un
programa.
Funcionamiento Detallado de las Instrucciones en la CPU
Antes de ver cómo la CPU ejecuta los programas, ayudaría a conocer (en detalle) cómo las micro
instrucciones operan en el interior de la CPU, realizando el trabajo fundamental y ejecutando estos pasos
diminutos para lograr una instrucción deseada. Como se verá, se ejecutan rápidamente muchos pasos pequeños y
con precisión dentro de cada instrucción, pero ninguno de los pasos pequeños es demasiado complicado.
La circuitería lógica dentro de la CPU parece sencilla para un ingeniero de diseño acostumbrado a
trabajar con lógica TTL o incluso con lógica de relés. Pero para realizar una MCU resultaría un circuito muy
grande. Con las técnicas de muy alta integración (VLSI = Very Large Scale Integration) se ha hecho posible
encajar el equivalente a miles de circuitos integrados TTL en un sencillo chip de silicio. Poner en orden estas
puertas lógicas, para formar una CPU, puede ser muy complejo y lo mejor es entender la CPU como caja negra
y dedicarse a programar. Poniendo combinaciones de diferentes instrucciones en el dispositivo, se puede realiza
virtualmente cualquier función definible.
Una instrucción típica necesita de dos a cinco ciclos del reloj interno del procesador. Aunque no es
normalmente importante saber exactamente que pasa durante cada uno de éstos ciclos de ejecución, ayudará
mucho, ir en detalle a través de unas cuantas instrucciones, para entender cómo trabaja internamente la CPU.
Guardar en el Acumulador (Modo de Direccionamiento Directo)
Buscando la instrucción STA en el capítulo Juego de Instrucciones , en la tabla se puede ver que $B7
es el modo de direccionamiento directo (DIR) de la instrucción 'guardar en el acumulador'. También se puede
ver que la instrucción requiere dos bytes, uno para especificar el 'opcode' ($B7) y el segundo para especificar la
dirección directa donde será guardado el acumulador. (Los dos bytes se muestran como B7 dd en la columna de
código máquina de la tabla.)
Los modos de direccionamiento se verán en más detalle en otro capítulo, pero la siguiente descripción
ayudará a entender cómo la CPU ejecuta esta instrucción. En el modo de direccionamiento directo, la CPU
asume que la dirección está en el rango de $0000 a $00FF; así que no se necesita incluir el byte superior de la
dirección del operando en la instrucción (siempre es $00).
En la misma tabla STA muestra que el modo de direccionamiento directo de la instrucción STA
necesita cuatro ciclos de reloj de la CPU. Durante el primer ciclo, la CPU pone el valor del contador de
programa en el bus de direcciones interno y lee el 'opcode' $B7, qué identifica la instrucción como de
direccionamiento directo de la instrucción STA y avanza el PC a la siguiente posición de memoria.
Durante el segundo ciclo, la CPU pone el valor del PC en el bus de direcciones interno y lee el byte de
la parte baja de la dirección directa (por ejemplo $00). La CPU usa el tercer ciclo de esta instrucción STA para
construir internamente la dirección completa donde el acumulador será guardado y avanza el PC para apuntar a
la siguiente dirección de memoria (la dirección del 'opcode' de la siguiente instrucción).
En este ejemplo, la CPU añade el valor asumido $00 (debido al modo de direccionamiento directo) al
$00 que leyó durante el segundo ciclo de la instrucción, para llegar a la dirección completa $0000. Durante el
cuarto ciclo de esta instrucción, la CPU pone esta dirección construida ($0000) en el bus de direcciones interno,
una vez puesto el valor del acumulador en el bus de datos interno, se declara la señal 'write' (escribe). Es decir,
la CPU escribe los contenidos del acumulador a $0000 durante el cuarto ciclo de la instrucción STA.
Mientras que el acumulador es guardado, los bits N y Z del registro de código de condición estarán a 1 o
0, según los datos que se guardaron. La formula lógica Booleana o resultado de estos bits para una instrucción
determinada aparece en una columna del juego de instrucciones. El bit Z se pondrá a 1, si el valor guardado fue
$00; por otro lado, el bit Z se pondrá a 0. El bit N se pondrá a 1, si el bit más significativo del valor guardado fue
1; por otro lado, el bit N se pondrá a 0.
38