AVR Instruction Set - Erklärung der Legende

OP #2682631
Hi,

ich bin gerade dabei mir das AVR Instruction Set durchzulesen und es 
wird doch tatsächlich so einiges klar.

Jedoch sind einige Erklärungen in der Legende nicht klar, evtl. könnt 
ihr ja helfen:

1. Was bedeutet die Abkürzung Rd und Rr. Was ist vorallem der 
Unterschied?

2. Ich habe mir z.B. BREQ immer so gemerkt, dass wenn bei z.B. einem 
Zähler die Zahl gleich 0 wird dann eben verzweigt wird (bzw. anders 
herum bei BRNE). Generell habe ich mich dabei immer gefragt, was bei 
diesem Befehl die Bedingung ist. Im Instruction Set wird auf S.29 das 
nun weiter erklärt: im Punkt "Operation" wird nun erklärt:
1
If Rd = Rr (Z = 1) then PC ← PC + k + 1, else PC ← PC + 1
. Wie bereits angedeutet, was heißen hier Rd, Rr und Z? Gerade weil ich 
ja nur einen Pfad und keine Parameter wie Rd, Rr oder Z angeben muss. PC 
ist soweit klar als ProgrammCounter.

3. Um was handelt es sich bei Flags? Kann es sein, dass das sozusagen 
Statusmeldungen (deshalb im SREG) oder Schalter (wie beim I-Flag) sind? 
Aber was besagt das Zero, Carry, Negative und alle anderen (V,S,H,T) 
Flags aus?

Ich hoffe, Ihr könnt mir diesbzgl. helfen :)
Gast
Hi.

Bzgl. Rd und Rr:
"
Rd: Destination (and source) register in the Register File
Rr: Source register in the Register File
" (s. Doku)

In Rd wird also geschrieben (und evtl. gelesen), während aus Rr gelesen 
wird.

Dabei stehen Rd und Rr als Platzhalter für irgendwelche Register aus r0, 
..., r31. Für welche genau der jeweilige Befehl verwendbar ist, steht in 
der Doku zu jedem Befehl.

Zu den Flags im SREG:

Die einzelnen Bits im SREG speichern jeweils einen bestimmten Teil des 
Ergebnisses der letzten ausgeführten arithmetischen Operation:

Das "C" = Carry Flag, z.B., signalisiert, dass es einen Überlauf gegeben 
hat,
das "Z" = Zero Flag zeigt an, dass das Ergebnis 0 war, e.t.c..

Das BREQ aus deinem Beispiel verzweigt also, wenn die vorherige 
Berechnung 0 ergeben hat, also das Z-Flag auf 1 gesetzt ist.
Das erscheint natürlich erstmal eigenartig, weil ein Vergleich zweier 
Werte intuitiv ja nichts mit 0 zu tun hat.
Tatsächlich ist das aber eine "Nebenwirkung" der Art und Weise, wie die 
ALU einen Vergleich bewerkstelligt:
Um A mit B zu vergleichen, rechnet sie intern einfach A-B und setzt dann 
die Flags entsprechend des Ergebnisses. Sind A und B gleich, ist das 
Ergebnis eben 0 und deshalb wird das Z-Flag gesetzt.

Noch eine kurze Erläuterung zur Atmel Doku bzgl. der wichtigsten Flags:
C-"Carry"-Flag wird gesetzt, wenn es zu einem Überlauf bei einer 
(8-Bit-)Operation gekommen ist. Bsp: 250 + 10 = 260. 260 passt aber 
nicht mehr in 8 Bit, deshalb wird das Carry gesetzt.

Z-"Zero"-Flag: Ergebnis war 0, s.o.

N-"Negative"-Flag: Ergebnis war "negativ"; relevant, wenn mit 
vorzeichenbehafteten ("signed") Werten gerechnet wird: Werte von -128 
bis 127 statt von 0 bis 255.

V-"oVerflow?"-Flag: Wie das Carry-Flag, nur eben für signed Werte: 120 + 
10 passt nicht mehr in einen signed 8-Bit-Wert (max. 127, s.o.), deshalb 
wird das Flag gesetzt.

Die einzelnen Flags braucht man allerdings i.d.R. nicht explizit 
auszuwerten (- geschweige denn zu setzen...), sondern lässt das die 
meist viel klareren Branch-Befehle erledigen.

Viele Grüße
 Hanno

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.