www.mikrocontroller.net

Forum: Compiler & IDEs ASM: add r1, r2 = add 1, 2 ?


Autor: Peta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

warum schreibt man manchmal das "r" und manchmal ohne?

Beispiel:

add r1, r2

=

add 1, 2


ist es wirklich dasselbe? ist doch verwirrend. Man könnte denken es 
seien Integer Werte. Wobei das nur mit addi sinnvoll wäre.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ist es wirklich dasselbe?

Nein. Das siehst Du schon daran, dass Dir ein "add 1, 2" vom Assembler 
mit einem Syntax Error abgelehnt wird.

Autor: Klugscheisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Von welchem Prozessor und welchem Assembler reden wir denn?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
> Das siehst Du schon daran, dass Dir ein "add 1, 2" vom Assembler
> mit einem Syntax Error abgelehnt wird.

Nein, vom GCC-Assembler für AVR eben nicht. Da kann man das so 
schreiben.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das liegt daran, dass diese Werte die Speicheradressen der Register 
sind. Die Register liegen im Speicher an den Adresse 0-31 (0x00-0x1F). 
Danach kommen die SFRs und danach der RAM.

Bei anderen Prozessoren die auch Operationen direkt aus dem RAM 
ausführen können, würde dieser Befehl je nach Assembler u.a. eine 
Addition der Inhalte der Speicheradressen 1 und 2 bewirken.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benedikt K. wrote:

> Das liegt daran, dass diese Werte die Speicheradressen der Register
> sind. Die Register liegen im Speicher an den Adresse 0-31 (0x00-0x1F).

Das kann man zwar als Eselsbrücke benutzen, aber das geht schon beim
Xmega schief, der die CPU-Register nicht mehr in den RAM-Adressbereich
einblendet.

Nein, es ist schlicht und ergreifend im Assembler so codiert, dass
er überall da, wo rN stehen darf, genauso gut auch einfach N akzeptiert.
Die AVR-Assembler-Syntax ist bereits durch die jeweils benutzte
Mnemonik auf ganz wenige mögliche Operanden eingeschränkt (anders als
beispielsweise x86), und diese möglichen Operanden sind dann alle
eindeutig unterscheidbar.  Dadurch fällt es dem Assembler ganz einfach,
die Zahlen alternativ zu den Registernamen zu unterstützen.  Ein
Befehl, der eine direkte Speicheradresse akzeptieren würde (LDS, STS
usw.) könnte ohnehin nicht alternativ auf ein Register angewandt werden.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Zum Glück beantwortet das der Atmel-ASM das völlig richtig mit "error: 
invalid register"...

Gruß aus Berlin
Michael

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peta wrote:
> Hallo
>
> warum schreibt man manchmal das "r" und manchmal ohne?

Das kann in Makros sehr praktisch sein, weil es erlaubt, mit 
Register-Nummern zu rechnen, etwa bei operationen auf 16-Bit-Registern.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.