BIOS-Interrupt-Aufruf – Wikipedia

before-content-x4

BIOS-Interrupt-Aufrufe sind eine Funktion, mit der Betriebssysteme und Anwendungsprogramme die Funktionen der Software Basic Input / Output System auf IBM PC-kompatiblen Computern aufrufen. Traditionell werden BIOS-Aufrufe hauptsächlich von DOS-Programmen und einigen anderen Softwareprogrammen wie Bootloadern verwendet (einschließlich einer relativ einfachen Anwendungssoftware, die direkt gestartet wird und ohne Betriebssystem ausgeführt wird – insbesondere Spielesoftware). Das BIOS wird nur im Real-Adress-Modus (Real-Modus) der x86-CPU ausgeführt. Daher müssen Programme, die das BIOS aufrufen, entweder auch im Real-Modus ausgeführt werden oder vom geschützten Modus in den Real-Modus wechseln, bevor sie das BIOS aufrufen und dann wieder zurückschalten. Aus diesem Grund verwenden moderne Betriebssysteme, die die CPU im geschützten Modus oder im Langmodus verwenden, die BIOS-Interrupt-Aufrufe im Allgemeinen nicht zur Unterstützung von Systemfunktionen, obwohl sie die BIOS-Interrupt-Aufrufe verwenden, um die Hardware während des Startvorgangs zu prüfen und zu initialisieren.[1] Der Real-Modus hat eine Speicherbeschränkung von 1 MB. Moderne Bootloader (z. B. GRUB2, Windows Boot Manager) verwenden den Unreal-Modus oder den geschützten Modus (und führen die BIOS-Interrupt-Aufrufe im Virtual 8086-Modus aus, jedoch nur für das Booten des Betriebssystems), um auf bis zu 4 GB zuzugreifen Erinnerung.[2]

In allen Computern steuern Softwareanweisungen die physische Hardware (Bildschirm, Festplatte, Tastatur usw.) ab dem Zeitpunkt des Einschaltens. In einem PC übernimmt das BIOS, das im ROM auf dem Motherboard vorinstalliert ist, unmittelbar nach dem Zurücksetzen der CPU die Kontrolle, auch beim Einschalten, beim Drücken einer Hardware-Reset-Taste oder bei einem kritischen Softwarefehler (dreifacher Fehler). bewirkt, dass die Mainboard-Schaltung automatisch einen Hardware-Reset auslöst. Das BIOS testet die Hardware und initialisiert ihren Status. findet, lädt und führt das Startprogramm aus (normalerweise ein Betriebssystem-Bootloader und historisches ROM BASIC); und bietet eine grundlegende Hardwaresteuerung für die auf dem Computer ausgeführte Software, bei der es sich normalerweise um ein Betriebssystem (mit Anwendungsprogrammen) handelt, es sich jedoch möglicherweise um eine direkt bootende einzelne Softwareanwendung handelt.

IBM hat alle Informationen bereitgestellt, die erforderlich sind, um das BIOS vollständig zu nutzen oder die Hardware direkt zu nutzen und das BIOS bei der Programmierung der frühen IBM PC-Modelle (vor PS / 2) vollständig zu vermeiden. Von Anfang an hatten Programmierer die Wahl, ob sie das BIOS pro Hardware-Peripherie verwenden möchten oder nicht. IBM hat die Urheberschaft von “gut erzogenen” Programmen, die nur über BIOS INT-Aufrufe (und DOS-Serviceaufrufe) auf Hardware zugegriffen haben, nachdrücklich empfohlen, um die Kompatibilität von Software mit aktuellen und zukünftigen PC-Modellen mit unterschiedlicher Peripherie-Hardware zu unterstützen. IBM hat dies jedoch für einige verstanden Für Softwareentwickler und Hardwarekunden war die Fähigkeit der Anwendersoftware zur direkten Steuerung der Hardware erforderlich. Dies lag zum Teil daran, dass eine erhebliche Teilmenge aller Hardware-Features und -Funktionen von den BIOS-Diensten nicht verfügbar gemacht wurde. In zwei Beispielen (unter vielen) können die MDA- und CGA-Adapter einen Hardware-Bildlauf durchführen, und der serielle PC-Adapter kann unterbrechungsgesteuerte Daten übertragen. Das IBM BIOS unterstützt jedoch keine dieser nützlichen technischen Funktionen.

Das BIOS in einem neuen PC unterstützt auch heute noch die meisten, wenn nicht alle von IBM für das IBM AT (eingeführt 1984) definierten BIOS-Interrupt-Funktionsaufrufe, zusammen mit vielen weiteren neueren sowie Erweiterungen einiger Originale ( zB erweiterte Parameterbereiche), die von verschiedenen anderen Organisationen und kollaborativen Branchengruppen veröffentlicht wurden. In Kombination mit einem ähnlichen Grad an Hardwarekompatibilität bedeutet dies, dass die meisten Programme, die für ein IBM AT geschrieben wurden, auch heute noch korrekt auf einem neuen PC ausgeführt werden können, vorausgesetzt, die schnellere Ausführungsgeschwindigkeit ist akzeptabel (was normalerweise für alle außer den verwendeten Spielen gilt CPU-basiertes Timing). Trotz der erheblichen Einschränkungen der Dienste, auf die über die BIOS-Interrupts zugegriffen wird, haben sie sich als äußerst nützlich und dauerhaft für den technologischen Wandel erwiesen.

Zweck von BIOS-Aufrufen[edit]

BIOS-Interrupt-Aufrufe führen Hardware-Steuerungs- oder E / A-Funktionen aus, die von einem Programm angefordert werden, geben Systeminformationen an das Programm zurück oder führen beides aus. Ein Schlüsselelement des Zwecks von BIOS-Aufrufen ist die Abstraktion – die BIOS-Aufrufe führen allgemein definierte Funktionen aus, und die spezifischen Details, wie diese Funktionen auf der bestimmten Hardware des Systems ausgeführt werden, sind im BIOS gekapselt und vor dem Programm verborgen. So muss beispielsweise ein Programm, das von einer Festplatte lesen möchte, nicht wissen, ob es sich bei der Festplatte um ein ATA-, SCSI- oder SATA-Laufwerk handelt (oder in früheren Tagen um ein ESDI-Laufwerk oder ein MFM- oder RLL-Laufwerk mit möglicherweise ein Seagate ST-506-Controller, möglicherweise einer der verschiedenen Western Digital-Controllertypen oder ein anderer proprietärer Controller einer anderen Marke). Das Programm muss nur die vom BIOS definierte Nummer des Laufwerks identifizieren, auf das es zugreifen möchte, und die Adresse des Sektors, den es lesen oder schreiben muss, und das BIOS kümmert sich darum, diese allgemeine Anforderung in die spezifische Abfolge der erforderlichen Elementaroperationen zu übersetzen um die Aufgabe über die bestimmte Festplattencontroller-Hardware abzuschließen, die mit diesem Laufwerk verbunden ist. Das Programm muss nicht mehr wissen, wie jeder Festplattentyp (oder Anzeigeadapter, Portschnittstelle oder Echtzeituhr-Peripheriegerät), auf den es möglicherweise zugreifen muss, auf niedriger Ebene gesteuert werden kann. Dies erleichtert das Programmieren von Betriebssystemen und Anwendungen und verkleinert die Programme, wodurch die Doppelung des Programmcodes verringert wird, da die im BIOS enthaltenen Funktionen nicht in jedem Programm enthalten sein müssen, das sie benötigt. Stattdessen sind relativ kurze Aufrufe des BIOS in den Programmen enthalten. (In Betriebssystemen, in denen das BIOS nicht verwendet wird, erfüllen Serviceaufrufe, die vom Betriebssystem selbst bereitgestellt werden, im Allgemeinen dieselbe Funktion und denselben Zweck.)

Das BIOS befreit Computerhardware-Designer (sofern Programme ausschließlich für die Verwendung des BIOS geschrieben wurden) von der Einschränkung, beim Entwurf neuer Systeme die genaue Hardwarekompatibilität mit alten Systemen aufrechtzuerhalten, um die Kompatibilität mit vorhandener Software aufrechtzuerhalten. Beispielsweise funktioniert die Tastaturhardware auf dem IBM PCjr ganz anders als die Tastaturhardware auf früheren IBM PC-Modellen. Bei Programmen, die die Tastatur nur über das BIOS verwenden, ist dieser Unterschied jedoch nahezu unsichtbar. (Als gutes Beispiel für die andere Seite dieses Problems verwendete ein erheblicher Teil der zum Zeitpunkt der Einführung des PCjr verwendeten PC-Programme die Tastatur nicht ausschließlich über das BIOS, sodass IBM auch Hardwarefunktionen in das PCjr einbaute, um das zu emulieren Funktionsweise der ursprünglichen IBM PC- und IBM PC XT-Tastaturhardware. Die Hardwareemulation ist nicht genau, sodass nicht alle Programme, die versuchen, die Tastaturhardware direkt zu verwenden, ordnungsgemäß auf dem PCjr funktionieren, sondern alle Programme, die nur die BIOS-Tastaturdienste verwenden .)

Das BIOS bietet nicht nur Zugriff auf Hardwarefunktionen, sondern auch zusätzliche Funktionen, die in der BIOS-Software implementiert sind. Das BIOS verwaltet beispielsweise separate Cursorpositionen für bis zu acht Textanzeigeseiten und bietet eine TTY-ähnliche Ausgabe mit automatischem Zeilenumbruch und Interpretation grundlegender Steuerzeichen wie Wagenrücklauf und Zeilenvorschub, während die CGA-kompatible Textanzeigehardware dies tut Nur ein globaler Anzeigecursor kann den Cursor nicht automatisch vorschieben. Verwenden Sie die Cursorposition, um den Anzeigespeicher zu adressieren (um zu bestimmen, welche Zeichenzelle geändert oder untersucht wird) oder um Steuerzeichen zu interpretieren. In einem anderen Beispiel interpretiert die BIOS-Tastaturschnittstelle viele Tastenanschläge und Tastenkombinationen, um die verschiedenen Schaltzustände (links und rechts) zu verfolgen Verschiebung, Strg, und Alt), um den Druckbildschirmdienst aufzurufen, wenn Verschiebung+PrtScrn wird gedrückt, um das System neu zu starten, wenn Strg+Alt+Del wird gedrückt, um die Sperrzustände (Feststelltaste, Num-Sperre und Bildlaufsperre) zu verfolgen und bei Geräten der AT-Klasse die entsprechenden Anzeigeleuchten für den Sperrstatus auf der Tastatur zu steuern und andere ähnliche Interpretations- und Verwaltungsfunktionen auszuführen für die Tastatur. Im Gegensatz dazu beschränken sich die normalen Fähigkeiten der Standard-PC- und PC-AT-Tastaturhardware darauf, jedes primitive Ereignis, bei dem eine einzelne Taste gedrückt oder freigegeben wird, an das System zu melden (dh einen Übergang vom Zustand “freigegeben” in den Zustand “gedrückt” vorzunehmen). Zustand oder umgekehrt), Durchführen eines befohlenen Zurücksetzens und Selbsttests der Tastatureinheit und Ausführen eines Befehls für Hosts der AT-Klasse vom Host-System zum Einstellen der absoluten Zustände der Sperrzustandsanzeigen (LEDs).

BIOS aufrufen: BIOS-Software unterbricht[edit]

Betriebssysteme und andere Software kommunizieren mit der BIOS-Software, um die installierte Hardware über Software-Interrupts zu steuern. Ein Software-Interrupt ist eine bestimmte Variante des allgemeinen Konzepts eines Interrupts. Ein Interrupt ist ein Mechanismus, mit dem die CPU angewiesen werden kann, die Ausführung des Hauptleitungsprogramms zu beenden und stattdessen sofort ein spezielles Programm auszuführen, das als Interrupt Service Routine (ISR) bezeichnet wird. Sobald der ISR beendet ist, fährt die CPU mit dem Hauptprogramm fort. Wenn auf x86-CPUs ein Interrupt auftritt, wird der aufzurufende ISR gefunden, indem er in einer Tabelle mit ISR-Startpunktadressen (als “Interrupt-Vektoren” bezeichnet) im Speicher nachgeschlagen wird: der Interrupt-Vektortabelle (IVT). Ein Interrupt wird durch seine Typennummer von 0 bis 255 aufgerufen, und die Typennummer wird als Index für die Interrupt-Vektortabelle verwendet. An diesem Index in der Tabelle wird die Adresse des ISR gefunden, auf den als Antwort ausgeführt wird der Interrupt. Ein Software-Interrupt ist einfach ein Interrupt, der durch einen Software-Befehl ausgelöst wird. Daher funktionieren Software-Interrupts wie Unterprogramme, mit dem Hauptunterschied, dass das Programm, das einen Software-Interrupt-Aufruf ausführt, nicht die Adresse des ISR kennen muss, sondern nur seine Interrupt-Nummer. Dies hat Vorteile für Modularität, Kompatibilität und Flexibilität bei der Systemkonfiguration.

BIOS-Interrupt-Aufrufe können als Mechanismus zum Weiterleiten von Nachrichten zwischen BIOS und BIOS-Client-Software wie einem Betriebssystem angesehen werden. Die Nachrichten fordern Daten oder Aktionen vom BIOS an und geben die angeforderten Daten, Statusinformationen und / oder das Produkt der angeforderten Aktion an den Anrufer zurück. Die Nachrichten sind in Kategorien unterteilt, von denen jede ihre eigene Interrupt-Nummer hat. Die meisten Kategorien enthalten Unterkategorien, die als “Funktionen” bezeichnet und durch “Funktionsnummern” gekennzeichnet sind. Ein BIOS-Client übergibt die meisten Informationen in CPU-Registern an das BIOS und empfängt die meisten Informationen auf dieselbe Weise zurück. Daten, die zu groß sind, um in Register zu passen, z. B. Tabellen mit Steuerparametern oder Datenträgersektordaten für Datenträgerübertragungen, werden jedoch durch Zuweisen eines Puffers übergeben (dh etwas Platz) im Speicher und Übergabe der Adresse des Puffers in Registern. (Manchmal werden mehrere Adressen von Datenelementen im Speicher in einer Datenstruktur im Speicher übergeben, wobei die Adresse dieser Struktur in Registern an das BIOS übergeben wird.) Die Interrupt-Nummer wird als Parameter des Software-Interrupt-Befehls angegeben (in der Intel-Assemblersprache , ein “INT” -Befehl), und die Funktionsnummer ist im AH-Register angegeben; Das heißt, der Anrufer setzt das AH-Register auf die Nummer der gewünschten Funktion. Im Allgemeinen arbeiten die BIOS-Dienste, die jeder Interrupt-Nummer entsprechen, unabhängig voneinander, aber die Funktionen innerhalb eines Interrupt-Dienstes werden von demselben BIOS-Programm ausgeführt und sind nicht unabhängig. (Dieser letzte Punkt ist für den Wiedereintritt relevant.)

Die BIOS-Software kehrt normalerweise mit einem Fehlercode zum Anrufer zurück, wenn dies nicht erfolgreich ist, oder mit einem Statuscode und / oder angeforderten Daten, wenn dies erfolgreich ist. Die Daten selbst können so klein wie ein Bit oder so groß wie 65.536 Bytes ganzer Rohplattensektoren sein (das Maximum, das in ein Real-Mode-Speichersegment passt). Das BIOS wurde im Laufe der Jahre von vielen verschiedenen Unternehmenseinheiten um ein Vielfaches erweitert und erweitert. Leider ist das Ergebnis dieser Entwicklung, dass nicht alle BIOS-Funktionen, die aufgerufen werden können, konsistente Konventionen zum Formatieren und Kommunizieren von Daten oder zum Berichten von Ergebnissen verwenden. Einige BIOS-Funktionen melden detaillierte Statusinformationen, während andere möglicherweise nicht einmal Erfolg oder Misserfolg melden, sondern nur stillschweigend zurückkehren, sodass der Anrufer den Erfolg annehmen kann (oder das Ergebnis auf andere Weise testen kann). Manchmal kann es auch schwierig sein festzustellen, ob ein bestimmter BIOS-Funktionsaufruf vom BIOS auf einem bestimmten Computer unterstützt wird oder welche Grenzen die Parameter eines Aufrufs auf diesem Computer haben. (Bei einigen ungültigen Funktionsnummern oder gültigen Funktionsnummern mit ungültigen Werten von Schlüsselparametern – insbesondere bei einer frühen IBM BIOS-Version – kann das BIOS nichts tun und ohne Fehlercode zurückkehren [inconvenient but inevitable] Verantwortung des Anrufers, entweder diesen Fall zu vermeiden, indem er solche Anrufe nicht tätigt, oder positiv auf einen erwarteten Effekt des Anrufs zu testen, anstatt davon auszugehen, dass der Anruf effektiv war. Da sich das BIOS im Laufe seines Verlaufs in vielen Schritten umfassend weiterentwickelt hat, ist eine Funktion, die in einer BIOS-Version eines bestimmten Herstellers gültig ist, möglicherweise nicht in einer früheren oder abweichenden BIOS-Version desselben Herstellers oder in einer BIOS-Version eines beliebigen Alters gültig – von einem anderen Anbieter.)

Da BIOS-Interrupt-Aufrufe die CPU-Register-basierte Parameterübergabe verwenden, sind die Aufrufe auf die Assemblersprache ausgerichtet und können nicht direkt aus den meisten Hochsprachen (HLLs) ausgeführt werden. Eine Hochsprache kann jedoch eine Bibliothek von Wrapper-Routinen bereitstellen, die Parameter aus dem von der Hochsprache verwendeten Formular (normalerweise stapelbasiert) in das vom BIOS geforderte registergestützte Formular übersetzen und anschließend zur HLL-Aufrufkonvention zurückkehren Das BIOS kehrt zurück. In einigen Varianten von C können BIOS-Aufrufe mithilfe der Inline-Assemblersprache innerhalb eines C-Moduls ausgeführt werden. (Die Unterstützung der Inline-Assemblersprache ist nicht Teil des ANSI C-Standards, sondern eine Spracherweiterung. Daher sind C-Module, die die Inline-Assemblersprache verwenden, weniger portabel als reine ANSI-Standard-C-Module.)

Interrupt aufrufen[edit]

Das Aufrufen eines Interrupts kann mithilfe der Assembler-Anweisung INT x86 erfolgen. Um beispielsweise ein Zeichen mit dem BIOS-Interrupt 0x10 auf dem Bildschirm zu drucken, können die folgenden Anweisungen für die x86-Assemblersprache ausgeführt werden:

 mov ah, 0x0e    ; function number = 0Eh : Display Character
 mov al, '!'     ; AL = code of character to display
 int 0x10        ; call INT 10h, BIOS video service

Tabelle unterbrechen[edit]

Eine Liste der gängigen BIOS-Interrupt-Klassen finden Sie unten. Beachten Sie, dass einige BIOS (insbesondere alte) nicht alle diese Interrupt-Klassen implementieren.

Das BIOS verwendet auch einige Interrupts, um Hardware-Ereignis-Interrupts an Programme weiterzuleiten, die diese empfangen oder Nachrichten für den eigenen Gebrauch weiterleiten möchten. Die folgende Tabelle enthält nur die BIOS-Interrupts, die von Programmen (unter Verwendung der Assembler-Software-Interrupt-Anweisung “INT”) aufgerufen werden sollen, um Dienste oder Informationen anzufordern.

Vektor unterbrechen Beschreibung
05h Wird ausgeführt, wenn der Umschalt-Druck-Bildschirm gedrückt wird, sowie wenn die BOUND Anweisung erkennt einen gebundenen Fehler.
08h Dies ist der Echtzeituhr-Interrupt. Es wird 18,2 Mal pro Sekunde ausgelöst. Das BIOS erhöht während dieses Interrupts den Uhrzeitzähler.
09h Dies ist der Tastatur-Interrupt. Dies wird im Allgemeinen ausgelöst, wenn eine Taste auf einer Tastatur gedrückt wird.
10h Videodienste

AH Beschreibung
00h Stellen Sie den Videomodus ein
01h Cursorform einstellen
02h Cursorposition einstellen
03h Cursorposition und -form abrufen
04h Holen Sie sich Light Pen Position
05h Anzeigeseite einstellen
06h Bildschirm löschen / nach oben scrollen
07h Bildschirm löschen / nach unten scrollen
08h Zeichen und Attribut am Cursor lesen
09h Schreiben Sie Zeichen und Attribut am Cursor
0Ah Schreiben Sie ein Zeichen am Cursor
0Bh Rahmenfarbe einstellen
0Ch Grafikpixel schreiben
0Dh Grafikpixel lesen
0Eh Schreiben Sie ein Zeichen im TTY-Modus
0Fh Holen Sie sich den Videomodus
10h Palettenregister einstellen (EGA, VGA, SVGA)
11h Zeichengenerator (EGA, VGA, SVGA)
12h Alternative Auswahlfunktionen (EGA, VGA, SVGA)
13h String schreiben
1Ah Abrufen oder Festlegen des Anzeigekombinationscodes (VGA, SVGA)
1Bh Funktionsinformationen abrufen (VGA, SVGA)
1Ch Videostatus speichern oder wiederherstellen (VGA, SVGA)
4Fh VESA BIOS-Erweiterungsfunktionen (SVGA)
11h Gibt die Ausrüstungsliste zurück
12h Geben Sie die herkömmliche Speichergröße zurück
13h Low Level Disk Services

AH Beschreibung
00h Festplatten zurücksetzen
01h Überprüfen Sie den Laufwerksstatus
02h Sektoren lesen
03h Sektoren schreiben
04h Überprüfen Sie die Sektoren
05h Spur formatieren
08h Laufwerksparameter abrufen
09h Init Feste Laufwerksparameter
0Ch Suchen Sie nach einer bestimmten Spur
0Dh Fixed Disk Controller zurücksetzen
15h Laufwerkstyp abrufen
16h Status des Medienwechsels für Diskettenlaufwerke abrufen
17h Festlegen des Festplattentyps
18h Stellen Sie den Medientyp des Diskettenlaufwerks ein
41h Installationsprüfung für das erweiterte Festplattenlaufwerk (EDD)
42h Erweiterte Lesesektoren
43h Erweiterte Schreibsektoren
44h Erweiterte Überprüfungssektoren
45h Laufwerk sperren / entsperren
46h Medien auswerfen
47h Erweiterte Suche
48h Extended Get Drive Parameters
49h Extended Get Media Change Status
4Eh Erweiterte Set-Hardwarekonfiguration
14h Serielle Portdienste

AH Beschreibung
00h Initialisierung der seriellen Schnittstelle
01h Zeichen übertragen
02h Charakter empfangen
03h Status
15h Verschiedene Systemdienste

AH AL Beschreibung
00h Schalten Sie den Kassettenantriebsmotor ein (nur IBM PC / PCjr)
01h Schalten Sie den Kassettenantriebsmotor aus (nur IBM PC / PCjr).
02h Lesen Sie Datenblöcke von der Kassette (nur IBM PC / PCjr).
03h Datenblöcke auf Kassette schreiben (nur IBM PC / PCjr)
4Fh Tastaturabfangen
83h Ereignis warten
84h Lesen Sie Joystick (BIOS ab 1986)
85h Sysreq Key Callout
86h Warten
87h Block verschieben
88h Erweiterte Speichergröße abrufen
89h Wechseln Sie in den geschützten Modus
C0h Systemparameter abrufen
C1h Erweitern Sie das erweiterte BIOS-Datenbereichssegment
C2h Funktionen des Zeigegeräts
C3h Watchdog-Timer-Funktionen – Nur PS / 2-Systeme
C4h Programmable Option Select – Nur PS / 2-Systeme für MCA-Busse
D8h EISA-Systemfunktionen – Nur EISA-Bussysteme
E8h 01h Erweiterte Speichergröße abrufen (Neuere Funktion, seit 1994). Gibt Ergebnisse für eine Speichergröße über 64 MB.
E8h 20h Adresskarte des Abfragesystems. Die vom E820 zurückgegebenen Informationen ersetzen die vom älteren zurückgegebenen Informationen AX=E801h und AH=88h Schnittstellen.
16h Tastaturdienste

AH Beschreibung
00h Zeichen lesen
01h Eingabestatus lesen
02h Lesen Sie den Tastaturverschiebungsstatus
05h Speichern Sie den Tastenanschlag im Tastaturpuffer
10h Zeichen erweitert lesen
11h Eingangsstatus lesen erweitert
12h Read Keyboard Shift Status Extended
17h Druckerservice

AH Beschreibung
00h Zeichen auf Drucker drucken
01h Drucker initialisieren
02h Überprüfen Sie den Druckerstatus
18h Ausführen von Cassette BASIC: Auf IBM-Computern bis zur frühen PS / 2-Leitung würde dieser Interrupt das ROM Cassette BASIC starten. Klone hatten diese Funktion nicht und verschiedene Computer / BIOS führten verschiedene Aktionen aus, wenn INT 18h ausgeführt wurde. Am häufigsten wurde eine Fehlermeldung angezeigt, dass keine bootfähige Festplatte vorhanden war. Moderne Maschinen würden versuchen, über diesen Interrupt von einem Netzwerk zu booten. Auf modernen Computern wird dieser Interrupt vom BIOS als Signal vom Bootloader behandelt, dass er seine Aufgabe nicht erfüllt hat. Das BIOS kann dann die entsprechenden nächsten Schritte ausführen.[3]
19h Nach dem POST wird dieser Interrupt vom BIOS zum Laden des Betriebssystems verwendet. Ein Programm kann diesen Interrupt aufrufen, um den Computer neu zu starten (muss jedoch sicherstellen, dass Hardware-Interrupts oder DMA-Vorgänge nicht dazu führen, dass das System während der Neuinitialisierung des Systems durch das BIOS oder während des Startvorgangs hängen bleibt oder abstürzt).
1Ah Echtzeituhrdienste

AH Beschreibung
00h RTC lesen
01h RTC einstellen
02h RTC-Zeit lesen
03h RTC-Zeit einstellen
04h RTC-Datum lesen
05h RTC-Datum einstellen
06h RTC-Alarm einstellen
07h RTC-Alarm zurücksetzen
1Ah PCI-Dienste – implementiert von BIOS, die PCI 2.0 oder höher unterstützen

AX Beschreibung
B101h PCI-Installationsprüfung
B102h PCI-Gerät suchen
B103h Suchen Sie den PCI-Klassencode
B106h PCI-Bus-spezifische Operationen
B108h Konfigurationsbyte lesen
B109h Konfigurationswort lesen
B10Ah Konfigurationswort lesen
B10Bh Konfigurationsbyte schreiben
B10Ch Konfigurationswort schreiben
B10Dh Konfigurationswort schreiben
B10Eh Informationen zur IRQ-Routine abrufen
B10Fh Stellen Sie PCI IRQ ein
1Bh Ctrl-Break-Handler – wird von aufgerufen INT 09 wenn Strg-Pause gedrückt wurde
1Ch Timer Tick Handler – aufgerufen von INT 08
1Dh Nicht angerufen werden; einfach ein Zeiger auf die VPT (Video Parameter Table), die Daten zu Videomodi enthält
1Eh Nicht angerufen werden; einfach ein Zeiger auf die DPT (Diskette Parameter Table), die eine Vielzahl von Informationen zu den Diskettenlaufwerken enthält
1Fh Nicht angerufen werden; einfach ein Zeiger auf die VGCT (Video Graphics Character Table), die die Daten für ASCII-Zeichen enthält 80h zu FFh
41h Adresszeiger: FDPT = Festplattenparametertabelle (1. Festplatte)
46h Adresszeiger: FDPT = Fixed Disk Parameter Table (2. Festplatte)
4Ah Wird von RTC zur Alarmierung aufgerufen

INT 18h: BASIC ausführen[edit]

INT 18h traditionell zu einer Implementierung von Cassette BASIC (von Microsoft bereitgestellt) gesprungen, die in Option ROMs gespeichert ist. Dieser Aufruf wird normalerweise aufgerufen, wenn das BIOS beim Start keine bootfähigen Datenträger identifizieren konnte.

Zum Zeitpunkt der Veröffentlichung des ursprünglichen IBM-PCs (IBM-Maschinentyp 5150) im Jahr 1981 war das BASIC in ROM ein wichtiges Merkmal. Moderne populäre PCs wie der Commodore 64 und die Apple II-Reihe hatten auch Microsoft Cassette BASIC im ROM (obwohl Commodore seine lizenzierte Version Commodore BASIC umbenannte), so dass der IBM PC in einem wesentlichen Teil seines beabsichtigten Marktes BASIC benötigte, um wettbewerbsfähig zu sein. Wie bei diesen anderen Systemen diente das ROM BASIC des IBM-PCs als primitives plattenloses Betriebssystem, mit dem der Benutzer Programme laden, speichern und ausführen sowie schreiben und verfeinern konnte. (Der ursprüngliche IBM PC war auch das einzige PC-Modell von IBM, das wie die beiden oben genannten Wettbewerber Hardware für Kassettenschnittstellen enthielt. Ein Basismodell von IBM PC verfügte nur über 16 KB RAM und keine Festplatten [of any kind]Daher waren die Kassettenschnittstelle und BASIC im ROM unerlässlich, um das Basismodell nutzbar zu machen. Ein IBM PC mit weniger als 32 KB RAM kann nicht von der Festplatte booten. Von den fünf 8-KiB-ROM-Chips in einem ursprünglichen IBM-PC mit insgesamt 40 KiB enthalten vier BASIC und nur einer das BIOS. Wenn nur 16 KB RAM installiert sind, macht das ROM BASIC mehr als die Hälfte des gesamten Systemspeichers aus [4/7ths, to be precise].)

Im Laufe der Zeit und wenn BASIC nicht mehr auf allen PCs ausgeliefert wurde, zeigte dieser Interrupt einfach eine Fehlermeldung an, die darauf hinwies, dass kein bootfähiges Volume gefunden wurde (bekanntlich “No ROM BASIC” oder erklärendere Meldungen in späteren BIOS-Versionen). In anderen BIOS-Versionen wird der Benutzer aufgefordert, ein bootfähiges Volume einzufügen und eine Taste zu drücken. Nachdem der Benutzer eine Taste gedrückt hat, kehrt er zum Bootstrap-Loader (INT 19h) zurück, um erneut zu starten.

Digital Rainbow 100B verwendet INT 18h um sein BIOS aufzurufen, das mit dem IBM BIOS nicht kompatibel war. Turbo Pascal, Turbo C und Turbo C ++ haben INT 18 für die Speicherzuweisung und das Paging neu verwendet. Andere Programme verwendeten diesen Vektor ebenfalls für ihre eigenen Zwecke.

BIOS-Hooks[edit]

DOS[edit]

Auf DOS-Systemen bindet IO.SYS oder IBMBIO.COM INT 13 ein, um Diskettenwechsel zu erkennen, Formatierungsaufrufe zu verfolgen, DMA-Grenzfehler zu korrigieren und Probleme im ROM-BIOS “01/10/84” von IBM mit dem Modellcode 0xFC vor dem zu umgehen erster Aufruf.

BIOS umgehen[edit]

Viele moderne Betriebssysteme (wie Linux und Windows NT) umgehen die BIOS-Interrupt-Aufrufe nach dem Start. Der Betriebssystem-Kernel schaltet die CPU beim Start in den geschützten Modus oder in den Langmodus und bevorzugt zur Steuerung eigene Programme (z. B. Kerneltreiber) die angeschlossene Hardware direkt. Der Grund dafür war in erster Linie, dass diese Betriebssysteme den Prozessor im geschützten Modus oder im Langmodus ausführen, während beim Aufrufen des BIOS-Interrupt-Aufrufs in den Real-Modus oder den Real-Modus gewechselt oder der Virtual 8086-Modus verwendet werden muss. Der reale Modus, der unwirkliche Modus und der virtuelle 8086-Modus sind langsam. Es gibt jedoch auch schwerwiegende Sicherheitsgründe, nicht in den Real-Modus zu wechseln, und der BIOS-Code im Real-Modus weist sowohl Einschränkungen hinsichtlich der Funktionalität als auch der Geschwindigkeit auf, die Betriebssystementwickler dazu motivieren, einen Ersatz dafür zu finden. Aufgrund der Geschwindigkeitsbeschränkungen des BIOS war es bereits in der DOS-Ära üblich, dass Programme es umgehen, um Leistungseinschränkungen zu vermeiden, insbesondere bei der Anzeige von Videografiken und der schnellen seriellen Kommunikation. Zu den Problemen mit der BIOS-Funktionalität gehören Einschränkungen im definierten Funktionsumfang, Inkonsistenzen in den Teilmengen der Funktionen, die auf verschiedenen Computern unterstützt werden, und Unterschiede in der Qualität der BIOS (dh einige BIOS sind vollständig und zuverlässig, andere sind gekürzt und fehlerhaft). Indem Betriebssystementwickler die Dinge selbst in die Hand nehmen und sich nicht auf das BIOS verlassen, können sie einige der Risiken und Komplikationen beseitigen, denen sie beim Schreiben und Unterstützen von Systemsoftware ausgesetzt sind. Auf der anderen Seite werden diese Entwickler auf diese Weise dafür verantwortlich, “Bare-Metal” -Treibersoftware für jedes System oder Peripheriegerät bereitzustellen, mit dem ihr Betriebssystem arbeiten soll (oder die Hardwarehersteller dazu zu bewegen, diese Treiber bereitzustellen). Daher sollte es offensichtlich sein, dass kompakte Betriebssysteme, die mit kleinen Budgets entwickelt wurden, das BIOS häufig verwenden, während große Betriebssysteme, die von großen Gruppen von Softwareentwicklern mit großen Budgets erstellt wurden, häufiger ihre eigenen Treiber schreiben, anstatt das BIOS zu verwenden , auch ohne Berücksichtigung der Kompatibilitätsprobleme des BIOS und des geschützten Modus.

Siehe auch[edit]

Verweise[edit]

  • Die x86-Interruptliste (aka RBIL, Ralf Browns Interrupt List)
  • Embedded BIOS Benutzerhandbuch
  • PhoenixBIOS 4.0 Benutzerhandbuch
  • Technische Referenz zur BIOS-Schnittstelle von IBM Personal System / 2 und Personal Computer, IBM, 1988, OCLC 20737442
  • System-BIOS für IBM PCs, kompatible und EISA-Computer, Phoenix Technologies, 1991, ISBN 0201577607
  • Programmierhandbuch für AMIBIOS, American Megatrends, 1993, ISBN 0070015619
  • Das PC-Quellbuch des Programmierers von Thom Hogan, Microsoft Press, 1991 ISBN 155615321X

after-content-x4