stringtranslate.com

Llevar bandera

En los procesadores de ordenador, el indicador de acarreo (normalmente indicado como indicador C ) es un bit único en un registro de estado del sistema /registro de indicadores utilizado para indicar cuándo se ha generado un acarreo o un préstamo aritmético a partir de la posición de bit de la unidad lógica aritmética (ALU) más significativa . El indicador de acarreo permite sumar o restar números mayores que el ancho de una ALU al llevar (sumar) un dígito binario desde una suma o 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 ocurrir 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 amplios que las ALU (combinatorias o "físicas"). [1] También se utiliza para ampliar los desplazamientos de bits y las rotaciones de manera similar en muchos procesadores (a veces se hace a través de un indicador dedicado). Para las operaciones sustractivas, se emplean dos convenciones (opuestas), ya que la mayoría de las máquinas activan el indicador de acarreo al tomar prestado, mientras que algunas máquinas (como la 6502 y la PIC ) en cambio restablecen el indicador de acarreo al tomar prestado (y viceversa).

Usos

El indicador de acarreo se ve afectado por el resultado de la mayoría de las instrucciones aritméticas (y, por lo general, de varias instrucciones de 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 se representan mediante mnemónicos como ADD/SUB, ADC/SBC( ADD/SUBincluyendo acarreo), SHL/SHR( desplazamientos de bits ), ROL/ROR(rotación de bits), RCR/RCL(rotación mediante acarreo), etc. [2] El uso del indicador de acarreo de esta manera permite operaciones de suma, resta, desplazamiento y rotación de varias palabras .

Un ejemplo es lo que sucede si uno suma 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 que siempre se almacenan en el registro serían 11111110binarios (254 decimal), pero como hay un acarreo del bit 7 (el octavo bit), 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 de 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 el 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 de 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 se encuentra en Carry_Flag, por lo que no se puede ignorar. Se ignoran Overflow_Flagy .Sign_Flag

Otro ejemplo puede ser un registro de 8 bits con el patrón de bits 01010101y el indicador de acarreo establecidos; si ejecutamos una instrucción de rotación a la izquierda a través del acarreo , el resultado sería 10101011con el indicador de acarreo borrado porque el bit más significativo (bit 7) fue rotado al acarreo mientras que el acarreo fue rotado al bit menos significativo (bit 0).

Los primeros microprocesadores Intel 4004 e Intel 8008 tenían instrucciones específicas para establecer y restablecer explícitamente el indicador de acarreo. Sin embargo, los posteriores Intel 8080 (y Z80 ) no incluían un código de operación de restablecimiento explícito del acarreo, ya que esto se podía hacer con la misma rapidez mediante una de las instrucciones AND, OR o XOR bit a bit (que no utilizan el indicador de acarreo).

El indicador de acarreo también se utiliza a menudo después de instrucciones de comparación, que normalmente se implementan mediante operaciones sustractivas, para permitir que se tome una decisión sobre cuál de los dos valores comparados es menor que (o mayor o igual que) el otro. Las instrucciones de bifurcación que examinan el indicador de acarreo suelen estar representadas por mnemónicos como BCCy BCSpara bifurcar si el acarreo está libre, o bifurcar si el acarreo está establecido respectivamente. Cuando se utiliza de esta manera, el indicador de acarreo proporciona un mecanismo para comparar los valores como números enteros sin signo. Esto contrasta con el indicador de desbordamiento que proporciona un mecanismo para comparar los valores como valores enteros con signo.

Vs. tomar prestada la bandera

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

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

El segundo utiliza 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 adición, y restar con acarreo calcula a +no( 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é establecido antes de cada operación de resta donde no se requiere un préstamo. [4]

Lo más común es que la primera alternativa se denomine "restar con préstamo", mientras que la segunda se denomina "restar 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 denominan a su operación abCSBWC "restar con acarreo" ( , SUBCy SBC). Las arquitecturas PA-RISC y PICmicro utilizan la convención de bits de acarreo, pero denominan a su operación a +not( b )+ C "restar con préstamo" ( SUBBy 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 "restar 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 de "acarreo", mientras que los procesadores ST62 y ST63 utilizan la convención de "tomar prestado". [5]

Véase 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 del IBM System/360 (PDF) . pág. 28. Formulario IBM A22-6821-0.
  4. ^ Tan, BTG (mayo de 1983). "Instrucciones SBC, TSX y TXS de los 6800 y 6502" (PDF) . Dr. Dobb's Journal (79): 67–68.
  5. ^ "Manual de programación de la familia ST6" (PDF) . Revisión 2.0. STMicroelectronics . Octubre de 2004. págs. 21–22, 42. Consultado el 28 de febrero de 2017 .

Enlaces externos