6. Funktionseinheiten eines Computers / Mikrocomputers
6. Funktionseinheiten eines Computers / Mikrocomputers
6. Funktionseinheiten eines Computers / Mikrocomputers
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.