Assembler IN OUT

OP #5597208
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?
Gast #5597236
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.

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