Z-Pointer Atmega8 Assembler

Gast #2238333
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: .DB 1, 44, 21, 134, 111, 22

Wie kann ich die Daten von hinten abrufen (22, 111, ...) ?


Dach noch folgende Tabelle:
1
Tabelle: 
2
     
3
     .DB 1, 44, 21, 134, 111, 22
4
     .DB 2, 33, 11, 34
5
     .DB 5, 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.
Gast
Hallo,

nun weiß ich nicht weiter...

ich habe folgenden Code:
1
.cseg
2

3
Daten:
4

5
 .db 0b00000001, 0
6
 .db 0b00000011, 0
7
 .db 0b00000111, 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
 .db 0b00000001,0b00000011, 0b00000111, 0

Wie löse ich das oben genannte Problen?

mfg
Matthias
Persönliche Seite
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 ...
1
.cseg
2

3
Daten:
4

5
 .db 0b00000001,\
6
     0b00000011,\
7
     0b00000111,\
8
     0

... schreiben.


Grüsse

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 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.