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

OP #1448649
Lesenswert?

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
#1448844
Lesenswert?

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.

...
#1448873
Lesenswert?

> 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 #1448924
Lesenswert?

>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

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