18.12.2012 Aufrufe

6. Funktionseinheiten eines Computers / Mikrocomputers

6. Funktionseinheiten eines Computers / Mikrocomputers

6. Funktionseinheiten eines Computers / Mikrocomputers

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Rechnergrundlagen Teil 2 - 42 - Prof. Dipl.-Ing. Komar<br />

Interrupt 21h, Funktion 35h Inhalt <strong>eines</strong> Interrupt-Vektors auslesen<br />

Diese Funktion liefert als Resultat den aktuellen Inhalt <strong>eines</strong> Interrupt-Vektors und damit die Adresse der zugehörigen<br />

Interrupt-Routine zurück.<br />

Eingabe AH = 35h<br />

AL = Nummer des Interrupts<br />

Ausgabe ES:BX = FAR-Zeiger auf die Interrupt-Routine<br />

Um Kompatibilität zu zukünftigen DOS-Versionen zu garantieren, sollte diese Funktion zum Auslesen <strong>eines</strong> Interrupt-<br />

Vektors aufgerufen werden, anstatt den Inhalt des jeweiligen Vektors direkt aus der Interrupt-Vektor-Tabelle auszulesen.<br />

Der Inhalt der Register AX, CX, DX, SI, DI, BP, CS, DS, SS und des Flag-Registers wird durch diese Funktion nicht<br />

verändert .<br />

Interrupt 21h, Funktion 31h Programm beenden, aber im Speicher belassen<br />

Durch den Aufruf dieser Funktion wird das ausgeführte Programm beendet und die Kontrolle wieder an das Programm<br />

übergeben, das das aktuelle Programm aufgerufen hat.<br />

Im Gegensatz zu den anderen Funktionen zur Beendigung <strong>eines</strong> Programms wird der durch das Programm belegte Speicher<br />

jedoch nicht zur weiteren Verwendung freigegeben, wodurch das aktuelle Programm resident im Speicher verbleibt.<br />

Eingabe AH = 31h<br />

AL = Ende-Code<br />

DX = Anzahl der zu reservierenden Paragraphen<br />

Ausgabe keine<br />

Der Ende-Code im AL-Register dient dazu, dem aufrufenden Programm zu signalisieren, ob das von ihm aufgerufene<br />

Programm korrekt abgearbeitet werden konnte. Das aufrufende Programm kann diesen Wert durch Aufruf der Funktion 4Dh<br />

ermitteln. Innerhalb <strong>eines</strong> Batch-Programms kann dieser Wert mit Hilfe der Befehle ERRORLEVEL und IF überprüft<br />

werden.<br />

Die Anzahl der zu reservierenden Paragraphen (jeweils 16 Byte) gibt an, wie viele Byte, beginnend mit dem PSP, nicht mehr<br />

zur weiteren Verwendung freigegeben werden dürfen.<br />

Speicherblöcke, die mit Hilfe der Funktion 48h reserviert werden, werden durch den Wert im DX-Register nicht beeinflußt,<br />

da sie nur durch Aufruf der Funktion 49h wieder freigegeben werden können.<br />

Interrupt 21h, Funktion 4Ch Programm mit Ende-Code beenden<br />

Durch den Aufruf dieser Funktion wird ein Programm beendet und gleichzeitig ein Ende-Code übergeben, den das<br />

aufrufende Programm mit Hilfe der Funktion 4Dh abfragen kann. Der RAM-Speicher, den das zu beendende Programm<br />

belegt, wird nach diesem Funktionsaufruf freigegeben, so daß er wieder anderen Programmen zugeteilt werden kann.<br />

Eingabe AH = 4Ch<br />

AL = Ende-Code<br />

Ausgabe keine<br />

Diese Funktion sollte den anderen Funktionen zur Programmbeendigung vorgezogen werden.<br />

Beim Aufruf dieser Funktion werden die 3 Interrupt-Vektoren, deren Inhalt vor dem Start des Programms im PSP gespeichert<br />

wurden, restauriert.<br />

Vor Übergabe der Kontrolle an das aufrufende Programm werden alle Handles, die von diesem Programm geöffnet wurden,<br />

und die mit ihnen verbundenen Dateien geschlossen. Dies gilt allerdings nicht für Dateien, auf die über FCB zugegriffen<br />

wurde. Der Ende-Code kann innerhalb einer Batch-Datei mit Hilfe der Befehle ERRORLEVEL und IF überprüft werden.<br />

Interrupt 19h Booten des Rechners<br />

Nach Aufruf dieses Interrupts wird der Rechner gebootet.<br />

Eingabe keine<br />

Ausgabe keine<br />

Der Aufruf dieses Interrupts verursacht oftmals keinen Reboot des Rechners, sondern einen Systemabsturz. Das hängt damit<br />

zusammen, daß zwar der Inhalt des RAM-Speichers gelöscht wird, aber die Interrupt-Vektor-Tabelle im Bereich der<br />

Interrupts 00h bis 1Ch unangetastet bleibt. Hat sich ein TSR-Programm in einen dieser Interrupts gehangen, würde der<br />

nächste Aufruf dieses Interrupts deshalb unweigerlich zum Systemabsturz führen. Dies gilt insbesondere für den Timer-<br />

Interrupt 08h, der von den meisten TSR-Programmen genutzt wird.<br />

Umgehen Sie diesen Interrupt deshalb, und wenden Sie zur Auslösung des Reboot-Vorgangs folgende Technik an: Um einen<br />

Warmstart auszulösen, speichern Sie zunächst den Wert 1234h in der Speicherstelle 0040:0072 und führen anschließend<br />

einen FAR-Jump zur Speicherstelle FFFF:0000 aus.<br />

Wenn in der Speicherstelle 0040:0072 nicht der Wert 1234 h steht, dann wird ein Kaltstart ausgeführt.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!