Was bedeuten die Flag-Formel-Symbole in AVR-Assembler-Dokumentationen

Ich habe etwas in den Assembler-Dokumentationen des AVR-Mikrocontrollers gelesen und stoße normalerweise auf eine Zeile, die beschreibt, wie sich ein Befehl auf ein bestimmtes Flag im Statusregister auswirkt.

Nehmen wir ein Beispiel von der ADD-Anweisungsseite

H:
Rd3 • Rr3 + Rr3 • R3 ¯ + R3 ¯ • Rd3
gesetzt, wenn es einen Übertrag von Bit 3 gab; anderweitig gelöscht

In dieser Zeile
Rd3 • Rr3 + Rr3 • R3 ¯ + R3 ¯ • Rd3
Wie kann ich diese Zeile lesen, was bedeuten diese Symbole?

Antworten (1)

Zunächst einmal leiden die Formeln unter einem Tippfehler in dieser HTML-Version der Dokumente (das PDF nicht). Die Formel, die Sie zitieren, sollte lauten:

R D 3 R R 3 + R R 3 R 3 ¯ + R 3 ¯ R D 3

In dieser Formel gibt es drei Werte. R D ist der aktuelle Wert des Zielregisters, R R der aktuelle Wert des Quellregisters ist und R ist das Ergebnis der Anweisung (z. B. for ADDit would be R = R D + R R ).

Die Zahl neben dem Wert stellt dar, welches Bit aus dem Wert in der Berechnung verwendet wird. In diesem Fall wäre es etwas 3 für jedes der Register.

Die Operatoren sind die standardmäßigen booleschen Operatoren für AND ( ) und ODER ( + ).

Wenn Sie die abgeleiteten Klammern hinzufügen (UND hat Vorrang vor ODER in Booleschen Gleichungen), erhalten Sie:

( R D 3 R R 3 ) + ( R R 3 R 3 ¯ ) + ( R 3 ¯ R D 3 )

Hoffentlich ist es in dieser Form ziemlich einfach zu folgen.

AhhhA, und ich habe mich gefragt, warum ich es nicht lesen konnte!
Eine weitere Frage ist, wie die CPU des AVR entscheidet, wann das Flag gesetzt wird, verwendet sie dazu eine entsprechende Hardware! Mit anderen Worten, woher kam diese Formel?
@MuhammadNour hängt davon ab, wie die CPU die Flags intern berechnet. Sie verwenden möglicherweise nicht genau diese Kombination von Gattern, da es viele Anweisungen gibt, die unterschiedliche Flag-Ergebnisse erzeugen. Sie können die Formel tatsächlich selbst herleiten, wenn Sie sich hinsetzen und herausfinden, was die Flaggen darstellen. Sicherlich sollte es möglich sein, von der Formel aus rückwärts zu arbeiten, um zu sehen, ob sie richtig ist.