beginner_de
beginner_de
beginner_de
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Avr-Asm-Tutorial S. 89<br />
Und jetzt kommt die Sockenauszieher-Hammer-Instruktion! Wir vergleichen, ob das Register R1<br />
kleiner o<strong>de</strong>r gleich Null ist.<br />
TST R1<br />
Wenn jetzt das Z-Flag gesetzt ist, ist das Register ziemlich leer und wir können mit BREQ, BRNE,<br />
BRMI, BRPL, BRLO, BRSH, BRGE, BRLT, BRVC o<strong>de</strong>r auch BRVS ziemlich lustig springen.<br />
Sie sind ja immer noch dabei! Assembler ist schwer, gelle? Na dann, kriegen sie noch ein wenig gepacktes<br />
BCD-Rechnen draufgepackt.<br />
Beim Addieren von gepackten BCD's kann sowohl die unterste <strong>de</strong>r bei<strong>de</strong>n Ziffern als auch die<br />
oberste überlaufen. Addieren wir im Geiste die BCD-Zahlen 49 (=hex 49) und 99 (=hex 99).<br />
ADDITION Oberes Nibble Unteres Nibble<br />
Packed BCD Zahl 1 4 9<br />
Packed BCD Zahl 2 9 9<br />
Ergebnis E 2<br />
Beim Addieren in hex kommt hex E2 heraus und es kommt kein Byte-Überlauf zustan<strong>de</strong>. Die untersten<br />
bei<strong>de</strong>n Ziffern sind beim Addieren übergelaufen (9+9=18 = hex 12). Folglich ist die oberste<br />
Ziffer korrekt um eins erhöht wor<strong>de</strong>n, aber die unterste stimmt nicht, sie müsste 8 statt 2 lauten. Also<br />
könnten wir unten 6 addieren, dann stimmt es wie<strong>de</strong>r.<br />
Unteres Nibble korrigieren Oberes Nibble Unteres Nibble<br />
Ergebnis E 2<br />
Korrektur 0 6<br />
Ergebnis E 8<br />
Die oberste Ziffer stimmt überhaupt nicht, weil hex E keine zulässige BCD-Ziffer ist. Sie müsste<br />
richtigerweise 4 lauten (4+9+1=14) und ein Überlauf sollte auftreten. Also, wenn zu E noch 6 addiert<br />
wer<strong>de</strong>n, kommt <strong>de</strong>zimal 20 bzw. hex 14 heraus. Alles ganz easy: Einfach zum Ergebnis noch<br />
hex 66 addieren und schon stimmt alles.<br />
Oberes Nibble korrigieren Unteres Nibble oberes<br />
Byte<br />
Oberes Nibble Unteres Nibble<br />
Ergebnis E 8<br />
Korrektur 6 0<br />
Ergebnis + 1 4 8<br />
Warum dann nicht gleich hex 66 addieren?