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
Hi, ich finde das ist eindeutig in http://www.atmel.com/Images/doc1022.pdf beschrieben. a ist kleiner als b.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.