Information Technology Reference
In-Depth Information
statt, und zwar zum ersten Eintrag des Ringpuffers, wenn dessen oberes Ende über-
schritten wird oder zum letzten Eintrag des Ringpuffers, wenn dessen unteres Ende
unterschritten wird.
Die effektive Start- und Endadresse des Ringpuffers ist normalerweise implizit
codiert, und zwar in Spezialregistern, die mit dem jeweiligen Indexregister assozi-
iert sind (z.B. gehört zum Indexregister 3 das Startadressregister 3 und das Enda-
dressregister 3). Oft wird statt Start- und Endadresse nur die Größe des Ringpuffers
in einem einzelnen Register codiert. Die Startadresse ergibt sich hierbei als ganzes
Vielfaches einer Zweierpotenz, die größer oder gleich der Ringpuffergröße ist. Die
Moduloadressierung ist in dieser Weise z.B. in den Signalprozessorfamilien
MC560xx von Motorola und ADSP-21xx von Analog Devices realisiert [119, 7].
Beispiel 1.8. Programmierung eines Ringpuffers . In Bild 1.13 ist dargestellt, wie die Moduloa-
dressierung verwendet werden kann, um die Einträge eines Ringpuffers zu adressieren. Die effek-
tive Adresse des aktuellen Eintrags befindet sich im Register I3, die Größe des Ringpuffers in dem
korrespondierenden Register L3. Die Startadresse des Ringpuffers ergibt sich, indem die Ringpuf-
fergröße 7 auf die nächst größere Zweierpotenz 2 3 = 8 aufgerundet und das Ergebnis mit einem
ganzzahligen n multipliziert wird, und zwar in der Weise, dass die Relation 8 n ≤ I3 ≤ 8 n + L3
erfüllt ist. Daraus folgt, dass die effektive Startadresse des Ringpuffers in diesem Beispiel gleich 16
für n = 2 ist.
Berechnete Startadresse (= 16)
Index (I3 = 19)
Ringpuffergröße (L3 = 7)
Bild 1.13. Moduloadressierung eines Ringpuffers mit sieben Einträgen, dessen Startadresse sich
aus der Ringpuffergröße berechnet
Ein Zugriff unter Verwendung einer postmodifizierenden Moduloadressierung bezieht sich auf die
in I3 gespeicherte effektive Adresse 19. Falls der Index nach dem Zugriff um 5 vergrößert wird,
ergibt sich eine nicht mehr im Ringpuffer befindliche effektive Adresse 19 + 5 = 24. Sie muss durch
Subtraktion entsprechend der Ringpuffergröße auf 24 - 7 = 17 bereinigt werden. Voraussetzung ist
natürlich, dass der Index durch die Addition nicht so weit modifiziert wird, dass nach der Subtrak-
tion eine effektive Adresse entsteht, die außerhalb des Ringpuffers liegt.
Weitere Adressierungsarten
Einige Prozessoren verfügen neben den bisher beschriebenen über weitere Adressie-
rungsarten, mit denen wiederkehrende Aufgaben gelöst werden können. So sind
einige Prozessoren z.B. in der Lage, auf einen Eintrag des Datenspeicherraums indi-
rekt über eine Referenz zuzugreifen, die sich ebenfalls im Datenspeicherraum befin-
det. Eine solche doppelt indirekte Adressierung kann z.B. für Zugriffe auf Operan-
den verwendet werden, die durch einen auf dem Stapel übergebenen Referenzpara-
meter adressiert werden.
Da pro Zeiteinheit nur ein Zugriff auf den Datenspeicherraum möglich ist, hier
jedoch zwei Zugriffe benötigt werden, wird die doppelt indirekte Adressierung nor-
malerweise nicht schneller bearbeitet als zwei indirekte jeweils einschrittige
Zugriffe (wobei jedoch ein zusätzliches Register erforderlich ist). Tatsächlich
 
Search WWH ::




Custom Search