stringtranslate.com

llevar bandera

En los procesadores de computadora, el indicador de acarreo (generalmente indicado como el indicador C ) es un bit único en un registro de estado del sistema /registro de indicador que se utiliza para indicar cuándo se ha generado un acarreo o préstamo aritmético a partir del bit de unidad lógica aritmética (ALU) más significativo. posición. La bandera de acarreo permite sumar/restar números mayores que un ancho de ALU único llevando (sumando) un dígito binario de una suma/resta parcial a la posición de bit menos significativa de una palabra más significativa. Esto normalmente lo programa el usuario del procesador en el nivel de código ensamblador o de máquina, pero también puede suceder internamente en ciertos procesadores, a través de lógica digital o microcódigo , donde algunos procesadores tienen registros e instrucciones aritméticas más amplias que las (combinatorias o "físicas"). ) ALU. [1] También se utiliza para extender los desplazamientos y rotaciones de bits de manera similar en muchos procesadores (a veces se realiza mediante un indicador dedicado). Para operaciones sustractivas, se emplean dos convenciones (opuestas), ya que la mayoría de las máquinas configuran el indicador de acarreo en préstamo, mientras que algunas máquinas (como la 6502 y la PIC ) restablecen el indicador de acarreo en préstamo (y viceversa).

Usos

El indicador de acarreo se ve afectado por el resultado de la mayoría de las instrucciones aritméticas (y normalmente de varios bits) y también se utiliza como entrada para muchas de ellas. Varias de estas instrucciones tienen dos formas que leen o ignoran el acarreo. En los lenguajes ensambladores, estas instrucciones están representadas por mnemónicos como ADD/SUB( incluido el acarreo), ( desplazamientos de bits ), (rotación de bits), (rotación mediante acarreo), etc. [2] El uso de la bandera de acarreo de esta manera permite operaciones de suma, resta, desplazamiento y rotación de varias palabras .ADC/SBCADD/SUBSHL/SHRROL/RORRCR/RCL

Un ejemplo es lo que sucede si se suman 255 y 255 usando registros de 8 bits . El resultado debería ser 510, que es el valor de 9 bits 111111110en binario. Los 8 bits menos significativos siempre almacenados en el registro serían 11111110binarios (254 decimales), pero como hay acarreo del bit 7 (el ocho bits), el acarreo se establece, lo que indica que el resultado necesita 9 bits. El resultado válido de 9 bits es la concatenación del indicador de acarreo con el resultado.

Para un tamaño de ALU x86 de 8 bits, una interpretación en complemento a dos de 8 bits, la operación de suma 11111111+ 11111111da como resultado 111111110, Carry_Flagestablecer, Sign_Flagestablecer y Overflow_Flagborrar.

Si 11111111representa un entero con signo en complemento a dos −1 ( ADD al,-1), entonces la interpretación del resultado es -2 porque Overflow_Flages clara y Carry_Flagse ignora. El signo del resultado es negativo porque Sign_Flagestá establecido. 11111110es la forma en complemento a dos del entero con signo −2.

Si 11111111representa el número binario entero sin signo 255 ( ADD al,255), entonces la interpretación del resultado sería 254, lo cual no es correcto, porque el bit más significativo del resultado entró en Carry_Flag, por lo que no se puede ignorar. El Overflow_Flagy el Sign_Flagson ignorados.

Otro ejemplo puede ser un registro de 8 bits con el patrón de bits 01010101y el indicador de acarreo establecidos; Si ejecutamos una rotación hacia la izquierda a través de la instrucción de acarreo, el resultado sería 10101011con la bandera de acarreo borrada porque el bit más significativo (bit 7) se rotó hacia el acarreo mientras que el acarreo se rotó hacia el bit menos significativo (bit 0).

Los primeros microprocesadores Intel 4004 e Intel 8008 tenían instrucciones específicas para configurar y restablecer explícitamente el indicador de acarreo. Sin embargo, el último Intel 8080 (y Z80 ) no incluía un código de operación de reinicio explícito, ya que esto se podía hacer igualmente rápido a través de una de las instrucciones bit a bit AND, OR o XOR (que no utilizan el indicador de acarreo).

El indicador de acarreo también se utiliza a menudo siguiendo instrucciones de comparación, que normalmente se implementan mediante operaciones sustractivas, para permitir tomar una decisión sobre cuál de los dos valores comparados es menor (o mayor o igual) que el otro. Las instrucciones de bifurcación que examinan la bandera de acarreo a menudo se representan mediante mnemotécnicos como BCCy BCSpara bifurcar si el acarreo está claro, o bifurcar si el acarreo está configurado, respectivamente. Cuando se usa de esta manera, el indicador de acarreo proporciona un mecanismo para comparar los valores como enteros sin signo. Esto contrasta con el indicador de desbordamiento que proporciona un mecanismo para comparar los valores como valores enteros con signo.

vs. pedir prestado bandera

Si bien el indicador de acarreo está bien definido para la suma, hay dos formas de uso común de utilizar el indicador de acarreo para operaciones de resta.

El primero utiliza el bit como indicador de préstamo, configurándolo si a < b al calcular ab y se debe realizar un préstamo. Si ab , el bit se borra. Una resta con la instrucción de préstamo ( SBB) calculará abC = a −( b + C ), mientras que una resta sin préstamo ( SUB) actúa como si el bit de préstamo estuviera limpio. Las familias 8080 , 6800 , Z80 , 8051 , x86 [2] y 68k (entre otras) utilizan un bit de préstamo.

El segundo usa la identidad que − x = ( no x )+1 directamente (es decir, sin almacenar el bit de acarreo invertido) y calcula ab como a +(no b )+1. El indicador de acarreo se establece de acuerdo con esta suma, y ​​restar con acarreo calcula a +not( b )+ C , mientras que restar sin acarreo actúa como si el bit de acarreo estuviera establecido. El resultado es que el bit de acarreo se establece si ab y se borra si a < b . Los procesadores System/360 , [3] 6502 , MSP430 , COP8 , ARM y PowerPC utilizan esta convención. El 6502 es un ejemplo particularmente conocido porque no tiene una operación de resta sin acarreo, por lo que los programadores deben asegurarse de que el indicador de acarreo esté configurado antes de cada operación de resta donde no se requiere un préstamo. [4]

Más comúnmente, la primera alternativa se denomina "resta con préstamo", mientras que la segunda se denomina "resta con acarreo". Sin embargo, existen excepciones en ambas direcciones; Las arquitecturas VAX , NS320xx y Atmel AVR utilizan la convención de bits de préstamo, pero llaman a su operación abCSBWC "resta con acarreo" ( , SUBCy SBC). Las arquitecturas PA-RISC y PICmicro utilizan la convención de bits de acarreo, pero llaman a su operación a +not( b )+ CSUBB "resta con préstamo" ( y SUBWFB).

Los microcontroladores ST6 de 8 bits son quizás los más confusos de todos. Aunque no tienen ningún tipo de instrucción de "resta con acarreo", sí tienen un bit de acarreo que se establece mediante una instrucción de resta, y la convención depende del modelo de procesador. El procesador ST60 utiliza la convención "carry", mientras que los procesadores ST62 y ST63 utilizan la convención "préstamo". [5]

Ver también

Referencias

  1. ^ Los conocidos Z80 y 68000 son ejemplos de este tipo de CPU, entre muchos otros.
  2. ^ ab "Manual del desarrollador de software de arquitectura Intel, volumen 2: manual de referencia del conjunto de instrucciones" (PDF) . Consultado el 25 de octubre de 2007 .
  3. ^ Principios de funcionamiento de IBM System/360 (PDF) . pag. 28. Formulario IBM A22-6821-0.
  4. ^ Tan, BTG (mayo de 1983). «Instrucciones SBC, TSX y TXS del 6800 y 6502» (PDF) . Diario del Dr. Dobb (79): 67–68.
  5. ^ "Manual de programación familiar ST6" (PDF) . Revisión 2.0. STMicroelectrónica . Octubre de 2004. págs. 21-22, 42 . Consultado el 28 de febrero de 2017 .

enlaces externos