Hilfsübertragsflag
# Hilfsübertragsflag

Das Hilfsübertragsflag, auch Auxiliary-Carry-Flag (kurz: AF) ist ein Begriff aus der Informatik. Dieses Flag des Statusregisters wird gesetzt (AF:=1), wenn bei einer Rechenoperation im unteren Halbbyte ein Überlauf stattgefunden hat. Andernfalls wird es gelöscht (AF:=0).

## Gebrauch

Das Hilfsübertragsflag wird bei Rechenoperationen im BCD-Format genutzt, um einen möglichen Stellenüberlauf anzuzeigen.
Bei einer binären Addition oder Subtraktion von dualkodierten Dezimalziffern (BCD-Format), zeichnet sich ein Überlauf durch zwei Möglichkeiten aus:
* Die unteren 4 Bit des Ergebnisses repräsentieren keine gültige Ziffer im BCD-Format. (1010$_2$,1011$_2$,1100$_2$,1101$_2$,1110$_2$,1111$_2$).
* Ein Überlauf von den unteren 4 Bit zu den oberen 4 Bit hat während der Rechenoperation stattgefunden. (Das Auxiliary-Carry-Flag wurde gesetzt, AF=1.)
Die Maschinenbefehle AAA (ASCII Adjust After Addition) und AAS (ASCII Adjust AL After Subtraction) reagieren auf das Auxiliary-Carry-Flag.
In beiden Fällen korrigieren die Befehle AAA und AAS die unteren 4 Bit des (AL-)Registers und setzen das Carry-Flag (CF:=1) für weiterführende Berechnungen.
AAA und AAS betrachten nur die unteren 4 Bit des (AL-)Registers und löschen die oberen 4 Bit. So können in das (AL-)Register anstelle der korrekten BCD-kodierten Ziffern auch die entsprechenden ASCII-Zeichen '0'–'9' geladen werden, welche in den oberen Bits die Signatur 011$_2$ haben.

## Beispiele

Addition 5 + 8 (Das Hilfsübertragsflag wird bei dieser Addition nicht gesetzt.)
MOV AL, 05h ; Lade die Zahl 5 ins AL-Register
ADD AL, 08h ; Addiere die Zahl 8 hinzu, AL=13
    ⇒ AF:=0, da kein Überlauf im Halbbyte auftrat.
AAA ; Die Zahl 13 im AL-Register ist größer als 9, also gab es einen BCD-Überlauf.
    Das Ergebnis wird korrigiert (AL:=3) und das Carry-Flag gesetzt (CF=1).
Addition 8 + 9 (Das Hilfsübertragsflag wird bei dieser Addition gesetzt.)
MOV AL, 08h ; Lade die Zahl 8 ins AL-Register
ADD AL, 09h ; Addiere die Zahl 9 hinzu, AL=17
    ⇒ Überlauf im Halbbyte: AF:=1
AAA ; Da das Auxiliary-Carry-Flag (AF=1) gesetzt ist, wird das Ergebnis korrigiert (AL:=7).
    Der Überlauf wird jetzt durch das Carry-Flag markiert (CF=1).
Hinweis: Die benutzen Maschinenbefehle stammen aus der IA-32