|
|
-
Der untere interne RAM
-
Die Speicherbytes des unteren internen
RAM sind sowohl direkt adressierbar (DATA) als auch indirekt
adressierbar (IDATA). Sie enthalten vier Registerbänke mit
je 8 Bytes, 128 adressierbare Bits in 16 Byte-Speichern, die
vom Benutzer frei verwendet werden können und 80 normale
Bytespeicher. (von diesen können bei NMOS-Prozessoren 40
Bytes durch eine externe Spannung versorgt werden. Bei
CMOS-Prozessoren, wird der ganze Chip ruhestromversorgt.)
-
-
Die Registerbänke:
-
Die Registerbänke zählen zu den
CPU-Registern. Das bedeutet, daß es Maschinenbefehle
gibt, die sich unmittelbar auf die Speicherzellen der
Registerbank beziehen. Für die CPU ist zu einem Zeitpunkt
nur eine Registerbank sichtbar. Sie kann während dieser
Zeit nicht mit ihren registerbankbezogenen Maschinenbefehlen
auf die anderen Bänke zugreifen .. (Es sei denn, sie
behandelt diese wie den normal adressierbaren Speicher).
-
Über diesen Weg ist es möglich
vier verschiedenen Prozessen, CPU-Speicher zu reservieren, ohne
daß Daten eines ersten Prozesses umkopiert werden müßten,
wenn ein zweiter Prozeß die Aufmerksamkeit der CPU
verlangt.
-
-
Die Umschaltung auf die aktive
Registerbank erfolgt über zwei Flaggen im Register PSW.
Das ist das Flaggenregister der CPU. Wie im Bild gezeigt, ist
es über die Flaggen RS1 und RS0 möglich, eine der
vier Registerbänke einzuschalten. Bei den [a51-Befehlen]
wirken nun die mit Ri oder Rx gekennzeichneten Befehle mit den
Speicherzellen dieser Registerbank zusammen. Ri meint die
Speicherzellen R0 und R1 und bei Angabe von Rx kann jede
Speicherzelle von R0 bis R7 benutzt werden. Nach dem RESET ist
Registerbank 0 eingeschaltet. Was durch die Befehle clr RS1 und
clr RS0 ebenfalls erreichbar wäre.
-
-
Beispiel: Es ist die
Registerbank 2 (setb RS1, clr RS0) eingeschaltet. Dann lädt
der Befehl mov R4,#12 die Zahl 12 in die Speicherzelle 14h.
Wäre die Registerbank 0 eingeschaltet gewesen, dann wäre
die Zahl 12 in den Speicher 04h übertragen worden.
-
-
Der Beginn des Stapels (Stack):
-
Nach dem Reset befindet sich im
Stapelzeiger SP der Wert 07h. Somit beginnt der Stack in der
Registerbank 1. Das ist eine ungünstige Lage, da hierdurch
weder die Registerbänke 1-3 noch die bitadressierbaren
Speicher benutzbar sind. Der Stapel überschreibt sie, oder
wird selber durch gespeicherte Werte gestört. Ein
wesentlich günstigerer Anfang für den Stack könnte
der interne obere RAM sein. Dieser ist nur indirekt
adressierbar, was meistens von seiner Benutzung abschreckt und
besitzt 128 Speicherzellen. Der Befehl, um den Stapel hierher
zu verlegen lautet mov SP,#7Fh.
-
-
Die bitadressierbaren Speicher:
Die 16 bitadressierbaren Speicherzellen
können wie jeder andere Speicher benutzt werden. So würde
der Befehl mov 2Ah, #00100011b die Zahl 23h in den Speicher 2Ah
schreiben. Durch die Bitadressiebarkeit dieses Speichers ist es
jedoch kinderleicht eines der Bits zu verändern. Ohne
Maskierung läßt sich beispielsweise die erste 1 von
links auf Null zurücksetzen, wenn man den Befehl clr 55h
benutzt. Wollte man im höchsten Bit eine 1 setzen, so
genügt der Befehl setb 57h. Da sowohl den
Speicherzellen wie auch den Bit Namen (Label) zugeordnet werden
können, kann zudem das Merken der Adressen entfallen. Mit
den Zuweisungsdirektiven des Assemblers wäre folgendes
möglich, was den obigen Befehlen entspricht ..
|
|