★ APPLICATIONS ★ PROGRAMMATION ★ Die Prozessor-Lupe ★ |
Einzeischritt-Simulator (CPC Amstrad International) | Applications Programmation |
Einzelschrittsim ula tor für CPC 464 Viele Leser, die in Maschinensprache programmieren, werden folgende Situation sicherlich kennen: Das mühsam erstellte Programm stürzt schon beim ersten Probelauf ab, und eine langwierige Fehlersuche beginnt. Dieses Debugging kann mit einem Einzelschrittsimulator, der die Abarbeitung des Maschinenprogrammes simuliert und nach jedem Befehl die Registerinhalte anzeigt, erheblich verkürzt werden.
Der Umgang mit dem Simulator Doch nun zum Programm selbst. Nachdem das Programm laden ist. werden Sie nach der Startadresse des zu testenden Progrimmes gefragt. Es muß unterhalb der Adresse &9C50 liegen, da der Binärteil des Simulators im Adreßbereich ab &9C50 liegen Ferner wäre es auch nützlich, wenn Sie neben sich ein Listing lhres Maschinenprogrammes liegen hätten. Danach drücken Sie bei der Abfrage "BASIC-Aufruf (j/n) ?" die n-Taste. Der Bildschirm wird nun gelöscht, das Programm simuliert den ersten Befehl, den es an Ihrer Startadresse findet und zeigt die Registerinhalte in der unteren Bildschirmhälfte an. Drücken Sie nun irgendeine Taste außer ENTER und das Programm nimmt sich den nächsten Befehl vor. Am Inhalt des PC-Registers erkennen Sie, wo der Befehl steht, der als nächstes simuliert wird. Diesen Vorgang können Sie nun solange wiederholen, bis die Meldung *RETURN* erscheint. Nach einem erneuten Tastendruck kehrt das Programm in Zeile 440 des BASIC-Programmes zurück. Wenn Sie nun die ENTER-Tastc drücken, so wird das Programm beendet. Andernfalls werden Sie wieder nach einer Startadresse gefragt und die Simulation beginnt von neuem. Mit ENTER können Sie die Simulation jederzeit unterbrechen und in Zeile 440 zurückkehren. Der BASIC-Aufruf Wenn Sie bei der "BASIC-Aufruf (j/n) ?" Abfrage j eingeben, also BASIC-Aufruf wählen, so können noch bis zu 32 Parameter übergeben werden. Sie werden dann vom Programm nach der Anzahl der Parameter gefragt. Wenn Sie einen BASIC-Aufruf ohne Parameter wünschen, geben Sie 0 ein. ansonsten die Anzahl der zu übergebenden Parameter. Anschließend können Sie die Parameter eingeben. Bei Beginn der Simulation haben dann die einzelnen Register folgenden Inhalt:
(n = Anzahl der Parameter) Die Parameter selbst werden ab Adresse &BFFE auf den Stapel gelegt (für jeden Parameter zwei Bytes). Danach kommen noch sechs weitere Bytes, die für die Simulation nicht von Bedeutung sind, auf den Stapel. Wird nun zum Beispiel ein Maschinenprogramm mit drei Parametern aufgerufen, so enthält das SP-Register (der Stackpointer. der immer auf den letzten Stapeleintrag zeigt) folglich die Adresse &BFF2. Ohne Parameter enthält das SP-Register die Adresse &BFF8. Dieser besondere Aufbau des Stapels und die speziellen Registerinhalte werden somit bei einem BASIC-Aufruf wirklichkeitsgetreu simuliert. Aufruf von Maschinenebene Zu Beginn der Simulation enthalten alle Register (bis auf PC und SP) den Wert Null. Das SP-Register hat stets den Inhalt &BFFE, da nur die Rücksprungadresse (symbolisiert durch den Wert &FFFF) auf dem Stapel liegt. Das Maschinenprogramm beendet die Simulation durch Ausgabe der *RETURN* -Meldung nur dann, wenn es auf einen RET-Betehl trifft und das SP-Register den gleichen Wert enthält wie zu Beginn der Simulation (nur dann kann die korrekte Rücksprungadresse vom Stapel geholt werden). Die Ausgabe auf dem Bildschirm erfolgt beim F-Register binär (die wichtigsten Flags sind beschriftet), beim a-, HL-, DE- und BC-Rcgister dezimal und hexadezimal. Die übrigen Register (IX, IY, SP und PC) werden hexadezimal ausgegeben. Bei der dezimalen Ausgabe kann (bis auf das A-Register) eine vorzeichenfreie (0 bis 65535; dargestellt durch das + Symbol) oder eine vorzeichenbehaftete (-32768 bis +32767; dargestellt durch das +/- Symbol) Ausgabe gewählt werden. Dies kann während der Simulation jederzeit durch drücken der "/" -Taste erreicht werden. Ein Drücken der rechts davon (über der CTRL-Taste) liegenden Taste führt dazu, daß der untere Bildschirmteil, in dem die Ausgabe erfolgt, gelöscht und neu aufgebaut wird. Durch Drücken der "." -Taste können Sie vom echten Einzelschrittmodus in eine fortlaufende Verarbeitung der Befehle (kein Warten auf einen Tastendruck nach jedem Befehl) umschalten. Durch erneutes Drücken dieser Taste gelangen Sie wieder in den ursprünglichen Modus. Bei der fortlaufenden Verarbeitung kann die Geschwindigkeit durch Drücken der " " -Taste in vier Stufen verändert werden. Ein Druck auf die ENTER-Taste führt, wie schon erwähnt, zum Abbruch der Simulation. Das Funktionsprinzip .. .des Einzelschrittsimulators läßt sich grob folgendermaßen beschreiben: nach der Einrichtung des simulierten Stapels werden die Register gespeichert. Bei einem Teil der Befehle (JP. CALL, RET, sämtliche Befehle, die das SP-Register beeinflussen etc.) werden diese vom Maschinenprogramm selbst manipuliert; mit den übrigen (LD, BIT, RES. SET etc.) wird jedoch wie folgt verfahren: ein solcher Befehl wird mit dem Opcode &C9 am Ende in einen bestimmten Speicherbereich kopiert, die Register werden mit den gespeicherten Werten geladen und der Befehl als normales Unterprogramm ausgeführt. Danach werden die dadurch veränderten Register und Flags wieder gespeichert und anschließend ausgegeben.
Bei diesen Befehlen wird lediglich das PC-Register für den nächsten Befehl erhöht. Bei den letzten sieben Befehlen werden Sie zusätzlich noch akustisch darauf aufmerksam gemacht. Das Abtippen Listing 1 ist der BASIC-Teil des Programmes. Nach dem Abtippen sichern Sie ihn mit SAVE "Name auf Datenträger" (zum Beispiel: Diskette) ab. Listing 2 erzeugt nach dem Starten den Maschinencode und speichert ihn unter dem Namen eschmco-de.BIN ab. Der abgespeicherte Maschinencode wird dann vom Listing 1 nachgeladen und initialisiert. Das Listing 2 sollte aus Sicherheitsgründen vor dem Start abgespeichert werden. Danach ist es mit RUN zu starten. CPC Amstrad International
|