Eine Table-LookUp-Tabelle mit 8051ern:
Tabelle im Programmspeicher: mov DPTR,#tabelle
next: clr A
movc A,@A+DPTR
... verarbeiten Tabelleninhalt
inc DPTR
sjmp next
tabelle: db 'Hallo Welt'
oder falls die Tabelle kleiner ist:
mov B,#1
nächst: mov A,B
acall _tabelle
... verarbeiten Tabelleninhalt
inc B
sjmp nächst
_tabelle: movc A,@A+PC
reti
db 23,24,25,26,27,28,29,30,31,32
und falls B mit 0 initialisiert wird, wird der Operationscode des
reti-Befehls als Tabellenwert geladen (22d oder 22h) und kann unter
Umständen eben auch mit in die Tabelle einbezogen werden (Geheimtip?)
Tabellen im Datenspeicher können mit indizierter Adressierung
realisiert werden:
tabellenanfang equ 30h
tabellenende equ 40h
mov R0,#tabellenanfang
nächster-Eintrag: mov A,@R0
...Tabellenwert verarbeiten
cjne R0,#tabellenende,nächster-Eintrag
oder bei größeren Tabellen im ext. Datenspeicher:
mov DPTR,#tabellenanfang
nächst: movx A,@DPTR
...Tabellenwert verarbeiten
inc DPTR
mov A,DPH
cjne A,#tabellenende-highbyte,nächst
mov A,DPL
cjne A,#tabellenende-lowbyte,nächst
ende