AVR Z-Register Zahl addieren

Gast #4999331
Lesenswert?

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
Gast #4999338
Lesenswert?

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ß!
Gast #4999431
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren