Rd Rr im indirekten Adressierungsmodus

Gast #98381
Lesenswert?
• ▲
▼
Wo finde ich eine genaue Zuordnung, welche Rd bzw. Rr Register in den
jeweiligen Adressierungsmodi erlaubt sind?

Ich raufe mir seit einer Stunde an einer kleinen Programmpassage die
Haare und bin mir nicht sicher, ob ich die richtigen Register benutze.
Das AVR Handbuch von ATMEL schweigt sich da aus. Es sagt z.B. im
LD Rd,Y+ ist Rd Zielregister. (S. 4-7) Auf Seite 4-9 steht dann:

"Rd: R0-R31 or R16-R31, (depending on instruction)"

      ldi YL,low(2*data)
      ldi YH,high(2*data)
loop: ld r0,Y+
      tst r0
      breq l1
      ....
      rjmp loop
l1:   ret


Obiger Code funktioniert nicht.

     ldi ZL,low(2*data)
     ldi ZH,high(2*data)
loop: lpm
      tst r0
      breq l1
      ....
      adiw ZL,1
      rjmp loop
l1:   ret

Letztere Passage funktioniert.
Gast #98383
Lesenswert?
• ▲
▼
LD Rd,Y :  Rd<-(Y)

LPM      : R0<-(Z)

Ich sehe da keinen Unterschied, lediglich, daß im LPM Falle
fest R0 als Ziel genommen wird, im ersteren Fall ein beliebiges Rd.

Liegt der Unterschied vielleicht im Wort "Program memory". Kann
ich damit nicht vom SRAM laden?
Gast #98384
Lesenswert?
• ▲
▼
ld
Load indirect rom data space

lpm
Load indirect from program memory

>Liegt der Unterschied vielleicht im Wort "Program memory". Kann
>ich damit nicht vom SRAM laden?
Könnte sein ;-)
Aus dem Flash (=program memory) bekommt Du Daten NUR mit lpm. Der AVR
ist eine Havard-Architektur, d.h. Daten- und Programmspeicher sind
komplett voneinander getrennt. Flash und RAM unterscheiden sich also
nicht nur durch ihre Adresse, sondern grundlegend durch die Art des
Zugriffs.

Stefan
Gast #98385
Lesenswert?
• ▲
▼
Stefan, Du schreibst:
> ld
> Load indirect rom data space
                ^^^
> lpm
> Load indirect from program memory

rom? ram?

Havard? Harvard?

Etwas genauer bitte. Im ersten Falle ist ein a oder o
sicher wichtig. Im zweiten ein fehlendes 'r' vielleicht nicht so.
Gast #98387
Lesenswert?
• ▲
▼
Oh sorry, gleich 2 Rechtschreibfehler.

Load indirect rom data space
sollte natürlich
Load indirect from data space
heissen.

Ist übrigens ein Zitat aus der Befehlsliste.

Macht richtig Spass, Dir Tips zu geben.

Stefan

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.