[assembler]frage zu Z pointer

OP #3067905
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 ?
Gast #3067921
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.

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