Half-carry flagga
En halvbärande flagga (även känd som en hjälpflagga ) är en tillståndsflaggabit i statusregistret för många CPU- familjer, såsom Intel 8080 , Zilog Z80 , x86 , och Atmel AVR- serien, bland andra. Den indikerar när en överföring eller ett lån har genererats från de minst signifikanta fyra bitarna i ackumulatorregistret efter exekveringen av en aritmetisk instruktion. Det används främst i decimala ( BCD ) aritmetiska instruktioner.
Användande
Normalt kommer en processor som använder binär aritmetik (som inkluderar nästan alla moderna processorer) att lägga till två 8-bitars bytevärden enligt reglerna för enkel binär addition. Till exempel, att lägga till 25 16 och 48 16 ger 6D 16 . Men för binärkodade decimalvärden (BCD), där varje 4-bitars nibble representerar en decimalsiffra, är addition mer komplicerad. Om man till exempel adderar decimalvärdet 25 och 48, som är kodade som BCD-värdena 25 16 och 48 16 , ger den binära additionen av de två värdena 6D 16 . Eftersom den nedre biten av detta värde är en icke-decimal siffra (D), måste den justeras genom att lägga till 06 16 för att producera det korrekta BCD-resultatet av 73 16 , som representerar decimalvärdet 73.
0010 0101 25 + 0100 1000 48 ---------- 0110 1101 6D , mellanresultat + 0110 06, justering ---------- 0111 0011 73 , justerat resultat
På samma sätt ger addering av BCD-värdena 39 16 och 48 16 81 16 . Detta resultat har inte en icke-decimal låg nibble, men det orsakar en överföring av den minst signifikanta siffran (nedre fyra bitarna) till den mest signifikanta siffran (övre fyra bitarna). Detta indikeras av att CPU:n ställer in halva bärflaggan. Detta värde måste också korrigeras genom att lägga till 06 16 till 81 16 för att få ett korrigerat BCD-resultat på 87 16 .
0011 1001 39 + 0100 1000 48 ---------- 1000 0001 81 , mellanresultat + 0110 06, justering ---------- 1000 0111 87 , justerat resultat
Slutligen, om en tillägg resulterar i en icke-decimal hög siffra, måste 60 16 läggas till värdet för att ge rätt BCD-resultat. Till exempel, att lägga till 72 16 och 73 16 ger E5 16 . Eftersom den mest signifikanta siffran i denna summa är icke-decimal (E), ger om man lägger till 60 16 ett korrigerat BCD-resultat på 145 16 . (Observera att den första siffran 1 faktiskt är en bärbit .)
0111 0010 72 + 0111 0011 73 ---------- 1110 0101 E5 , mellanresultat + 0110 60, justering ---------- 1 0100 0101 145 , justerat resultat
Sammanfattningsvis, om resultatet av en binär addition innehåller en icke-decimal låg siffra eller gör att halvbärarflaggan sätts, måste resultatet korrigeras genom att lägga till 06 16 till den; om resultatet innehåller en icke-decimal hög siffra, måste resultatet korrigeras ytterligare genom att lägga till 60 16 för att få fram det korrekta slutliga BCD-värdet.
Auxiliary Carry Flag i x86
|
Auxiliary Carry Flag (AF) är en CPU-flagga i FLAGS-registret för alla x86 -kompatibla CPU: er och den föregående 8080-familjen . Den har ibland kallats Adjust Flag av Intel. Flaggbiten är placerad vid position 4 i CPU-flaggregistret. Den indikerar när en aritmetisk överföring eller lån har genererats av de fyra minst signifikanta bitarna, eller lägre nibble. Det används främst för att stödja binärkodad decimal (BCD) aritmetik.
Auxiliary Carry-flaggan sätts (till 1) om det under en " lägg till "-operation sker en överföring från den låga nibblen (lägsta fyra bitarna) till den höga nibblen (övre fyra bitarna), eller ett lån från den höga nibblen till den låga knapra, i den låga ordningens 8-bitars del, under en subtraktion. Annars, om ingen sådan överföring eller lån inträffar, rensas flaggan eller "återställs" (ställs till 0).