CAPÍTULO 3 LAS BANDERAS Y EL REGISTRO DE ESTADO

Se puede imaginar cada una de las banderas o bits de estado de la máquina como si éstos fueran flip-flops individuales. La bandera de Acarreo puede ser considerada el noveno bit de una operación aritmética. la bandera de modo Decimal es establecida en 1 y borrado por el usuario y es utilizado por el microprocesador para seleccionar entre el modo de operación Binario o Decimal. Para facilitar la programación, el microprocesador trata todas las banderas o bits de estado como bits componentes de un sólo registro de 8 bits.
En la Figura 3.1, se añade al diagrama de bloques el registro de Estado del Procesador (o registro «P»).



Cada uno de los indicadores o bits individuales tiene su propio significado particular en el microprocesador, tal como se define en la Figura 3.2.


3.0 LA BANDERA DE ACARREO ( C )


Ya hemos visto que el bit de acarreo puede ser modificado como resultado de la ejecución de operaciones aritméticas específicas, o por la ejecución de un comando de que establezca o borre la bandera de Acarreo. En el caso de las instrucciones de desplazamiento (LSR, ASL) y rotación (ROL, ROR), el bit de acarreo es utilizado como un noveno bit, ya que forma parte de la operación aritmética. El programador puede establecer o borrar la bandera de Acarreo. La instrucción SEC establece la bandera de Acarreo en 1, y la instrucción CLC la borrará. Las operaciones que alteran el valor del bit de acarreo son ADC, ASL, CLC, CMP, CPX, CPY, LSR, PLP, ROL, RTI, SBC y SEC.



3.0.1 SEC-Puesta a 1 de la Bandera de Acarreo


Esta instrucción establece la bandera de Acarreo en 1. Esta operación normalmente precede a un bucle de restas (SBC). También es útil cuando se usa en conjunto con la instrucción ROL para establecer en 1 un bit de la Memoria.
Esta instrucción no afecta ningún registro del microprocesador ni a ninguna otra bandera excepto la de Acarreo, que es la que establece este comando.
SEC es una instrucción de un sólo byte y su modo de direccionamiento es Implícito.



3.0.2 CLC-Puesta a 0 de la Bandera de Acarreo


Esta instrucción borra la bandera de Acarreo, es decir, la establece en 0. Esta operación normalmente precede a un bucle de sumas (ADC). También es útil cuando se usa en conjunto con la instrucción ROL para borrar un bit de la Memoria.
Esta instrucción no afecta ningún registro del microprocesador ni a ninguna otra excepto la bandera de Acarreo, que es la que borra este comando.
CLC es una instrucción de un sólo byte y su modo de direccionamiento es Implícito.

3.1 LA BANDERA CERO (Z)


Esta bandera es establecida automáticamente por el microprocesador, durante cualquier operación de movimiento o cálculo, cuando los 8 bits del resultado de la operación son 0. Por lo tanto, este bit está encendido («1») cuando el resultado es igual a 0, y apagado («0») cuando el resultado es distinto de 0.
Esta característica de la máquina es similar a la del PDP-11, en el sentido de que las operaciones que decrementan registros índice (X, Y) o posiciones de Memoria tienen una prueba incorporada para determinar si se decrementó o no hasta llegar a 0. A diferencia de los procesadores que tienen que hacer una instrucción de prueba seguida de un salto, en los procesadores de la familia MCS650X es posible consultar la condición igual a 0 inmediatamente después de la carga o de otras operaciones lógicas. La bandera Z no se puede establecer o borrar directamente mediante la ejecución de una instrucción, pero su valor puede ser alterado por las siguientes instrucciones: ADC, AND, ASL, BIT, CMP, CPY, CPX, DEC, DEX, DEY, EOR, INC, INX, INY, LDA, LDX, LDY, LSR, ORA, PLA, PLP, ROL, RTI, SBC, IMPUESTOS, TAY, TXA y TYA.

3.2 LA BANDERA DE DESACTIVACIÓN DE LA INTERRUPCIÓN (I)


La bandera «Desactivación de la Interrupción» es un flip-flop utilizado por el programador y por el microprocesador para controlar las operaciones del pin2 «Solicitud de Interrupción» del microprocesador (pin 4 de la familia MSC650X: #IRQ – Interrupt ReQuest). Una discusión más detallada de los efectos de la desactivación de la interrupción se da en la sección Control de la Interrupción. De todas maneras, el propósito de la bandera «Desactivación de la Interrupción» es justamente desactivar los efectos del pin «Solicitud de Interrupción». La bandera de «Desactivación de la Interrupción» es establecida en 1 por el microprocesador durante los comandos de reinicio e interrupción. La bandera I se borra mediante la ejecución de la instrucción CLI o PLP, o en el retorno de una interrupción en la que la bandera «Desactivación de la Interrupción» fue borrada previamente. La bandera «Desactivación de la Interrupción» es establecida en 1 por el programador usando la instrucción SEI y es borrada usando la instrucción CLI. Las instrucciones que afectan a la bandera «Desactivación de la Interrupción» son BRK, CLI, PLP, RTI y SEI.


2 Pin se refiere a la patilla del chip o circuito integrado. (N. del T.)



3.2.1 SEI-Puesta a 1 de la Desactivación de la Interrupción


Esta instrucción establece la bandera «Desactivación de la Interrupción». Se utiliza para enmascarar las solicitudes de interrupción durante las operaciones de reinicio del sistema y durante los comandos de interrupción.
No afecta a ningún registro ni bandera del microprocesador, excepto la bandera «Desactivación de la Interrupción», que es la que establece este comando.
SEI es una instrucción de un sólo byte y su modo de direccionamiento es Implícito.



3.2.2 CLI-Puesta a 0 de la Desactivación de la Interrupción


Esta instrucción borra la bandera «Desactivación de la Interrupción». Esto permite que el microprocesador reciba las interrupciones en el pin #IRQ.
No afecta a ningún registro ni bandera del microprocesador, excepto la bandera «Desactivación de la Interrupción», que es la que borra este comando.
CLI es una instrucción de un sólo byte y su modo de direccionamiento es Implícito.

3.3 LA BANDERA DE MODO DECIMAL (D)


Como se discutió anteriormente, la bandera de modo Decimal sirve para indicarle al sumador si debe operar, en el caso de instrucciones de suma y resta, como un sumador binario directo o bien como un sumador decimal. La instrucción SED establece la bandera en 1 y CLD la borra. Las únicas instrucciones que afectan la bandera de modo Decimal son CLD, PLP, RTI y SED.



3.3.1 SED-Puesta en Modo Decimal


Esta instrucción establece en 1 la bandera de modo Decimal «D». Esto hace que todas las instrucciones ADC y SBC que vienen a continuación, se comporten como una operación aritmética decimal. SED no afecta los registros del microprocesador ni las banderas, excepto la bandera modo Decimal, que es la que establece este comando.



3.3.2 CLD-Puesta a 0 del Modo Decimal


Esta instrucción establece en 0 la bandera de modo Decimal «D». Esto hace que todas las instrucciones ADC y SBC que vienen a continuación, se comporten como una operación aritmética binaria simple. CLD no afecta los registros del microprocesador ni las banderas, excepto la bandera modo Decimal, que es la que borra este comando.

3.4 LA BANDERA DEL COMANDO BREAK (B)


La bandera «Comando BREAK» (Ruptura) es establecida exclusivamente por el microprocesador y se usa para determinar si, durante una secuencia de servicio de una interrupción, esta fue causada por el comando BRK o por una interrupción real. Puede encontrar una discusión más detallada del comando BRK en la sección Interrupción. Este bit sólo tiene significado durante el análisis de una secuencia de interrupción normal.
No hay instrucciones que puedan establecer o restablecer este bit.

3.5 EL BIT DE EXPANSIÓN


El siguiente bit en el registro de banderas es un bit sin uso. Es muy probable que este bit parezca estar encendido cuando se analiza el patrón de bits del registro de estado del procesador; sin embargo, no se garantiza su estado, ya que este bit se utilizará en versiones futuras del microprocesador.

3.6 LA BANDERA DE DESBORDAMIENTO (V)


Como se discutió en la sección sobre operaciones aritméticas, si uno trata las operaciones aritméticas binarias como operaciones binarias con signo, se debe tener alguna señal que nos indique si el resultado de la operación aritmética tiene un valor mayor del que pueden almacenar los 7 bits del resultado. Esta señal es el bit de Desbordamiento, que durante las instrucciones ADC y SBC representa un estado de desbordamiento en la posición del signo. El usuario que no necesite usar aritmética con signos puede ignorar completamente esta bandera durante su programación; sin embargo, para el usuario que está utilizando números binarios con signo, esta bandera tiene el mismo significado que la bandera de Acarreo. Si este bit es establecido en 1 como resultado de una suma o resta utilizando números con signo, esto indica que se debe llamar a una rutina de corrección.
Además de su uso para monitorear la validez del bit de signo en instrucciones ADC y SBC, vale la pena comentar que la bandera de Desbordamiento en los productos de la familia MCS650X es dramáticamente distinta a la del PDP-11 y el MC6800. En esos sistemas, la bandera de Desbordamiento es controlada con mucho cuidado para permitir ciertas bifurcaciones (branches) basados en el signo del número a analizar. Estos saltos han sido eliminados de la serie MCS6500 debido a la confusión y dificultad a menudo asociadas con su uso, y, por lo tanto, la bandera de Desbordamiento es aplicable sólo a las operaciones ADC y SBC, y sólo cuando se usan números con signo.
Sin embargo, para maximizar la efectividad de esta bandera, la instrucción BIT, que puede usarse para muestrear (sample) dispositivos de interfaz, le permite a la bandera de Desbordamiento reflejar la condición del bit 6 en el campo muestreado. Durante una instrucción BIT, la bandera de Desbordamiento se establece igual al contenido del bit 6 en los datos que están siendo probados con la instrucción BIT. Cuando se utiliza de esta manera, el desbordamiento no tiene nada que ver con la aritmética con signos, sino que es sólo otro bit con sentido para el microprocesador. Las instrucciones que afectan a la bandera V son ADC, BIT, CLV, PLP, RTI y SBC. En ciertas versiones del microprocesador, el bit V también estará disponible para señales del mundo exterior.



3.6.1 CLV-Puesta a 0 de la Bandera de Desbordamiento


Esta instrucción borra la bandera de Desbordamiento. Este comando se usa en conjunto con el pin «SO» (Set Overflow) del microprocesador (pin 38), la que puede cambiar el estado de la bandera de Desbordamiento por medio del uso de una señal externa.
CLV no afecta los registros del microprocesador ni las banderas, excepto la bandera de Desbordamiento, que es la que borra este comando.


3.6.2 Determinación del Desbordamiento


Para recapitular brevemente este concepto, se debe entender que la máquina identifica un desbordamiento basado en los datos ingresados a una operación y el resultado final. Dado que en la aritmética con signos el rango de números que se pueden representar va de +127 a -128, la bandera de Desbordamiento nunca se establecerá cuando números de signo contrario sean sumados, ya que su resultado nunca excederá ese rango. La máquina se ocupa de esto reconociendo que para dos números positivos cualesquiera, el «bit 7» de cada uno de ellos es un «0» y que para cualquier operación aritmética que entregue un resultado menor o igual a +127, el «bit 7» resultante debe ser un «0». Si es un 1, se establece en 1 la bandera de Desbordamiento.
De manera similar, cuando se suman dos números negativos, el «bit 7» de cada uno de ellos es un «1», y para cualquier resultado que arroje un valor menor o igual a -128, el «bit 7» resultante debe ser un «1». Si es un 0, se establece en 1 la bandera de Desbordamiento.
Por lo tanto, al comprobar el «bit 7» de cada uno de los números a sumar, la máquina puede saber de antemano, en una situación sin desbordamiento, cuál debe ser el «bit 7» resultante. Si no se cumplen estas condiciones, la bandera de Desbordamiento se establece en 1.

3.7 LA BANDERA NEGATIVO (N)


Como ya se discutió anteriormente, uno de los usos del microprocesador es la realización de operaciones aritméticas con números con signo. Para permitir que el usuario pueda comprobar de manera fácil el estado del bit de signo (bit 7), en todo movimiento de datos y aritmética de datos se establece que la bandera N sea igual al bit 7 del valor resultante. Esto significa, por ejemplo, que después de una suma con signos se pueda determinar el signo del resultado mediante la comprobación directa de la bandera N, en vez de encontrar una forma de aislar el bit 7. Aunque los signos fueron el propósito principal por el cual la bandera N fue pensada, su utilidad supera con creces la de ser solamente un bit de signo.
Debido a que todas las operaciones incluyen movimientos simples y operaciones de suma, el bit N es igual al estado del bit 7 como resultado de la operación; su uso primario se debe a que es un bit fácilmente comprobable. Casi todas las instrucciones de un sólo bit, todas las interrupciones y todos los indicadores de estado de E/S utilizan el bit 7 como bit de detección.
Esto permite al usuario realizar algún tipo de operación de acceso a memoria, como LDA seguida de una bifurcación condicional inmediata basada en el estado de bit 7, tal como se refleja en la bandera N. Al igual que el bit Z, esta bandera no puede ser configurada o controlada por el programador y representa el estado de la última operación de movimiento de datos. Las instrucciones que afectan a la bandera Negativa son ADC, Y, ASL, BIT, CMP, CPY, CPX, DEC, DEX, DEY, EOR, INC, INX, INY, LDA, LDX, LDY, LSR, ORA, PLA, PLP, ROL, BIT, SBC, TAX, TAY, TSX, TXA y TYA.

3.8 RESUMEN DE LAS BANDERAS


En resumen, el microprocesador trata una serie de banderas o bits de estado como un único registro denominado registro «P» o de «Estado del programa». Algunas de estas banderas son controlables sólo por el programador (como la bandera D); otras son controlables tanto por el programa de usuario como por el microprocesador (como la bandera de Desactivación de la Interrupción).
Algunas son establecidas y borradas por casi todas las operaciones del procesador, como las banderas N y Z. Cada una de estas banderas tiene su propio significado para el programador en un momento determinado.
Cuando se combinan con el concepto de saltos condicionales, representan una poderosa capacidad de prueba y salto que normalmente no se encuentra en una máquina de esta magnitud. Aparte de quizás la bandera de Acarreo, que se utiliza como parte de las instrucciones aritméticas, las banderas por sí mismas tienen relativamente poco significado a menos que uno tenga la capacidad de comprobarlas. Para este propósito, se tiene una serie de instrucciones de salto condicional diseñadas en la máquina.