Forum: Mikrocontroller und Digitale Elektronik Assembler IN OUT


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Leopold N. (leo_n)


Bewertung
-1 lesenswert
nicht lesenswert
Hallo,

ich möchte den Stackpointer (SP) in Assembler einlesen und bearbeiten 
(warum ist jetzt erst mal egal).

Dazu habe ich bis jetzt lds und sts verwendet.
Ich habe den Code dann auch mal in C geschrieben und mir das Compilat 
angesehen.

Der Compiler verwendet dafür in und out.
Da dachte ich mir: der Compiler hat ja recht, dauert schließlich n Takt 
weniger mit dem Befehl.
Also habe ich in meinem Assemblercode das lds durch in und das sts durch 
out ersetzt.
Da zeigt mir der Compiler nun aber den Fehler "Operand out of Range".

Meine Frage nun:

Warum darf der Compiler den SP mit in/out bearbeiten und ich nicht?

von Niklas G. (erlkoenig) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Leopold N. schrieb:
> Warum darf der Compiler den SP mit in/out bearbeiten und ich nicht?

Weil du weder deinen Code noch die Fehlermeldung zeigst.

von Theor (Gast)


Bewertung
2 lesenswert
nicht lesenswert
Wenn der Compiler das mit der selben Adresse versuchen würde, wie Du, 
würde er auch eine Fehlermeldung erhalten. :-) Nein, natürlich nicht. 
Von wem denn.

Aber das mit der Adresse stimmt.
Vergleiche einmal die Adresse, die der Compiler verwendet mit der, die 
Du verwendet hast.
Im Datenblatt steht dazu etwas. Bei den Memory-Mapped-Adressen der 
Register müsste eine Fußnote sein. Nämlich das für LDS/STS die Adressen 
andere sein müssen als für In/Out.

von Karl B. (gustav)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Theor schrieb:
> Im Datenblatt steht dazu etwas. Bei den Memory-Mapped-Adressen der
> Register müsste eine Fußnote sein. Nämlich das für LDS/STS die Adressen
> andere sein müssen als für In/Out.

Ja,
eine alte targetspezifische Fußangel bei der Einrichtung der Timer zum 
Beispiel.

ciao
gustav

: Bearbeitet durch User
von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Ich lehne mich mal ganz weit aus dem Fenster und vermute mal, Du benutzt 
den AVR-GCC-Assembler.
Da gibt es schöne Beispiele in der Doku zu genau diesem Thema.
https://www.microchip.com/webdoc/AVRLibcReferenceManual/assembler_1ass_example.html

Man beachte das Macro _SFR_IO_ADDR().

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]
  • [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.