Half-carry flag

De la Viquipèdia, l'enciclopèdia lliure
Genersació del bit CARRY : exemple senzill d'unitat lògica aritmètica (ALU) que fa AND, OR, XOR i suma.

Una bandera de mig transport (també coneguda com a bandera auxiliar ) és un bit de senyal de condició al registre d'estat de moltes famílies de CPU, com ara l'Intel 8080, Zilog Z80, el x86,[1] i la sèrie Atmel AVR, entre d'altres. Indica quan s'ha generat un acarreament o un préstec dels quatre bits menys significatius del registre acumulador després de l'execució d'una instrucció aritmètica. S'utilitza principalment en instruccions aritmètiques decimals (BCD).

Ús

Normalment, un processador que utilitza aritmètica binària (que inclou gairebé totes les CPU modernes) afegirà dos valors de bytes de 8 bits segons les regles de l'addició binària simple. Per exemple, sumant 25 16 i 48 16 es produeix 6D 16. No obstant això, per als valors decimals codificats en binari (BCD), on cada mordisco de 4 bits representa un dígit decimal, la suma és més complicada. Per exemple, afegint el valor decimal 25 i 48, que estan codificats com els valors BCD 25 16 i 48 16, l'addició binària dels dos valors produeix 6D 16. Atès que el mordisc inferior d'aquest valor és un dígit no decimal (D), s'ha d'ajustar afegint 06 16 per produir el resultat BCD correcte de 73 16, que representa el valor decimal 73.

0010 0101 25

+ 0100 1000 48

-----------

0110 1101 6D, resultat intermedi

+ 0110 06, ajust

----------- 0111 0011 73, resultat ajustat

De la mateixa manera, sumant els valors BCD 39 16 i 48 16 es produeix 81 16. Aquest resultat no té un mordisco baix no decimal, però provoca una realització del dígit menys significatiu (quatre bits inferiors) al dígit més significatiu (quatre bits superiors). Això s'indica quan la CPU estableix la bandera de mig transport. Aquest valor també s'ha de corregir, sumant 06 16 a 81 16 per produir un resultat BCD corregit de 87 16.

0011 1001 39

+ 0100 1000 48

-----------

1000 0001 81, resultat intermedi

+ 0110 06, ajust

-----------

1000 0111 87, resultat ajustat

Finalment, si una suma dóna com a resultat un dígit alt no decimal, cal afegir 60 16 al valor per produir el resultat BCD correcte. Per exemple, sumant 72 16 i 73 16 es produeix E5 16. Com que el dígit més significatiu d'aquesta suma no és decimal (E), sumant-hi 60 16 produeix un resultat BCD corregit de 145 16. (Tingueu en compte que l'1 dígit inicial és en realitat un bit de transport).

0111 0010 72

+ 0111 0011 73

-----------

1110 0101 E5, resultat intermedi

+ 0110 60, ajust

-----------

1 0100 0101 145, resultat ajustat

En resum, si el resultat d'una addició binària conté un dígit baix no decimal o fa que s'estableixi la bandera de mig transport, el resultat s'ha de corregir afegint-hi 06 16 ; si el resultat conté un dígit alt no decimal, el resultat s'ha de corregir encara més afegint 60 16 per produir el valor BCD final correcte.

La bandera de carry auxiliar en x86[modifica]

Registre d'estat de la CPU Intel
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (posició de bits)
- - - - O D jo T S Z - A - P - C Banderes

La bandera de transport auxiliar (AF) és una bandera de CPU al registre FLAGS de totes les CPU compatibles amb x86,[2] i la família 8080 anterior. Ocasionalment, Intel l'ha anomenat Adjust Flag.[3] El bit de bandera es troba a la posició 4 al registre de bandera de la CPU. Indica quan s'ha generat un acarreament aritmètic o un préstec a partir dels quatre bits menys significatius, o un mordisc inferior. S'utilitza principalment per donar suport a l'aritmètica decimal codificat binari (BCD).

El senyalador Auxiliary Carry s'estableix (a 1) si durant una operació d'"afegir" hi ha un acarreament des del petit nibble (els quatre bits més baixos) al més alt (els quatre bits superiors), o un préstec del nibble alt al baix. mossegar, a la part de baix ordre de 8 bits, durant una resta. En cas contrari, si no es produeix aquest tipus de transport o préstec, la bandera s'esborra o es "restableix" (establert a 0).[4]

Referències[modifica]

  1. «Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual» (PDF) (en anglès). [Consulta: 29 maig 2013].
  2. Intel 64 and IA-32 Architectures Software Developer’s Manual, Vol. 1 (en anglès), Dec 2022, p. 3-16. 
  3. Pentium Pro Family Developer's Manual: Volume 2 (en anglès), gener 1996, p. 3-11. 
  4. «The 8086 Family User Manual» (en anglès). Intel. [Consulta: 2 juliol 2020].