Hallo mare_crisium,
Daaaanke und schon die naechste Frage, die ich mir hoffentlich selbst beantwortet habe.
Meine Anmerkungen bzw. Gedanken dazu sind im Codesegment.
Code:
NEXT0_TAST_ZST:
push r17
in r17,SREG
push r17
push r18
push zl
push zh
// Bis hier hin kann ich es nachvollziehen. Aber nun wird der Eintrag der 0.Stelle von 0x0011 auf 0x0022 berechnet.
// ...und was das schlimmste ist, hinterher auch noch richtig ausgelesen... :-()
// Bei 0x0022 sind doch ganz andere Daten abgelegt, keine aus der Tabelle. Die enden bei 0x0019.
// >>>Glaube, Du hast es mir schon einmal versucht in "Breiform" zu servieren? :-)
; Zeiger auf Anfang der Übergangstabelle berechnen
add zl,zl ; zh:zl verdoppeln, weil einer Adresse im...
adc zh,zh ; .. Programmspeicher immer zwei Bytes entsprechen
// Wenn ich den Kommentar von Dir nun richtig interpretiere, wird auf den Speicher 0x0011 - 0x0019 verwiesen und dort stehen die Daten zu je 16Bit.
// Zumindest sehe ich sie so im Simulator. Dort kann ich sie aber nicht wirklich ansprechen, da der ATmega8515 ein 8Bit-Prozessor ist und somit auch nur
// 8Bit mit einmal verarbeiten kann.
// Bedeutet das die 0. Stelle der Tabelle zwar bei 0x0011 abgelegt, ist aber fuer die CPU bei 0x0022 und 0x0023
// 1. Stelle der Tabelle zwar bei 0x0012 abgelegt, ist aber fuer die CPU bei 0x0024 und 0x0025
// 8. Stelle der Tabelle zwar bei 0x0019 abgelegt, ist aber fuer die CPU bei 0x0032 und 0x0033
// "gerade" und "ungerade"
// Ist es so??? Wenn ja, dann habe ich es doch verstanden. ...jedoch nicht warum Atmel keine 8Bit Speicherstruktur verwendet.
;
;
; Information in Bit7 löschen; Tabelle darf nicht länger als 127 Einträge sein
andi r16,0x7F ;
; Tabellenlänge einlesen (0-ter Eintrag in der Tabelle)
lpm r17,z+ ; r17 := TBL_LNG einlesen
// Hier wird der Tabellenwert eingelesen und der Zeiger von 0x0022 auf die 2. "ungerade" Stelle 0x0023 addiert
lpm r18,z+ ; r18 := TBL_LNG einlesen
// Hier wird der Tabellenwert eingelesen und der Zeiger von 0x0023 auf die 2. "gerade" Stelle 0x0024 addiert - den naechsten Tabelleneintrag
//
// >>>Habe ich den "Brei" nun mit dem Laeufel oder mit der Gabel gegessen?
//
Edit: P.S.: Könnte es sein, dass Dir meine Art der Parameterübergabe an die Prozedur NEXT0_TAST_ZST fremd ist?
Die Register zh:zl, r16 und das T-Flag werwende ich wie die Parameter bei einem Prozeduraufruf in einer Hochsprache, z.B. Pascal:
Fremd? ganz klar...
darueber musst Du aber nicht nachdenken. Wenn ich sie dann einmal verstanden habe.. ist sie nicht mehr fremd.
Ich versuche an die Sache mit gesunden Menschenverstand ran zu gehen.
Manchmal brauche ich vielleicht etwas laenger, um komplett hinter jedes Problem zukommen.
Moechte aber auf keinen Fall Dinge, die ich beim ersten mal nicht gleich verstanden habe, ignorieren bzw. hinnehmen.
Das waere Selbstbetrug und holt mich nur all zu schnell wieder ein.
- Es ist ein Hobby und es macht Spass mit nur "1" und "0" zu spielen -
Was ich damit sagen will:
Es ist voll OK so. und bin wirklich froh, dass Du mich beim Lernen so tatkraeftig unterstuetzt.
Lesezeichen