LD – Load Indirect from Data Space to Register using Index X -- atmel -- grosse Frage

OP #1448649
hallo leute,

da habe ich eine gewisse zeit darauf verbracht, etwas in Atmel manuell 
zu programmieren. eigentlich sind es nur ein paar kleine befehle . 
aufgrund einer funktion meiner programmierung, die nicht erwartet war, 
bin ich der sache mal auf den grund gegangen und bin derzeit sehr 
skeptisch über die ursache:

das Mysterium tritt auf beim Befehl:
LD – Load Indirect from Data Space to Register using Index X


und hier ein Beispiel:


angenommener memory content:
$0100 = 01
$0101 = 02
$0102 = 03
$0103 = 04


testprogramm mit

LDI r26,00  'x lowbyte
LDI r27,01  'x highbyte

LD  r24,x+


nach diesem durchlauf würde ich nun erwarten,
dass der inhalt von r24 = 01 ist,
da der speicher bei $100 gelesen wurde.

Das ist auch so...  also bin ich damit zufrieden!!!

gleichzeitig sollte doch das lowbyte des x registers
bereits auf 01 stehen ,da das x-register ja den post-increment 
durchgeführt hat.

   ... oder verstehe ich das instruction set falsch?

Das ist bei meinem Prozessor leider nicht so.
ob nun die daten oder das incremet zuerst kommen (innerhalb des zyklus) 
kann ich nicht sagen.
defakto ist aber die ADRESSE und DATA nach dem befehl immer sychron auf 
dem gleichen stand.

Das datenblatt des M88 verspricht mir aber // selbst nach 10maligen 
lesen der halben seite // etwas anderes


es handelt sich um einen atmega 88.

kennt jemand das problem oder habe ich da was falsch verstanden.

Gruss klaus
Du denkst richtig. Das von Dir beschriebene Verhalten des Mega88 konnte 
ich noch nicht erleben. Ich habe den Mega88 allerdings noch nicht 
simuliert, kann also keinen Fehler des Simulators ausschließen. Ich 
vermute allerdings ein Missverständnis beim Benutzen und Bedienen der 
Software.

...
> gleichzeitig sollte doch das lowbyte des x registers
> bereits auf 01 stehen ,da das x-register ja den post-increment
> durchgeführt hat.

So ist es.

> ob nun die daten oder das incremet zuerst kommen (innerhalb des zyklus)
> kann ich nicht sagen.

Es handelt sich um Post-Inkrement, es erfolgt also zunächst der Zugriff 
und dann das Inkrement.

> kennt jemand das problem oder habe ich da was falsch verstanden.

Da es unwahrscheinlich ist, dass ausgerechnet dieser Teil des Prozessors 
kaputt ist und der Rest tut, sitzt das Problem meist in solchen Fällen 
vor der  Tastatur.  Bei der Fülle an Bedienbefehlen kann man sich leicht 
vertun, vor allem am Anfang.  Oder man programmiert eine Schleife und 
springt zum ldi zurück.
Moderator (Firma: Titel) Persönliche Seite
>defakto ist aber die ADRESSE und DATA nach dem befehl immer sychron auf
>dem gleichen stand.

Muss ja (abgesehen vom Offset 0x100) so sein:
>angenommener memory content:
>$0100 = 01
>$0101 = 02
>$0102 = 03
>$0103 = 04
>
>testprogramm mit
>LDI r26,00  'x lowbyte
>LDI r27,01  'x highbyte
>LD  r24,x+
In r24 steht jetzt 0x01 und die Adresse ist nach dem Increment 0x101.

Passt also  :-o

Besser hättest du solche Daten verwendet:
$0100 = 00
$0101 = 01
$0102 = 02
$0103 = 03

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.