Maschinensprache i8086/ I/O-Ports

Aus Wikibooks

Theorie:  EinleitungMaschinenspracheAssemblerZahlensystemeRAM-AdressenBWSDebugCPU-RegisterEinfache BefehleStringbefehleInterruptsI/O-Ports
Versuch:  BWS1BWS2Hallo WeltBootsektorMBR
Nützlich: BefehlslistePAUSEFilter
Analyse:  Bootloader


Einführung[Bearbeiten]

Für Ein- und Ausgabeoperationen (Input-, Output operations) existieren verschiedene Möglichkeiten die Hardware anzusprechen: speicherorientiere (memory-mapped-I/O) und speichergetrennte Verfahren. Intel-Prozessoren unterstützen beide.

Speicherorientierte Verfahren[Bearbeiten]

Hier liegt der Ein- und Ausgabepuffer ungetrennt von restlichen Speicher im Arbeitsspeicher. Bei IBM-PCs ist die Grafikkarte ein gutes Beispiel.

Für die Bildschirmausgabe ist ein bestimmter Bereich im Arbeitsspeicher reserviert (Der Bildwiederholspeicher im Video-RAM). Dieser Speicher wird regelmäßig ausgelesen und auf dem Bildschirm ausgegeben.

Der Nachteil liegt darin, dass der Programmierer selber darauf achten muss, dass er den Ein- oder Ausgabebereich nicht überschreibt.

Speichergetrennte Verfahren[Bearbeiten]

Sicherer ist es, wenn der Speicher außerhalb liegt und getrennt angesprochen wird. Die Daten werden in Hardwareregister gespeichert. Man kann sie mit bestimmten Assemblerbefehlen auslesen oder in sie schreiben. Diese Befehle lauten meist: IN und OUT.

Diese Ports haben eine (16-Bit-)Nummer mit der sie eindeutig angesprochen werden können.

Beispiel:

in 0x60, ax   ; liest ein Zeichen von der Tastatur

Andere Verfahren[Bearbeiten]

Es gibt noch die Möglichkeit mit Interrupts zu arbeiten. Man lädt in bestimmte Register Daten und löst den Interrupt aus.

Beispiel: Die Funktion 14 des BIOS-Interrupts 10


mov ah, 0x0E       ; Funktion 14
mov al, byte 'A'
xor bx, bx
int 0x10           ; gibt das Zeichen 'A' auf dem Bildschirm aus