next up previous
Nächste Seite: Überlauf Aufwärts: Fehlermeldungen des Laufzeitsystems Vorherige Seite: Zeiger ist NIL (TRAP

Bereichsfehler

Bei jeder Zuweisung an einen Unterbereich und bei jedem Zugriff auf ein Feldelement (ARRAY) findet eine Prüfung der unteren und der oberen Schranke statt. Bei einer Zuweisung an einen Unterbereich wird geprüft, ob der resultierende Wert in die Zielvariable gespeichert werden kann. Bei einem Zugriff auf ein Feldelement wird geprüft, ob überhaupt ein Element mit dem ausgewerteten Indexausdruck existiert (deklariert ist). Bei einer CASE-Anweisung wird der berechnete Ausdruck als Index in eine Sprungtabelle verwendet, die für jeden der CASE-Label die Adresse der zugehörigen Anweisungen erhält. Also muss wie bei einem Zugriff auf ein Feldelement überprüft werden, ob der Index gültig ist.

Ist die untere Schranke Null (0) und die obere Schranke kleiner als $2^{15}$ (32768), geschieht diese Überprüfung mit der MC68000-Instruktion ,,CHK``. Ist die obere Schranke zwischen $2^{15}$ und $2^{31}$ und ist der Zielprozessor mindestens eine MC68020-CPU steht für die Überprüfung die Instruktion ,,CHK.L`` zur Verfügung. Dann erscheint ,,Bereichsfehler (CHK)`` als Fehlermeldung. Andernfalls ist die Bereichsprüfung etwas komplexer: nach erfolgter Prüfung mit Hilfe von einer oder zwei Vergleichsinstruktionen wird im Fehlerfall5.12 auf MC68000 die Instruktion ,,TRAP #14`` ausgeführt, wie es auch in der Fehlermeldung ,,Bereichsfehler (TRAP 14)`` vermerkt ist. Für den Anwender ist diese Unterscheidung allerdings von untergeordneter Bedeutung.


\begin{example}
Beispiel:
\begin{alltt}
\relax{} VAR
\\ a:ARRAY [0..5] OF INTEGE...
... i:=a[i]; (* Bereichsfehler, da kein a[11] *)
\\ \relax \end{alltt}\end{example}


next up previous
Nächste Seite: Überlauf Aufwärts: Fehlermeldungen des Laufzeitsystems Vorherige Seite: Zeiger ist NIL (TRAP
Claudio Nieder 2000-11-12