Assembler: zwei Register als Wort behandeln

OP #4627202
Lesenswert?

Hallo liene Community,

stehe momentan vor einer Frage und zwar, wie kann man zwei Register als 
Wort behandeln? Z.B. ich habe eine 16 Bit Zahl auf dem Stack und lade 
sie in 2 Register:

ld r16, z+
ld r17, z

...

nun möchte ich die Zahl in r16,r17 mit ror nach rechts rotieren.. wie 
stelle ich das an?

danke für die Hilfe!
OP #4627272
Lesenswert?

Hp M. schrieb:

> Also z.B. anstelle des zweiten ror den rrc Befehl verwendest.

es ist aber leider so, dass Atmel Studio dieses Befehl nicht kennt.. ich 
gehe davon aus, dass es vielleicht für Atmel - Mikrocontroller fremd 
ist.
Gibt es vielleicht andere Möglichkeiten?

danke

P.S.

ich bin erstmal bei Option geblieben, dass man nacheinander erstmal den 
höheren Register rotiert und danach den unteren. Da bei Rotation von 
höheren Register der Bit0, falls vorhanden in Carry geschoben wird, wird 
er im Bit7 des unteren Registers wieder auftauchen.
OP #4627324
Lesenswert?

Sascha W. schrieb:
> Hallo,
>
> beim AVR heißt das lsr/lsl
> Für R-Shift machst du ein LSR des H-Reg. und im Anschluss ein ROR des
> L-Reg.
>
> Sascha

Hallo Sascha, ich glaube lsr ist hier nicht sehr hilfreich, weil wenn 
bit0 des H-Reg 1 ist, wird er zwar in Carry geschrieben, aber von Carry 
nicht wieder in bit7 des L-Reg. D.h. bit0 des H-Reg. wird beim Rotieren 
verloren. Beim ror passiert das nicht
#4627332
Lesenswert?

Alex S. schrieb:
> Sascha W. schrieb:
>> Hallo,
>>
>> beim AVR heißt das lsr/lsl
>> Für R-Shift machst du ein LSR des H-Reg. und im Anschluss ein ROR des
>> L-Reg.
>>
>> Sascha
>
> Hallo Sascha, ich glaube lsr ist hier nicht sehr hilfreich, weil wenn
> bit0 = 1 ist, wird er zwar in Carry geschrieben, aber von Carry nicht
> wieder in bit7 des L-Reg. D.h. bit0 des H-Reg. wird beim Rotieren
> verloren. Beim ror passiert das nicht
Schau doch mal ins Datenblatt!
das LSR schiebt an b7 eine 0 rein und b0 in den CY, ROR nimmt das b0 aus 
dem H-Byte das sich ja nun in CY befindet und schiebt es auf b7 des 
L-Byte. Du musst nur für H-&L-Byte unterschiedliche Befehle verwenden! 
Wie ich schin schrieb.
Du kannst auch mit 2x ROR arbeiten, dann musst du aber vorher dafür 
sorgen das CY=0 (z.B. mit CLC), sonst hat du ein falsches Ergebnis.

Sascha

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