Sie können das Konzept eines E / A-Registers mit einem generischen Hardwareregister vergleichen, da ein Register ein beliebiger Begriff ist, der für einen digitalen Speicherbereich verwendet wird. Ein Register kann als Akkumulator fungieren, Ausführungsinformationen enthalten, einen Eingabe- / Ausgabepuffer zwischen Geräten bereitstellen usw. Dies bedeutet auch, dass ein Prozessorregister nur eine Art Hardwareregister ist.
Ein E / A-Register ist also auch eine Abstraktion eines Registers - es enthält Zwischendaten, die sich zwischen Komponenten bewegen. Prozessoren nicht haben spezifisches I / O - Register, sondern vielmehr verschiedene generische Register, die die gleiche Aufgabe erfüllen können (die dazu verwendet werden, beispielsweise wenn das System verwendet Memory Mapped I / O ). Diese werden verwendet, um einen gemeinsamen Schnittstellenbus zwischen der CPU und dem Speicher des Systems bereitzustellen, im Fall von MMIO jedoch den Zugriff auf den Speicher externer Geräte außerhalb des eigentlichen Adressbusses zulassen.
Wie würde ein Programmierer dies tatsächlich tun? Sie müssten bestimmen, wie das externe Gerät auf den Adressbus des Systems abgebildet wird, und dann eines der verschiedenen x86-Register verwenden, um die Adresse (in einem Index- / Zeigerregister) zu speichern. Dieses Register könnte dann (mit Maschinenbefehlen ) verwendet werden, um Daten von einem anderen Register im Prozessor zu einem Register im Gerät zu übertragen.
Wenn die CPU MMIO nicht unterstützt (oder der Programmierer entscheidet, sie nicht zu verwenden), können im Fall von x86 auch spezielle Anweisungen für die E / A von einem Port (der im Wesentlichen ein anderer Bus ist) vorhanden sein. Diese Anweisungen ( IN
und OUT
) funktionieren ähnlich wie die MOV
Anweisungen - sie verwenden sogar dieselben Prozessorregister. Der einzige Unterschied besteht darin, was die Adresse in den Index- / Zeigerregistern bedeutet (da diese Register eine andere E / A-Adresszuordnung verwenden ).
Deshalb sage ich, dass E / A-Register eine Abstraktion von anderen CPU-Registern sind - sie sind eins in derselben Sache. Die Daten bewegen sich immer noch in den Prozessor hinein und aus ihm heraus in dieselben Register, unabhängig davon, ob sie für Zwischenergebnisse, für die Datenübertragung zum / vom RAM oder für den Zugriff auf externe Hardware verwendet werden.
Abhängig vom Motherboard-Layout kann eine CPU über den eigentlichen Adressbus selbst oder einen anderen Bus, der mit einem Port der CPU verbunden ist, auf den Speicher externer Geräte zugreifen. All dies wird jedoch normalerweise von der Northbridge des Motherboards für den Speicherzugriff und von der Southbridge für den Peripheriezugriff (z. B. Videokarten, Maus / Tastatur) geregelt .
Wenn Sie mit dem DMA- Konzept vertraut sind, können externe Peripheriegeräte Register für den E / A-Zweck des Computers besitzen, die speziell für E / A-Zwecke bestimmt sind. Beachten Sie, dass DMA grundsätzlich jeden CPU-Eingriff umgeht, sodass das Konzept eines Prozessorregisters hier nicht anwendbar ist.
Schlusswort: Jedes Gerät in Ihrem Computer verfügt über ein Register, da kein Gerät direkt an die CPU angeschlossen ist. Wenn dies der Fall wäre, würden Sie CPU-Taktzyklen vergeuden, die die Daten auf dem Bus halten, bis das Gerät genügend Zeit hat um es zu benutzen (die CPU hat normalerweise die schnellste Uhr in jedem System). Dies ist nur ein Grund, warum Geräte einen Ort zum Speichern von Daten benötigen, bevor sie damit arbeiten können - und das ist im Wesentlichen alles, was ein Register ist.