Inline Assembler

Gast #2755733
Lesenswert?
• ▲
▼
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
#2755737
Lesenswert?
• ▲
▼
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.
Gast #2755789
Lesenswert?
• ▲
▼
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.
#2756106
Lesenswert?
• ▲
▼
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

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