Wann welche Zugriffe erfolgen, ist einfach zu merken:
1.
Die MOVC-Befehle lesen vom Programmspeicher, d.h. damit kann man auf
Tabellen zugreifen z.B. zur 7-Segment-Umwandlung oder Textausgabe.
2.
Die MOVX-Befehle greifen auf den extendet RAM zu, der mußte früher über
den externen Datenbus angeschlossen werden. Viele moderne 8051 haben
aber bereits 1..8kB extendet RAM intern.
3.
Alle Befehle mit @R0 oder @R1, die keine MOVX-Befehle sind, greifen auf
den indirekten RAM zu, d.h. von 0x00..0xFF.
PUSH/POP sind auch indirekte Adressierungsarten, d.h. auch der Stack
kann bis 0xFF gehen.
4.
Allen anderen Befehle greifen von 0x00..0x7F auf den direkten RAM zu
bzw. von 0x80..0xFF auf die SFRs.
5.
Alle Bitbefehle greifen auf den Bitbereich (0x20..0x2F) zu, das
entspricht dann den Bitadressen 0x00..0x7F.
6.
SFRs, deren Adresse 0x*0 oder 0x*8 ist, können auch bitweise
zugegriffen werden. Die Bitadressen sind dann 0x*8..0x*7 bzw.
0x*8..0x*F, z.B. für das SFR 0xA8: 0xA8..0xAF.
Zu beachten ist, daß die Register mit im RAM liegen, d.h. je nach
ausgewählter Bank sind also die Adressen 0x00..0x1F überlagert. Um z.B.
das Register 7 von Bank 0 auf dem Stack zu sichern, schreibt man "PUSH
0x07".
Einige neuere 8051 haben erweiterte Adressierungsarten, z.B. der
Philips P89C669 kann bis 8MB adressieren und hat dazu 8 (2 je
Registerbank) Universalpointer, die 24 Bit breit sind.
Da sind dann alle Speicherbereiche linear hintereinander gemapt (Flash,
indirekter RAM, extendet RAM).
Zusätzlich Befehle (EJMP, ECALL, ERET) sind für den 24Bit
Funktionsaufruf vorhanden.
Peter