Forum: Mikrocontroller und Digitale Elektronik [assembler]frage zu Z pointer


von Richard X. (synq1e)


Lesenswert?

in dem AVR-Tutorial: 7-Segment-Anzeige
bei dem codebeispiel zu "einzelne 7-Segment Anzeige"

wird mittels Z-Pointer eine tabelle ausgelesen
1
 ldi     ZL, LOW(Codes*2)  ; die Startadresse der Tabelle in den
2
 ldi     ZH, HIGH(Codes*2) ; Z-Pointer laden

meine frage ist warum steht da "*2"


und warum die instruktion
1
adc     ZH, zero
nur dass das high byte vom Z-pointer auch 0 bleibt und nicht undefiniert 
ist ?

von c-hater (Gast)


Lesenswert?

chris __ schrieb:

>  ldi     ZL, LOW(Codes*2)  ; die Startadresse der Tabelle in den
>  ldi     ZH, HIGH(Codes*2) ; Z-Pointer laden[/avrasm]
>
> meine frage ist warum steht da "*2"

Weil im Flash-Bereich Wortadressen verwendet werden (Instruktionen sind 
immer Vielfache von 2 Bytes lang), beim Datenzugriff auf den 
Flashbereich aber Byteadressen erforderlich sind.

> adc     ZH, zero

> nur dass das high byte vom Z-pointer auch 0 bleibt und nicht undefiniert
> ist ?

Das High-Byte bleibt nicht Null, sondern behält entweder seinen 
vorherigen Wert oder dieser wird um eins erhöht. Die Erhöhung um eins 
passiert genau dann, wenn bei vorherigen Addition des niederwertigen 
Bytes ein Übertrag anfällt. Es handelt sich einfach um die zweite Hälfte 
einer 16Bit-Addition, die, wie bei einem 8Bitter üblich eben in zwei 
Hälften zu erledigen ist.

von Richard X. (synq1e)


Lesenswert?

versteh das ganze immer noch nicht so richtig ^^ aber danke trotzdem

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.