Hallo, ich habe im Z-Register folgenden Wert: <avrasm> LDI ZH, HIGH(511) LDI ZL, LOW(511) </avrasm> Nun möchte ich den Wert eines anderen Registers addieren. Beispielsweise R16 mit 2. Wie mache ich das richtig, so dass auch beim Setzen des C-Flags das Highbyte um eins erhöht wird? Ist <avrasm> LDI R16, 2 ADD Z, R16 </avrasm> korrekt? Ich habe auch Wenn nicht, wo kann ich wo kann ich das nachlesen? mfg Diether
Hallo, es handelt sich um einen ATMEGA32-Prozessor. Und irgenwie hat das mit der Formatierung nicht geklappt. Sorry! mfg Diether
Hi
>korrekt?
Nein. Es reicht ein
[avrasm]
adiw, ZH:ZL,2
[{avrasm]
MfG Spess
Diether schrieb: > Hallo, ich habe im Z-Register folgenden Wert: > > <avrasm> > LDI ZH, HIGH(511) > LDI ZL, LOW(511) > </avrasm> > > Nun möchte ich den Wert eines anderen Registers addieren. Beispielsweise > R16 mit 2. Wie mache ich das richtig, so dass auch beim Setzen des > C-Flags das Highbyte um eins erhöht wird? > > Ist > <avrasm> > LDI R16, 2 > ADD Z, R16 Diesen Befehl, - Addition eines 8-Bit-Registers zu einem 16-Bit-Registers -, gibt es nicht im AVR Befehlssatz > </avrasm> > korrekt? Also: Nein. > Wenn nicht, wo kann ich wo kann ich das nachlesen? Was nicht geht, wird natürlich nirgends beschrieben. Da müsste man ja alles beschreiben, einschliesslich des Befehls, der einer Mücke die Wurzel zieht. Eintrag: ZEMDW: Gibt es nicht. :-) In der Beschreibung des Befehlssatzes steht aber, welche Befehle es gibt: http://www.atmel.com/atmel/acrobat/doc2503.pdf Du wirst die Addition aus den Additionen von zuerst des Low-Teiles von Z (also R30) und dann von 0 (also eines Registers, das 0 enthält) einschliesslich Carry zu dem High-Teil von Z (R31) zusammensetzen müssen. Wahlweise auch als Increment, falls das Carry-Bit gesetzt ist. Da kann man kreativ sein. Viel Spaß!
Diether schrieb: > Wenn nicht, wo kann ich wo kann ich das nachlesen? Im Instruction-Set: http://www.atmel.com/images/Atmel-0856-AVR-Instruction-Set-Manual.pdf
generell addierst Du Register zu zwei anderen mit add zl,r16 adc zh,r17 wobei r17 hier Null sein muß wenn nur r16 und nicht ein ganzer 16-bit Wert hinzuaddiert werden soll. im C-Flag findest Du stets den Übertrag, der dann im adc-Befehl weiterverwertet werden kann.
Peter D. schrieb: > Diether schrieb: >> Wenn nicht, wo kann ich wo kann ich das nachlesen? > > Im Instruction-Set: > > http://www.atmel.com/images/Atmel-0856-AVR-Instruction-Set-Manual.pdf Habe dummerweise oben einen falschen Link (auf das DB vom ATMega32) gepostet, der dann noch nicht einmal direkt erreichbar ist. Tut mir leid. Danke Peter, für den richtigen Link.
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.