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!
:
Bearbeitet durch User
Alex S. schrieb: > nun möchte ich die Zahl in r16,r17 mit ror nach rechts rotieren.. wie > stelle ich das an? Indem du das Carry-Bit mit einbeziehst. Also z.B. anstelle des zweiten ror den rrc Befehl verwendest.
:
Bearbeitet durch User
Alex S. schrieb: > nun möchte ich die Zahl in r16,r17 mit ror nach rechts rotieren.. wie > stelle ich das an? Es gibt keine universelle Möglichkeit. Sie ist abhängig vom µC.
jörch schrieb: > Es gibt keine universelle Möglichkeit. Das Rotieren durchs Carry ist allerdings bei so gut wie allen üblichen MC möglich. Der Codeschnipsel sieht mir auch sehr nach AVR8 aus.
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.
:
Bearbeitet durch User
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
Alex S. schrieb: > gehe davon aus, dass es vielleicht für Atmel - Mikrocontroller fremd Sollen wir jetzt doch raten auf welchen µC sich die Frage bezieht oder teilst du uns mit, was in deinen Eröffnungspost schon reingehört.
Matthias S. schrieb: > Der Codeschnipsel sieht mir auch sehr nach AVR8 aus. Gibts noch einen anderen 8-Bitter mit R17?
Nach rechts rotieren: lsr r17 ror r16 Nach links rotieren: lsl r16 rol r17
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
:
Bearbeitet durch User
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
Sascha W. 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 Ich verstehe was du meinst, dass Carry Bit nicht in H-Reg geschoben wird, falls vorhanden. Ja so kann man das lösen :) nur halt das Wichtige, dass beim L-Reg unbedingt mit ror gearbeitet wird.
:
Bearbeitet durch User
Alex S. schrieb: > nur halt das Wichtige, dass beim L-Reg unbedingt mit ror gearbeitet > wird. Wie ich schon im 1. Beitrag schrieb. Sascha
Sascha W. schrieb: > Wie ich schon im 1. Beitrag schrieb. > > Sascha stimmt, ich habe überlesen, mein Fehler
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.