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?
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.
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.
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
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().
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.