FAQ der Newsgroup de.comp.lang.assembler (d.c.l.a.)

Was sind Ports und wo finde ich eine Liste mit deren Bedeutung im Detail?

Neben der Schnittstelle zum Hauptspeicher und den Interrupts sind Portzugriffe eine weitere Möglichkeit, mit der ein Prozessor mit seiner Umgebung kommunizieren kann. Im Gegensatz zum Hauptspeicher dienen die Ports nicht der Zwischenspeicherung von Daten, sondern um zusätzliche Hardware (Grafik, Sound, Festplatten, externe Schnittstellen, ...) ansteuern und abfragen zu können. Üblicherweise belegt ein Zusatzgerät nur wenige Ports, da beim x86 für die Portadresse nur 16 Bit verwendet werden. Geräte, die große Datenmengen übertragen verwenden deshalb die Ports nur zur Programmierung des Gerätes, die eigentlichen Daten werden dann über normale Speicherzugriffe übertragen.

Beim Zugriff auf Ports gibt es folgende Zugriffsarten:
65536 Möglichkeiten (64K) bei 8 Bit (0, 1, 2, 3, ... bis 65535)
32768 Möglichkeiten (32K) bei 16 Bit (0, 2, 4, 6, ... bis 65534)
16384 Möglichkeiten (16K) bei 32 Bit (0, 4, 8, ... bis 65532)

Außerdem ist folgendes zu beachten:

  • Je nach Gerät sind auch gemischte Zugriffe möglich.
  • Es ist bei 16- und 32 Bit Zugriffen auch erlaubt, auf ungerade Ports zuzugreifen, wobei dies allerdings Leistungseinbußen mit sich bringt.
  • Je nach Gerät kann das Auslesen von einzelnen Bytes bzw. Words von einem Port andere Werte liefern als das Auslesen einzelner words/double words von diesem Port. Auch beim Schreiben nach Ports entspricht das Schreiben beispielsweise zweier Words nicht zwangsläufig dem Schreiben eines double words.
  • Portzugriffe sind deutlich langsamer als Zugriffe auf den Arbeitsspeicher.

Eine Liste der Ports liegt Ralf Browns Interruptliste bei:

Online-Version: http://www.ctyme.com/rbrown.htm

Original: http://www.cs.cmu.edu/~ralf/files.html

Um Verwechslungsgefahr vorzubeugen, sei auf folgendes hingewiesen: von Ports hört man auch oft im Zusammenhang mit Netzwerken. Diese Ports haben jedoch mit den Hardwareports nichts zu tun.

Text der ursprünglichen FAQ von de.comp.lang.assembler.x86 Juli 2005