Hallo Leute,
ich bin ein µC Einsteiger und muss eine kleines Projekt mit einem
Atmega8 realisieren. Ich programmiere nur in Assembler.
Ich bin beim Thema Z-Pointer angelangt und habe dazu einige Fragen.
Kein Problem ist für mich, wenn ich folgendes Szenario habe und Daten
von 1 weg brache (Z+, ...):
1
Tabelle:.DB1,44,21,134,111,22
Wie kann ich die Daten von hinten abrufen (22, 111, ...) ?
Dach noch folgende Tabelle:
1
Tabelle:
2
3
.DB1,44,21,134,111,22
4
.DB2,33,11,34
5
.DB5,6,9,12
Wie kann ich da z.B. nur die zweite Reihe (.DB 2, 33, 11, 34) abrufen.
Wie kann ich nur zu einer einzelne Ziffer springen (z.B. 134 o. 11 o. 6)
Ich habe leider nach langer Suche im Netz keine Antworten zu meinen
Fragen gefunden.
Ich bitte euch um eure Hilfe.
Danke!
mfg
Matthias
Matthias schrieb:> Wie kann ich die Daten von hinten abrufen (22, 111, ...) ?
Die Antwort auf all deine Fragen lautet:
Es gibt 2 Möglichkeiten
* Entweder du setzt dir ein Label an das Ende der Daten
* oder aber du weißt, wieviele Daten an den jeweils bewussten Stellen
in Bezug auf ein dir namentlich bekanntes Label vorhanden sind
und du addierst/subtrahierst diese Anzahl entsprechend zum Z-Pointer
dazu.
Das ist im Grunde nichts anderes, als wie wenn du weist, dass in einem
Buch die dich interessierende Information 5 Seiten nach dem Anfang von
Kapitel 8 steht. ALso siehst du im Inhaltsverzeichnis die Seitenzahl für
Kapitel 8 nach, zählst noch die 5 dazu und hast die Seitenzahl auf der
die Information zu finden ist.
Wenn du aber weißt, dass du die Seiten vom Kapitel 8 von hinten her
durchblättern willst, dann suchst du dir im Inhaltsverzeichnis die
Seitenzahl für Kapitel 9 (also dem Kapitel dahinter) und weißt, dass die
Seite davor die letzte von Kapitel 8 sein muss. Und von dort geht es
dann Seite für Seite nach vorne, bis du am Anfang von Kapitel 8 (dessen
Seitenzahl hast du wiederrum aus dem Inhaltsverzeichnis) angelangt bist.
Im Assembler sind die 'Kapitel' deine Label und das Inhaltsverzeichnis
führt der Assembler für dich, indem er sich die Seitenzahl, pardon die
Adresse im Speicher merkt, an der das Label steht und du nur den
Labelnamen benutzen musst, der vom Assembler durch diese Zahl ersetzt
wird.
Eigentlich ganz einfach.
Hallo,
nun weiß ich nicht weiter...
ich habe folgenden Code:
1
.cseg
2
3
Daten:
4
5
.db0b00000001,0
6
.db0b00000011,0
7
.db0b00000111,0
Wenn ich im Prog. den Zeiger immer mit Z+ erhöhe, bekomme ich die daten
immer nur aus der ersten Zeile (.db 0b00000001, 0) aber nie aus der
zweiten oder dritten.
Folgendes funktioniert:
1
.cseg
2
3
Daten:
4
5
.db0b00000001,0b00000011,0b00000111,0
Wie löse ich das oben genannte Problen?
mfg
Matthias
Hallo,
Matthias schrieb:> Wenn ich im Prog. den Zeiger immer mit Z+ erhöhe, bekomme ich die daten> immer nur aus der ersten Zeile (.db 0b00000001, 0) aber nie aus der> zweiten oder dritten.
Zeige mal bitte den Code dazu.
Matthias schrieb:> Folgendes funktioniert:> .cseg>> Daten:>> .db 0b00000001,0b00000011, 0b00000111, 0
Hier kommen andere Werte weil es eine andere Tabelle ist. Oben hast du
ja nach jedem Byte eine 0 angehängt.Um fortlaufende Tabellen zu
schreiben kann man auch ...