I/O ports



  • hi Leute 🙂

    seitdem ich mit asm angefangen habe hab ich zwei Befehle noch nie
    benutzt: 'IN' sowie 'OUT'.
    Und zwar aus einem einfachen Grund: Ich verstehe sie nicht ganz ;P

    Hierzu ein paar Fragen:
    1.)Was kann man sich (physisch) unter den Portnummern vorstellen?
    2.)Wozu über Ports? Man kann doch in den Datenadressraum direkt schreiben?
    oder gibts da nachteile?

    Für eure Antwort wäre ich da sehr dankbar 🙂
    mfg 🙂



  • Hi.

    Zu 1:
    Portnummern sind Addressen. Im Grunde genau wie Speicheraddressen, nur dass ueber I/O-Ports explizit anderen Perepheriegeraeten Daten geschickt werden und nicht der Speicher angesprochen wird.
    Funktioniert auch praktisch in etwa wie beim Speicher:
    Beim ISA-/PCI-Bus gibt es Addressleitungen, ueber die die gerade angesprochene Port-Adresse geschickt wird und Datenleitungen.
    Sinnvollerweise gibt es bei beiden BUS-Systemen auch die Moeglichkeit, angeschlossene Hardware ueber Speicheradressen anzusprechen (zB. FrameBuffer bei Grafikkarten) - hier wird dann AFAIR ueber eine Zusatzleitung entschieden, ob eine Port- oder Speicher-Addresse angesprochen wird.

    Zu 2:
    Das Ganze hat (wie vieles beim PC) wahrscheinlich groesstenteils historische Gruende. 😃
    Der Speicherplatz war nunmal sehr begrenzt und man hatte nur 20Adressleitungen. Zudem gab es kein Plug&Play, man haette die Speicheradressen ueber Jumper o.Ae. manuell einstellen muessen und es gab fuer das BIOS/OS keinen Standard, um die Hardware ein-/auszuschalten, bzw. zu identifizieren. Das waere irgendwann ziemlich unuebersichtlich, unpraktisch und instabil geworden, wenn sich neben Grafikkarte, BIOS und Programmcode noch haufenweise unbekannte/zunaechste mal unberechenbare Hardware irgendwo in diesem begrenzten Addressraum tummelt.
    Da ist die Loesung mit den Ports doch um einiges sauberer - frei benutzbarer Speicher und Hardwareports sind eindeutig getrennt.
    Heute, wo wir 32Bit und sogar 64Bit-Addressen haben, macht das freilich nicht mehr unbedingt Sinn, deshalb mappen auch immer oefter auch einfache Hardwareteile wie Soundkarten ihren I/O-Space auch in den Speicher.



  • Vielen dank für die umfangreiche Antwort.

    Nobuo T schrieb:

    Das Ganze hat (wie vieles beim PC) wahrscheinlich groesstenteils historische Gruende. 😃
    Der Speicherplatz war nunmal sehr begrenzt und man hatte nur 20Adressleitungen. Zudem gab es kein Plug&Play, man haette die Speicheradressen ueber Jumper o.Ae. manuell einstellen muessen und es gab fuer das BIOS/OS keinen Standard, um die Hardware ein-/auszuschalten, bzw. zu identifizieren. Das waere irgendwann ziemlich unuebersichtlich, unpraktisch und instabil geworden, wenn sich neben Grafikkarte, BIOS und Programmcode noch haufenweise unbekannte/zunaechste mal unberechenbare Hardware irgendwo in diesem begrenzten Addressraum tummelt.
    Da ist die Loesung mit den Ports doch um einiges sauberer - frei benutzbarer Speicher und Hardwareports sind eindeutig getrennt.
    Heute, wo wir 32Bit und sogar 64Bit-Addressen haben, macht das freilich nicht mehr unbedingt Sinn, deshalb mappen auch immer oefter auch einfache Hardwareteile wie Soundkarten ihren I/O-Space auch in den Speicher.

    Das wird mir doch so einiges klar...
    Da ich mich bis dahin mit I/0 ports gar nicht beschäftigt habe, war mir nicht mal das bewusst:

    Nobuo T schrieb:

    Da ist die Loesung mit den Ports doch um einiges sauberer - frei benutzbarer Speicher und Hardwareports sind eindeutig getrennt.

    THX 🙂


Anmelden zum Antworten