variable Registeradressierung (Assembler, ATmega8)

Gast #1192112
Hallo,

Hoffe der Titel ist wenigstens ansatzweise aussagefähig...

Mich quält gerade folgendes Problem für das ich keine Lösung ersinnen 
kann:

ich möchte eine Opertation (z.B. ADD) mit einem Register durchführen, 
welches von einem anderen definiert wird.

Konkretes Beispiel:
1
ldi r16, 20    ; Register definieren, mit dem gerechnet werden soll
2

3
ADD r17, rX    ; Anstelle von X soll aber die Zahl aus r16 stehen (also 20)

Das es auf diese Wiese nicht funktioniert hab ich schon bemerkt...

Ich möchte das für Schleifen nutzen um die gleiche Operation mehrmals 
hintereinander mit diversen Registern ausführen zu können.

Wie geht das?

Bin euch dankbar für die Antworten...
Gast #1192135
Hey...

ich bin noch ein ziemlicher Neuling was AVR angeht und wäre froh, wenn 
ihr so grob erklären könntet, was ihr euch unter einem Makro o.ä. 
vorstellt.

Nachvollziehbarer Sourcecode wäre natürlich grandios! :-D

Trotzdem danke für die schnellen Antworten!

so long...
Moderator Persönliche Seite #1192159
JayJay wrote:

> ich bin noch ein ziemlicher Neuling was AVR angeht und wäre froh, wenn
> ihr so grob erklären könntet, was ihr euch unter einem Makro o.ä.
> vorstellt.

Da frage ich mich allerdings, warum du dann überhaupt die Dinger
in Assembler programmieren willst...
1
.macro  addX r
2
        add     \r, r24
3
.endm
4

5
.global foo
6
foo:
7
        addX r16
8
        addX r17
9
        ret

(Da du in der GCC-Gruppe fragst, ist das Ganze in der Syntax des
GNU-Assemblers namens "gas" geschrieben.)

Das Ergebnis ist dann:
1
Disassembly of section .text:
2

3
00000000 <foo>:
4
   0:   08 0f           add     r16, r24
5
   2:   18 0f           add     r17, r24
6
   4:   08 95           ret
Gast #1192174
Jörg Wunsch wrote:
> Sven P. wrote:
>> Mit einem der drei Zeigerregister und LD dürfte das gehen, auch im Ram.
>
> Nein, da der AVR indirekt nur Transportoperationen durchführen kann,
> keine Rechenoperationen.
Ja das schon, aber ich hab mal vorausgesetzt, dass ihm das klar ist. 
Muss er halt nochn Akku dazunehmen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.