Ich verwende Code Vision und würde gerne alle Register durchlaufen und einen beliebigen Wert in das Register schreiben. Kann ich im Assembler den ldi Befehl mit der Registeradresse anstatt r16 verwenden und dann die Adresse des Registers incrementieren? //While Schleife //{ #asm ldi r16, 0xFF ; beliebiger Wert #endasm //} Wäre nett wenn mir wer helfen könnte, danke
Assembler Anfänger schrieb: > Kann ich im Assembler den ldi Befehl mit der Registeradresse anstatt r16 > verwenden und dann die Adresse des Registers incrementieren? Du willst sozusagen den Registername bzw. die Registeradresse in der Schleife durchzählen? Nur mit C und Inline-Assembler geht das nicht. Die C-Variable wäre ja dann auch ein auf dem Prozessor gespeicherter Wert, und die kann man bekanntlich nicht verwenden, um ein Register zu adressieren. Registeradressen stehen immer fest im Code, jedenfalls bei AVR-Assembler. Du müssest das also per Präprozessor lösen.
Assembler Anfänger schrieb: > Danke für die rasche Antwort. Wie würde das funktionieren? C-Präprozessoranweisungen kennst du wohl? #define, #include z.B. Man kann damit noch viel mehr machen. Allerdings kenne ich auch nicht viel mehr als die genannten beiden Anweisungen. In einem Tutorial zum C-Präprozessor sollte man aber fündig werden.
Danke trotzdem für deine Hilfe. Ich werde mich einmal über den Präprozessor schlau machen, dann sehe ich weiter. Ansonsten muss ich halt ein jedes einzelne Register beschreiben, würde für meine Anwendung auch funktionieren nur gefällt mir das nicht.
Hallo, das geht schon, da im AVR die Register auch im Adressbereich des SRAM liegen. Mit indirekter Adressierung kannst du das gewünschte erreichen. Die Adresse des Registers (r0 ... r31 == 0x0000 ... 0x0031) kommt in eins der 16Bit-Register X,Y o. Z. Per st X+,rx kannst du den Wert von rx in das Register schreiben, die Adresse, die dann das Register darstellt, wird danach um eins erhöht. Die Reg. für X und rx kannst du natürlich nicht beschreiben. Nur was soll das ganze? In einem C-Prog. sollte man nicht einfach irgendwelche Register überschreiben, da viele davon schon intern verwendet werden. Sascha
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.