Maschinensprache i8086/ I/O-Ports
Theorie:
Einleitung – Maschinensprache –
Assembler – Zahlensysteme –
RAM-Adressen – BWS – Debug –
CPU-Register – Einfache Befehle – Stringbefehle – Interrupts –
I/O-Ports
Versuch:
BWS1 – BWS2 –
Hallo Welt – Bootsektor – MBR
Nützlich:
Befehlsliste – PAUSE – Filter
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