Assembler - IN / OUT vs. LDS / STD

OP #3368375
Lesenswert?
• ▲
▼
Hallo zusammen,

ich versuche die Assemblerdirektiven der 8Bit-Controller von Atmel (am 
Beispiel AVR 2560) "zu durchdringen" und stehe vor dem Problem, dass ich 
nicht verstehe, warum man

a) warum es zu den Load & Store Befehlen noch die In/Out Befehle 
existieren. Ich kann doch mit "IN" und "LDS" genau das gleiche bewirken?

b) warum sich zwei Addressierungen auf den gleichen Speicherbereich 
beziehen ($00 bis $3F)? Einmal sind die GPIO Register mit im Boot und 
das andere mal nicht ...

c) Genau dafür haben sich die Jungs von der avrlibc die Makros
    _SFR_IO_ADDR()
ausgedacht, weil dabei einfach +0x20 gerechnet wird?

Freue mich auf Eure Hinweise

Sebastian
Gast #3368391
Lesenswert?
• ▲
▼
Sebastian Z. schrieb:
> a) warum es zu den Load & Store Befehlen noch die In/Out Befehle
> existieren. Ich kann doch mit "IN" und "LDS" genau das gleiche bewirken?
IN ist 2byte lang, LDS 4byte. IN kann aber weniger Register adressieren.
> b) warum sich zwei Addressierungen auf den gleichen Speicherbereich
> beziehen ($00 bis $3F)? Einmal sind die GPIO Register mit im Boot und
> das andere mal nicht ...
Die I/O Register inkl. GPIO sind immer mit dabei, die Adressierung 
geht beim AVR durch alle I/O-Register, CPU-Register und SRAM.
> c) Genau dafür haben sich die Jungs von der avrlibc die Makros
>     _SFR_IO_ADDR()
> ausgedacht, weil dabei einfach +0x20 gerechnet wird?
Hä? das +0x20 braucht man für die Adressierung bei STS weil IN/OUT 
direkt bei 0x20 anfängt.

Sebastian Z. schrieb:
> (am
> Beispiel AVR 2560)
Meinst du ATmega2560?
OP #3373215
Lesenswert?
• ▲
▼
Hallo Dr. Sommer,

danke für die Antwort.

>> c) Genau dafür haben sich die Jungs von der avrlibc die Makros
>>     _SFR_IO_ADDR()
>> ausgedacht, weil dabei einfach +0x20 gerechnet wird?
>Hä? das +0x20 braucht man für die Adressierung bei STS weil IN/OUT
>direkt bei 0x20 anfängt.

Die 0x20 sind doch genau die 32 General Purpose Register? Also ist der 
Gedanke doch richtig?

Grüße

Sebastian

Antwort schreiben

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.

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.