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
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.