Die Speicherverwaltung des BIBO-Assemblers

Im folgenden Kapitel werden wir Ihnen genau erklären, welche Speicherbereiche der Assembler und die Daten belegen und welche Bereiche für die Objekt-Daten beim assemblieren frei sind.

Der BIBO-ASSEMBLER belegt den Speicherbereich von $9500 bis $BC00. Dies sind ca. 10 kbyte, die auf jeden Fall den Speicherbereich belegen. Darüber ($BC00-$BFFF) liegt die Displaylist und der Bildschirmspeicher. Auch dieser Speicnerbereich ist belegt und kann nicht zur Ablage von Objectdaten benutzt werden.

Direkt unterhalb des BIBO-ASSEMBLERS werden die eingegebenen Programmzeilen abgelegt. Die untere Grenze dieses Speicherbereichs wächst mit länger werdendem Listing nach unten an. Wenn sie sich mit der Funktion SIZ die Adressbereiche ansehen, die das Listing (Source-Data) belegen, werden Sie also feststellen, daß sich die Anfangsadresse immer weiter nach unten verschiebt. Die erste Zeile des Listings beginnt also an dieser Anfangsadresse, das Ende des Listings liegt bei der Endadresse, die auch als HIMEM bezeichnet wird. HIMEM ist also die höchste Adresse im System, an der Daten des Programmlistings im Speicher abgelegt werden können. Dieser HIMEM-Zeiger kann mit einem Befehl verändert werden um, zum Beispiel Speicherplatz oberhalb der Sourcedaten für die Objectdaten frei zu halten.

Der Befehl hierzu lautet:

HIM <Adre sse> (von himem)

Bei Eingabe dieses Befehles wird der Speicher-Inhalt (das Listing) automatisch gelöscht. Vergessen Sie also nicht, vor Aufruf dieses Befehles, das Listing, das sich im Speicher befindet auf Diskette oder RAMDISK abzuspeichern. Nach einladen des ASSEMBLERS befindet sich der HIMEM-Zeiger immer genau unterhalb des Assemblers.

Der Zeiger für die unterste freie Speicherstelle im RAM nennt sich LOMEM und liegt normalerweise direkt oberhalb des DOS. Der Wert des LOMEM-Zeigers hängt also vom verwendeten DOS und von der Konfiguration des verwendeten DOS ab. Ab hier wird beim Assemblieren die Symbol-Tabelle abgelegt. Diese Tabelle besteht aus den im Programmlisting befindlichen Label und zu dem Label gehörenden Daten.

Auch der LOMEM-Zeiger kann im Speicher verschoben werden:

LOM <Adress e> (von lomem)

Heißt der hierzu gehörende Befehl. Durch verändern des Lomem-Zeigers bleibt das Programmlisting unbeeinflußt, lediglich die Symbol-Tabelle wird gelöscht.

Bei Veränderung des LOMEM- oder des HIMEM- Zeigers ist darauf zu achten, das der Zeiger nicht in einen Bereich gelegt wird, in dem wichtige Daten liegen (DOS, Assembier, Bildschirmdaten).

Zwischen der Endadresse der Symbol-Tabelle und der Anfangsadresse der Source-Data ist nun Platz für die Objectdaten beim assemblieren. Wird allerdings beim assemblieren ein Include-File nachgeladen, verschiebt sich kurzzeitig die Anfangsadresse der Source-Daten nach unten. Außerdem kann es passieren, daß bei längeren Listings die Symbol-Tabelle die Anfangsadresse dei Objectdaten überschreitet. In jedem Fall wird hierbei eine Fehlermeldung ausgegeben so daß keine wichticten Daten zerstört werden. Sollte es also vorkommen, daß für die Objectdaten kein Platz mehr im Speicher bleibt, können die Objectdaten natürlich auch gleich beim assemblieren als Binärfile auf Diskette oder RAMDISK abgespeichert werden. Diese Files können direkt vom DOS aus wieder eingeladen und gestartet werden.