M68k Assembler ADDX/BCC

Hallo Experten!

Beim Portieren eines Motorola 68000 Assembler Programms (nach C) bin ich auf folgende Anweisung gestossen, die mich vor ein Rätsel stellt:

addx.b d1,d1
bcc.s label

Wie lässt sich das in eine IF-Anweisung übersetzen? Dies stammt aus einer Dekomprimierungsroutine, die sonst nur mit vorzeichenlosen Bytes arbeitet, d.h. ich habe d1 als „unsigned char“ deklariert. Dies ist die einzige Stelle im Programm, an der addx benutzt wird.

Kann mir jemand helfen?

Beim Portieren eines Motorola 68000 Assembler Programms (nach
C) bin ich auf folgende Anweisung gestossen, die mich vor ein
Rätsel stellt:

addx.b d1,d1
bcc.s label

ADDX – Addition mit Benutzen des X-Flags
Funktioniert wie der ADD-Befehl, nur daß zusätzlich noch der Wert des X-Flags addiert wird. Wichtig für alle Befehle, die in Abhängigkeit vom Auftreten eines Carries verschiedene Ergebnisse liefern (z.B. die Addition von >32-Bit Zahlen).

Funktion: D := S + X-Flag + D

Flag Wert der Flags
X entsprechend dem Ergebnis
N entsprechend dem Ergebnis
Z Z * -Rm * … * -R0
V (Sm * Dm * -Rm) + (-Sm * -Dm * Rm)
C (Sm * Dm) + (-Rm * Dm) + (-Rm * Sm)

Gruß
Tilo

Funktion: D := S + X-Flag + D

Was heißt das aber im Fall von addx.b(yte)? Überall liest man nur was von Zahlen größer als 32bit. Hier geht’s aber nur um einen 8bit Wert und das X-Flag ist VOR der Operation immer gelöscht. Scheinbar soll hier nur das Carry-Flag beeinflusst werden, um es NACH der Operation zu testen.

Ich bin verwirrt…

Trotzdem Danke an Tilo für die schnelle Antwort!