www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Direkte Adressierbarkeit von Registern


Autor: Benedikt Schröfel (-beni-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich frage mich schon lange, warum beim 8-bit RISC ARR die Register 0 - 
15 nicht direkt mit z.B. LDI verwendet werden können, sondern nur die 
Register 16-31. Das Einzige, was mir mal gesagt wurde war, es seien 
architektonische Gründe, aber weiß jemande welche?
Vielen Dank schon mal!

Gruß Beni

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast in einem Befehlswort nur eine bestimmte Anzahl Bits.
Und jeder Mikroprozessordesigner muss sich entscheiden, welche Befehle 
er damit umsetzt. Wenn Du LDI mit allen Registern haben willst, brauchst 
Du ein Bit mehr. Das fehlt dann woanders.
Also müssen dann andere Befehle beschnitten oder ganz weggelassen 
werden. Oder Du nimmst ein Bit bei der Konstante bei LDI weg.
Anstatt 0-255 könntest Du dann nur 0-127 als Wert bei LDI benutzen.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LDI ist 16 bit breit. Für den Wert werden 8 Bits benötigt. Wenn du nun 
alle 32 Register ansprechen können willst, brauchst du für die 
Registernummer nochmals 5 Bits. Es bleiben also nur noch 3 Bits für den 
Opcode übrig. Das ist zu mager. Es gibt ja noch andere Befehle dieser 
Art (z.B. ANDI, ORI, SUBI, SBCI). So wäre fast kein Platz mehr für die 
ganzen anderen Befehle übrig.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die eine zusätzliche Zeile Code für die unteren Register ist doch zu 
verschmerzen.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kommt immer drauf an:

ldi tmp, 123
mov r0, tmp

kann z.B. durch nen Interupt unterbrochen werden!

also müßte man eigentlich schreiben:

cli
ldi tmp, 123
mov r0, tmp
sei

und ganz eiogentlich:

cli
push tmp
ldi tmp, 123
mov r0, tmp
pop tmp
sei


Läßt sich natürlich alles durch saubere programmierung verhindern und 
"hinbiegen" ;)

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Läubi Mail@laeubi.de wrote:
> kommt immer drauf an:
>
> ldi tmp, 123
> mov r0, tmp
>
> kann z.B. durch nen Interupt unterbrochen werden!

Na und? Wenn die ISR sauber programmiert ist stört das nicht weiter.

>
> also müßte man eigentlich schreiben:
>
> cli
> ldi tmp, 123
> mov r0, tmp
> sei

Nööö, man muss nur in der ISR alle verwendeten Register sichern 
(push/pop) und das SREG sichern, damit das Auftreten des Int zwischen 
einem flagbeeinflussendem Befehl (Operation, Vergleich) und der darauf 
folgenden bedingten Verzweigung (brXX) keine Flags verändert.

>
> und ganz eiogentlich:
>
> cli
> push tmp
> ldi tmp, 123
> mov r0, tmp
> pop tmp
> sei

Nöö, auch nicht, das muss in der ISR geschehen.

Allerdings gibt es Fälle, wo das Sperren des Interrupts nötig ist, 
nämlich dann, wenn Main und ISR auf dieselben (I/O-)Register zugreifen. 
Suche mal nach "atomar", da bekommst Du gute Erklärungen von PeDa. Auch 
beim Setzen des Brennimpulses beim (internen) EEPROM muss der Interrupt 
gesperrt werden, damit er nicht zwischen Aufhebung des Schreibschutzes 
(eemwe) und Schreiben (eewe) auftreten kann, was den Schreibschutz (der 
gilt nur 4 Takte) deaktivieren könnte.

>
>
> Läßt sich natürlich alles durch saubere programmierung verhindern und
> "hinbiegen" ;)

Richtig, saubere Programmierung ist oberstes Gebot. Es gelingt mir aber 
auch nicht immer... ;-)

...

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Glück kann keiner in die Controller ´reingucken, um die "dreckigen" 
Programmecken zu sehen ;-) (bei gesetzten LockBits). Mit einiger 
Erfahrung sind die AVRs aber recht einfach zu den an sie gestellten 
Aufgaben zu bewegen.

Autor: Willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

> cli
> push tmp
> ldi tmp, 123
> mov r0, tmp
> pop tmp
> sei

Wofür soll das gut sein ?
tmp hat hinterher den gleichen Wert wie vorher.

MfG Willi

Autor: Willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh Sorry,

habs schon gesehen.
Ich nehme alles zurück.
Hatte wohl gerade einen Aussetzter zwischen den Ohren.

Mfg Willi

Autor: Benedikt Schröfel (-beni-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für eure Erklärungen :-)

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.