Forum: Mikrocontroller und Digitale Elektronik ATtiny Assembler cp brlo


von Thomas W. (ratos)


Lesenswert?

Hallo,

momentan versuche ich mir gerade Assembler an einem ATtiny13A 
beizubringen.
Dabei habe ich mich über Folgendes gewundert:
Bei der CP Anweisung steht im Instruction Set, dass das Carrybit 1 wird, 
wenn Rr größer ist als Rd (bzw. Rd kleiner gleich Rr).
Nun steht aber bei BRLO: "the branch will occur if and only if the 
unsigned binary number represented in Rd was smaller than the unsigned 
binary number represented in Rr" -> kleiner und nicht wie erwartet 
kleiner gleich.
(Im DB des ATtiny13A steht bei BRLO if(c=1).)
Meine Frage lautet daher:
Ist das ein Fehler in der Beschreibung oder ein Missverständnis 
meinerseits (und wenn ja, welches)?

Ich hoffe, meine Problembeschreibung ist einigermaßen verständlich ;)
Vielen Dank für eure Hilfe.

Thomas

von Uwe (de0508)


Lesenswert?

Hi,

ich finde das ist eindeutig in http://www.atmel.com/Images/doc1022.pdf 
beschrieben.

a ist kleiner als b.

von Hmm (Gast)


Lesenswert?

Das ist in der Tat ein wenig tricky.

Zunächst: Ich nehme an Du beziehst Dich auf das "Instruction Set Manual" 
0856I–AVR–0 zu finden hier: http://www.atmel.com/images/doc0856.pdf
Falls nicht, dann bitt einen Link auf das Dokument posten, auf das Du 
Dich beziehst. (Ist sowieso immer erforderlich bei Fragen zu Dokumenten 
von denen es mehrere Revisionen geben kann).

Auf Seite 10 findest Du in der Fussnote zu BRLO den Hinweis, das bei dem 
vorhergehenden CP die Operanden vertauscht werden müssen. Das sollte die 
Diskrepanz erklären.

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

CP Rd, Rr ---> Rd - Rr

"the branch will occur if and only if the
unsigned binary number represented in Rd was smaller than the unsigned
binary number represented in Rr"´

Wenn Rd kleiner ist als Rr, kommt es zum Überlauf und Carry wird 
gesetzt. Ist C gesetzt, springt BRLO.

Sind Rd und Rr gleich groß, ist das Ergebnis Null - aber kein Überlauf. 
Deshalb wird das Zero-Flag gesetzt (siehe BREQ und BRNE), aber das 
Carry-Flag wird gelöscht - und BRLO springt nicht.


Gruß
Jonathan

von Thomas W. (ratos)


Lesenswert?

Erstmal danke für die Antworten.

@Uwe
In diesem Dokument fehlt der Satz, der mich irritiert. So gesehen ist 
das wirklich eindeutiger für mich. Dennoch interessierte mich, was ich 
genau missverstanden habe.

@Hmm
Das sollte keinen Unterschied machen, oder? Man kann ja auch den Test 
"Rd < Rr" verwenden.

@Jonathan
OK, das hat mich überzeugt.

Letztendlich war es ein dummer Leichtsinnsfehler von mir (umso mehr 
danke für eure Mühe):

Thomas W. schrieb:
> Rr größer ist als Rd (bzw. Rd kleiner gleich Rr)

Das muss natürlich "bzw. Rd kleiner Rr" heißen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.