aAtmega8, SRAM a x,y,z pointre

Ahojte

Programujem v assembleri.
Prosím vás dá sa použiť pointer x,y,z pre SRAM v Atmega8?

napr.

.dseg

DataTab: .byte 4 ; 4 byte pre data

.cseg

ako naplniť Z pointer na DataTab?

+Dakujem

A jsme zase u toho : ČÍST DATASHEETY, ČÍST DATASHEETY, ČÍST DATASHEETY !!!

Samozřejmě, že se dvojregistry X,Y a Z (XH:XL, YH:YL a ZH:ZL) dají použít jako pointry do SRAM - to je jedna z jejich funkcí. Jenom pro čtení z programové paměti lze použít pouze dvojregistr Z. Podívej se na kapitolu Instruction Set Summary v datasheetu. Jsou tam popsané včechny instrukce procesoru včetně čtení a zápisu do SRAM přes dvojregistry. Najdeš tam i jaké příznaky daná instrukce ovlivňuje a jak dlouho trvá.

Nejsem si úplně jistý, jestli si náhodou neděláš legraci…

Co třeba takhle :

.dseg
DataTab: .byte 4
...
...
...


.cseg

...
...
...
ldi XH, high(DataTab)
ldi XL, low(DataTab)
...
...
...
...

Pouze u čtení z programové paměti musíš adresu násobit 2, protože je paměť organizovaná po wordech. To znamená, že pokud by tabulka ležela v programové paměti procesoru, musel bys a) použít dvojregistr Z, b) vynásobit adresu 2:

.cseg

...
...
...
DataTab: .db 1, 2, 3, 4, ...
...
...
...
ldi ZH, high(DataTab<<1)
ldi ZL, low(DataTab<<1)
...
...
...

Pokud v programové části paměti zapíšeš DataTab: .db 1, 2, 3 - tedy lichý počet bytů, tak Ti překladač (aspoň AVR Studio to tak dělá) napíše warning a doplní Ti k datům ještě nulu na konec do sudého počtu.