Unterschied zwischen Port- und Speicherzugriff?


19

Kann jemand erklären, was der Unterschied zwischen Anschlusszuordnung und Speicherzuordnung ist und was beides bewirkt? Warum ist ein Port zugeordnet, wie unterscheidet er sich in der Struktur von Speicherzuordnungen, und gibt es einen Grund, warum viele Architekturen beide verwenden? Was ist in diesem Sinne auch ein "Port", weil Port in verschiedenen Kontexten unterschiedliche Bedeutungen haben kann?

Beispiel: Portweiterleitung, Port als Kommunikationsendpunkt, "Port Mapping".

Angenommen, ich schreibe OUT an Port 400h (nur zum Beispiel fiktiv) (wie in x86-64 usw.).

Was oder wohin schreibe ich, wenn es nicht in Erinnerung ist? Wie wird ein "Port" abgebildet und was ist das in diesem Sinne?



Antworten:


24

Memory-Mapped I / O und Port-Mapped I / O sind zwei komplementäre Methoden für I / O.

Speicherabgebildete E / A

In speicherabgebildeten Systemen wird auf das E / A-Gerät zugegriffen, als wäre es ein Teil des Speichers. Loadund StoreBefehle werden zum Lesen und Schreiben von E / A-Geräten ausgeführt, genau wie sie für den Speicher verwendet werden (Port-Mapped verfügt über spezielle Befehle für E / A). Dies bedeutet, dass E / A-Geräte denselben Adressbus wie der Speicher verwenden. Dies bedeutet, dass die CPU auf der Grundlage des Adresswerts auf den Speicher oder das E / A-Gerät verweisen kann . Dieser Ansatz erfordert eine Isolation im Adressraum: Das heißt, für E / A reservierte Adressen sollten nicht für den physischen Speicher verfügbar sein.

Unten sehen Sie ein Bild eines einfachen, grundlegenden Computersystems . In modernen Systemen ist der Fall viel komplizierter.

Bildbeschreibung hier eingeben


Port-Mapped I / O

Laut Wikipedia

Port-Mapping-E / A verwendet häufig eine spezielle Klasse von CPU-Befehlen, die speziell für die Ausführung von E / A verwendet werden. Dies ist bei Intel-Mikroprozessoren mit den Anweisungen IN und OUT zu finden. Diese Anweisungen können ein bis vier Bytes (outb, outw, outl) in ein E / A-Gerät lesen und schreiben. E / A-Geräte verfügen über einen vom allgemeinen Speicher getrennten Adressraum, entweder über einen zusätzlichen "E / A" -Pin an der physischen Schnittstelle der CPU oder über einen gesamten E / A-Bus. Da der Adressraum für die E / A von dem für den Hauptspeicher isoliert ist, wird dies manchmal als isolierte E / A bezeichnet.


Vor- und Nachteile: Da die Peripheriegeräte langsamer als der Speicher sind, kann die gemeinsame Nutzung von Daten- und Adressbussen den Speicherzugriff verlangsamen. Auf der anderen Seite erfordert die CPU durch die Einfachheit der speicherabgebildeten I / O-Systeme weniger interne Logik und dies hilft, schnellere, billigere und stromsparendere CPUs zu implementieren. Die Logik ähnelt der von RISC-Systemen: Reduzieren Sie die Komplexität, erhalten Sie ein dedizierteres und robusteres System, das beispielsweise für eingebettete Systeme sehr praktisch ist.

Im Gegenteil (wieder aus Wiki):

Mit Ports belegte E / A-Befehle sind häufig sehr begrenzt und ermöglichen oft nur einfache Lade- und Speicheroperationen zwischen CPU-Registern und E / A-Ports, sodass beispielsweise zum Hinzufügen einer Konstanten zu einem mit Ports belegten Geräteregister drei erforderlich sind Anweisungen: Lesen Sie den Port in ein CPU-Register, fügen Sie die Konstante zum CPU-Register hinzu und schreiben Sie das Ergebnis zurück in den Port.

Ich empfehle Ihnen dringend, diesen Wiki-Artikel zu lesen, um weitere Informationen zu erhalten.


So beantworten Sie eine Ihrer Fragen:

Was oder wohin schreibe ich, wenn es nicht in Erinnerung ist?

Sie schreiben über den Datenbus in die Register der E / A-Schnittstelle, die später (wenn sie bereit sind) die Daten an das eigentliche E / A-Gerät sendet. Unten sehen Sie ein Bild einer beispielhaften E / A-Geräteschnittstelle.

Bildbeschreibung hier eingeben


Was bedeutet das, was Sie für die Speicherzuordnung schreiben? Meinen Sie, Adressen, die für E / A reserviert sind, befinden sich im Hauptspeicher und sind nicht für Nicht-E / A verfügbar. Es ist klar, dass die E / A-Adressen und Nicht-E / A-Adressen physischer Speicher sind. Es gibt kein Gedächtnis, das nicht physisch ist. (es sei denn, Sie glauben an die Argumente von William Lane Craig, dass ein Ding ein nicht-physisches Gehirn und Gedächtnis haben kann!).
Barlop

1
und wenn Sie dies schreiben "Sie schreiben in die Register der E / A-Schnittstelle über den Datenbus, der später (wenn bereit) die Daten an das eigentliche E / A-Gerät sendet. Unten sehen Sie ein Bild einer Beispiel-E / A Gerät." Sie sind sich nicht sicher, ob sich das E / A-Register im Gerät befindet. Wenn Sie es als Register bezeichnen, hört es sich an, als wäre es im Gerät. Aber dann schreiben Sie "..was später (wenn fertig) die Daten an das eigentliche E / A-Gerät sendet". Es ist also nicht klar, wo Sie sagen, dass diese Speicherorte sind. Ob sie sich innerhalb des Geräts oder außerhalb des Geräts befinden ... oder immer außerhalb des Geräts.
Barlop

1
Heads up: Ich habe diese aus dem zusammengestellt, was ich in der Vorlesung über Mikroprozessoren und einigen aus dem Wiki gelernt habe. Was ich damit meine, wonach Sie in Ihrem ersten Kommentar gefragt haben, ist, dass "E / A-Adressen und Nicht-E / A-Adressen physischer Speicher sind" , wie Sie denken, nicht klar ist . Eigentlich (soweit ich weiß, wie weit ich gelehrt bin) der Adresscode - Decoder aktiviert die IO - Schnittstelle , wenn die IO - Adresse angegeben wird, was bedeutet , dass , wenn Sie eine Adresse angeben, sollte es nicht im Bereich der physikalischen Adresse, zB , $ 0000 - $ 00FF für physische und $ 0100 - $ 01FF für IO (ignorieren Sie den Betrag, kümmern Sie sich nur um Grenzen).
Varaquilex

@barlop Für Ihre zweite Frage, sind Sie hier richtig, was ich meinte war „Unten ist ein Bild eines Beispiels I / O Device Interface “. Ich habe dies in der soeben vorgenommenen Bearbeitung korrigiert. Ich hoffe, dass die Bearbeitung die Verwirrung beseitigt. Wenn nicht, fragen Sie mehr. Ich werde versuchen, so gut ich kann zu antworten.
Varaquilex

1
@barlop Der Ort der Erinnerung ist in den meisten Beiträgen und in der Literatur, auf die ich gestoßen bin, mehrdeutig. Entweder nehmen sie an, dass Sie es bereits wissen, oder sie wissen es nicht wirklich. Ich glaube, die Antwort ist in diesen Worten von LDD3 ch. 9: „I / O - Speicher ist einfach ein Bereich des RAM-ähnlichen Orten , dass das Gerät zur Verfügung stellt . Mit dem Prozessor über den Bus“ (Kursivschrift hinzugefügt) Dh der Speicher und / oder die Register befinden sich auf dem Gerät. E / A-Anschluss und E / A-Speicher sind nur die beiden Möglichkeiten, mit denen das System diese Speicherorte der Software zur Verfügung stellt.
orodbhen

2

Bei speicherabgebildeten E / A (einfach MMIO) erfolgt der Zugriff auf Geräte über Anweisungen, die eigentlich auf den Speicher zugreifen sollen. Jedes Gerät erhält bestimmte Speicheradresse (n). Wenn Sie jedoch versuchen, in diesen Teil des Speichers zu lesen oder zu schreiben, sendet ein bestimmtes Gerät (wahrscheinlich die Northbridge) diesen nur an das zugehörige Gerät. Auch wenn der Computer nicht über genügend Speicher für eine solche Adresse verfügt (da MMIO-Adressen normalerweise sehr hoch sind), spielt es keine Rolle, wie der physische Speicher (derjenige, den Sie auf dem Motherboard sehen, der als RAM bezeichnet wird) ) ist nicht einmal verwandt. Wenn Sie über genügend RAM für die Adresse verfügen, ist sie entweder einer höheren Nicht-E / A-Adresse zugeordnet oder sie geht verloren, sodass Sie dort weder lesen noch schreiben können.

Port-Mapped I / O (einfach PMIO) ist sehr unterschiedlich. Sie haben unterschiedliche Anweisungen zum Lesen und Schreiben von Ports. Es gibt einen Portadressraum wie den Speicheradressraum, in dem Adressen entweder E / A-Adressen sind, die tatsächlich mit den Geräten kommunizieren, oder nur ungültig sind. PMIO kann im Wesentlichen als MMIO mit einem separaten Speicheradressraum nur für E / A betrachtet werden.


"PMIO kann im Wesentlichen als MMIO mit einem separaten Speicheradressraum nur für E / A betrachtet werden." - Der Adressraum ist ein so einfaches und grundlegendes Konzept. Warum wenden Sie eine irreführende Analogie zu Ihrer ansonsten vernünftigen Antwort an? Diese irreführende Analogie ändert nichts an den Tatsachen: ZB kann es neben einem "Speicheradressraum" noch andere Adressräume geben.
Sägemehl

1

Mit Namen wie "E / A-Signal" und "Speicherzuordnung" ist alles weitaus komplizierter als es tatsächlich ist, und gibt der Person daher den Eindruck, dass viel mehr dahinter steckt und es ein fortgeschrittenes Thema abdeckt. Die Tendenz ist jetzt, dass die Leute es als etwas Neues ansehen. Dies ist jedoch weit davon entfernt. Sogar Babbage in den 1830er Jahren fuhr seinen Drucker, dies brauchte ein I / O-Signal, obwohl es von einer Achse und einem Zahnrad gemacht wurde. ZB in den Maschinen von Hero of Alexandria vor 2000 Jahren oder in den Theatern bis in die griechische Zeit zogen sie immer ein Seil aus verschiedenen Seilen, um die Lichter oder die Landschaft zu steuern. Jedes Seil ist wie eine Eingangs- und Ausgangsleine So einfach ist es, dass die Adresse "welche Zeile" ist, dh welches Objekt, welcher Speicher oder welches Gerät, das wir auswählen.

Obwohl große Großrechner, die Gebäude mit Schränken füllten, schon in den 40er Jahren 64-Bit verwendeten und sich daher vor langer Zeit genau so mit E / A-Mapping beschäftigten, verwendeten Konrad Zuse und sein raumgroßer Computer Floating Punkt, der in den 1930er Jahren etwa 20 Dezimalstellen aufwies und Dinge wie seinen Drucker, seine verschiedenen Glühbirnenanzeigen und seine Schalter steuern musste. Aber bei winzigen Mikroprozessoren ist die Geschichte anders, sie wurden erst in den 60er Jahren ins Auge gefasst und erst 1971 gebaut. Alle diese Techniken, die in den 80er Jahren 8-Bit-Logik verwendeten, wurden in den 70er Jahren für Mikroprozessoren in 4-Bit-, in den 60er Jahren 2-Bit-Logik verwendet und wurden verwendet in 16bit in den 90ern Als alle anfingen, einen Computer zu bekommen, und deshalb, weil es jetzt vor ihnen war, anfingen sie, dieses Thema der E / A- und Speicherzuordnung zum ersten Mal zu diskutieren, und es schien etwas Neues zu sein, das mit dem Aufkommen des Internets kam. Dann hatten wir 32-Bit-Computer in den 00ern und 64-Bit-Computer in den 10ern, was zu endlosen Diskussionen über den Speicherausfall von Datenleitungen führte. Um Ihre Frage zu beantworten, spreche ich über Chips, die Elektronikbastler vor 30-40 Jahren gekauft haben, so wie ich es damals getan habe, da die Dinge später so weit fortgeschritten waren, dass ich nicht mit den späteren Chips bauen konnte, sondern mit den Die Prinzipien sind jetzt genauso, die Gates sind nur in größeren Black-Boxed-Chips versteckt, die andere Pins enthalten, die diese Operationen viel paralleler ausführen (z. B. das Aktivieren vieler Oktal-Latches,

Nun, ich weiß nichts über all die neuen Sprachen oder wie es auf modernen PCs ist, aber ich kann Ihnen sagen, wie es früher war, als ich Computer mit Chips baute.

Alles, was E / A-Zuordnung und Speicherzuordnung bedeuten, ist, wenn Sie zum Beispiel für eine Feier eine Ladung Glühbirnen aufgereiht haben und Drähte zu jeder Glühbirne geführt haben, die als Speicherorte bezeichnet werden (dh die Glühbirnen repräsentieren den Speicher im RAM) Ein oder Aus, und wenn Sie Position 0 auswählen, erhalten Sie Draht 0, Position 1, Draht 1, Position 2, Draht 2 usw.) Wenn Sie weitere Drähte hinzugefügt haben, z ist ein Gerät, an das Sie mit dem Befehl OUT eine Ausgabe senden, um es klingeln zu lassen. Aus der Sicht des Computers wird es jedoch als Speicherort angesehen, da es trotzdem als Draht zur MPU eingeht. Wenn ein anderes Kabel hinzugefügt wurde, das ein Schalter war, den Sie extern bedienten, handelt es sich um ein E / A-Gerät, das eine IN-Anweisung für den PC darstellt. Dies wird als E / A-zugeordnete E / A bezeichnet.

Jetzt auf Computern stellen Drähte auf Bussen Adressleitungen oder Datenleitungen dar, ABER sie sind binär, dh mit 2 Drähten können Sie 00 01 10 11 dh 4 Kombinationen 2 ^ 2 haben, also mit 8 Leitungen 2 ^ 8 = 256 Möglichkeiten, mit 20 Zeilen 2 ^ 20 = 1048576 mit 30 Zeilen 2 ^ 30 = 1073741824 (1 Gig) von Möglichkeiten mit 30 Zeilen. Aus diesem Grund heißt es MAPPED und nicht nur E / A und Speicher, sondern auch E / A-Zuordnung und Speicherzuordnung, da Sie die Drähte ALS KOMBINATION und Binärcodierung zuordnen. Wenn Sie also sagen, Sie hätten 2 Drähte, 4 Kombinationen, können diese nicht einfach an Glühbirnen angeschlossen werden (ganz zu schweigen von der Stromverstärkung durch die winzigen Spannungen der MPU und der Vermeidung von Rückkopplungsströmen), sondern die 2 Drähte Um einen Decoder zu durchlaufen (wir verwendeten einen 138, um 3 Zeilen in 8 Zeilen zu decodieren, einen 164, um 4 Binärzeilen in 16 Zeilen zu decodieren. ) Sobald der Decoder diese 2 Zeilen, z. B. A0 und A1 (Adresse0 und Adresse 1 (LINES)) durchlaufen hat, werden 4 Zeilen (Ein oder Aus) für die jeweilige Lampe, die Sie betreiben (im Fall eines Computers, THE MEMORY), aber In einigen Fällen wählen diese Speicherorte stattdessen ein Eingabe- / Ausgabegerät aus und sagen stattdessen "Benutz mich", dh sobald die Daten lokalisiert sind, werden sie wie der Speicher entweder in die eine oder andere Richtung weitergeleitet (unter Verwendung einer ausgeklügelten Tri-State-Logik, um die Spannungen unterwegs abzuschalten) jedes Mal) auf den Datenbusleitungen D0..7 oder D0..31 oder welcher Größe auch immer die Daten auf dem Computer sind (Sie haben einen 2-Bit-, 4-Bit-, 8-Bit-, 16-Bit-, 32-Bit-, 64-Bit-, 128-Bit-, 256-Bit-, Computer, was auch immer Computer, den Sie bauen). Die Daten werden also auf natürliche Weise von den Datenleitungen in den Speicher oder zum E / A-Gerät übertragen (sofern es sich um eine Speicherzuordnung handelt). Dies sollte jedoch nicht mit den IN / OUT-Anweisungen verwechselt werden. DIESES IN und OUT bedeutet, dass von einem ANDEREN E / A-Speicherblock ein spezieller E / A-Speicherblock innerhalb der MPU speziell nur für E / A zugewiesen wurde, dh (nicht speicherabgebildet) dieser E / A-Speicherplatz, den Sie nicht immer erhalten auf einigen mikroprozessoren, zb ich glaube nicht, dass wir es auf einem 6502 hatten, aber wir hatten es auf einem z80. Mehr künstlerische Chips, die nur Memory Mapping verwenden, z. B. in Spielekonsolen usw., sinnvollere, aber uninteressante (im Buch verbliebene) Chips werden auch für den E / A-Bereich verwendet. Die Speicherzuordnung von E / A ist sehr schnell, da sie eine Speicheradressierung enthält (die für den RAM sehr schnell ist). Daher verwendet ein Computer vom Grafiktyp nur eine Speicherzuordnung für die E / A, um die Geschwindigkeit zu ermitteln. E / A zugeordnete E / A werden für langsame Ports, z. B. RS232 oder den parallelen Port, zugewiesen und verwenden die IN OUT-Befehle. e. (nicht speicherabgebildet), diesen I / O-Platz bekommt man auf manchen Mikroprozessoren nicht immer, zB ich glaube nicht, dass wir ihn auf einem 6502 hatten, aber wir hatten ihn auf einem z80. Mehr künstlerische Chips, die nur Memory Mapping verwenden, z. B. in Spielekonsolen usw., sinnvollere, aber uninteressante (im Buch verbliebene) Chips werden auch für den E / A-Bereich verwendet. Die Speicherzuordnung von E / A ist sehr schnell, da sie eine Speicheradressierung enthält (die für den RAM sehr schnell ist). Daher verwendet ein Computer vom Grafiktyp nur eine Speicherzuordnung für die E / A, um die Geschwindigkeit zu ermitteln. E / A zugeordnete E / A werden für langsame Ports, z. B. RS232 oder den parallelen Port, zugewiesen und verwenden die IN OUT-Befehle. e. (nicht speicherabgebildet), diesen I / O-Platz bekommt man auf manchen Mikroprozessoren nicht immer, zB ich glaube nicht, dass wir ihn auf einem 6502 hatten, aber wir hatten ihn auf einem z80. Mehr künstlerische Chips, die nur Memory Mapping verwenden, z. B. in Spielekonsolen usw., sinnvollere, aber uninteressante (im Buch verbliebene) Chips werden auch für den E / A-Bereich verwendet. Die Speicherzuordnung von E / A ist sehr schnell, da sie eine Speicheradressierung enthält (die für den RAM sehr schnell ist). Daher verwendet ein Computer vom Grafiktyp nur eine Speicherzuordnung für die E / A, um die Geschwindigkeit zu ermitteln. E / A zugeordnete E / A werden für langsame Ports, z. B. RS232 oder den parallelen Port, zugewiesen und verwenden die IN OUT-Befehle. Sinnvoller, aber uninteressanter (im Buch geblieben): Chips werden auch für den E / A-Bereich verwendet. Die Speicherzuordnung von E / A ist sehr schnell, da sie eine Speicheradressierung enthält (die für den RAM sehr schnell ist). Daher verwendet ein Computer vom Grafiktyp nur eine Speicherzuordnung für die E / A, um die Geschwindigkeit zu ermitteln. E / A zugeordnete E / A werden für langsame Ports, z. B. RS232 oder den parallelen Port, zugewiesen und verwenden die IN OUT-Befehle. Sinnvoller, aber uninteressanter (im Buch geblieben): Chips werden auch für den E / A-Bereich verwendet. Die Speicherzuordnung von E / A ist sehr schnell, da sie eine Speicheradressierung enthält (die für den RAM sehr schnell ist). Daher verwendet ein Computer vom Grafiktyp nur eine Speicherzuordnung für die E / A, um die Geschwindigkeit zu ermitteln. E / A zugeordnete E / A werden für langsame Ports, z. B. RS232 oder den parallelen Port, zugewiesen und verwenden die IN OUT-Befehle.

Wenn Sie nun statt zwei Drähte hinzuzufügen tatsächlich zwei Drähte ersetzt haben, die ursprünglich zu Glühbirnen gehörten und einige dieser Glühbirnen nahmen und durch andere Dinge ersetzten, z. B. eine Glocke an einem und einen Schalter an einem anderen, werden diese jetzt nicht referenziert (ausgewählt) ) Mit den Befehlen IN und OUT wird auf sie verwiesen, indem auf diesen bestimmten Speicherort zugegriffen wird, der die Drähte auswählt (die ursprünglich Glühbirnen waren). Das ist also Memory Mapped I / O.

Memory Mapped I / O bedeutet, dass der eigentliche Adressbus, der normalerweise in den Speicher (RAM) fließt, auch mit ANDEREN Decodierern (Logikdecodierern) verbunden ist. Wenn er die bestimmte binäre Kombination von Adresssignalen erkennt, erzeugt er einen High-Ausgang , (wenn Sie z. B. eine Last von und und keine Gates hatten und sagten, wenn dies und nicht das und so weiter, unter Verwendung der Pins A0 ... A20 oder welcher Größe auch immer Ihr Adressbus ist), dann AKTIVIERT dieses hohe Signal einen Latch, (für ein bestimmtes Gerät, wie einen seriellen Anschluss, einen parallelen Anschluss), übergibt dieses Latch die Daten auf dem Datenbus an das E / A-Gerät. Dies dient zum Schreiben in das E / A-Gerät. Das Lesen funktioniert in umgekehrter Reihenfolge: Das E / A-Gerät gibt die Daten zurück, und wenn ich mich recht entsinne, sendet es genau dieselbe Adresscode-Kombination auf die Adressleitungen.

Ich nehme an, das muss heute genauso funktionieren, außer dass es sich um weitaus mehr Daten- und Adressleitungen handelt.

Sie verdrahten die E / A buchstäblich mit den Adressleitungen. Daher wird die E / A effektiv in den Speicherbereich abgebildet, als wäre es ein Speicher. Durch einen anderen Zwischenspeicher wird jedoch verhindert, dass die Adressstifte gleichzeitig auf den RAM zugreifen, sodass keine Spannungen von zwei Adress- oder Datenquellen auf derselben Leitung auftreten und die Chips beschädigt werden.

Mit dem IN- und OUT-Befehl hatten wir diesen vor 40 Jahren auf dem z80-Chip. Dies gilt für spezielle Fälle, in denen der Chip die E / A selbst auf andere Weise behandelt, dh, er ist nicht speicherabgebildet. (dh mit zugeordnetem Speicher lesen oder schreiben Sie nur in den Speicherort, aber mit IN und OUT teilen Sie der CPU bereits mit, dass es sich um ein E / A-Signal und nicht um einen Speicher handelt). Mit dem IN / OUT-Befehl hat dies also einen eigenen E / A-Adressraum (der zusätzlich zum Speicher des RAMs vorhanden ist). Dieser E / A-RAM hat, wie es scheint, einen Satz von Adressen, mit der Ausnahme, dass Sie über einen an diese E / A-Adressen angeschlossenen Decoder direkt auf das Gerät zugreifen und nicht über die Standardadressenstifte auf das E / A-Gerät zugreifen. Dies gilt für den IN / OUT-Befehl.

Diese werden in diesem Fall am besten als ASCII-Code-Zeichenfolgen für Buchstaben und Zahlen übergeben. Diese Befehle sind genau so, als ob Sie die Anweisungen IN und OUT in einer Schleife verwendet hätten, bei der die Anzahl der Zeichenfolgen die Länge ist.

Wenn Sie beispielsweise auf den PC-Lautsprecher zugreifen, geben Sie mit OUT jeweils nur ein Datenelement weiter.

Wenn Sie vom parallelen Port lesen, würden Sie IN ausführen und den Code für die E / A-Adresse des Ports verwenden. Wenn Sie darauf schreiben, um z. B. alte Drucker oder Roboter mit elektronischen Signalen anzutreiben, verwenden Sie den Befehl OUT. Der parallele Port und der serielle Port (alter RS232) sind typische Ports, die verwendet wurden. Die RS232-Schnittstelle besteht aus seriellen Daten, nur ein Bit darf ein- oder ausgehen. Wenn Sie also von einer RS232-Schnittstelle lesen, haben Sie nur 1 Bit des Bytes, das für die Ausgabe relevant ist. Die Baudrate beträgt für eine RS232-Karte maximal 17 kHz, aber diese diente zur Ansteuerung von Elektronik. Früher baute ich RS232-Schaltkreise, um z. B. Spannungen auszulesen oder PIC-Mikrocontroller anzusteuern. Jeder Port heißt zB COM1 COM2 COM3 COM4 und hat eine E / A-Adresse. Ich bin mir hier nicht sicher, aber sie ähneln zB 3F8h 378h (h = hex address)

Ich bin mir über die modernen Anschlüsse nicht sicher, aber wenn Sie auf USB schreiben, ist dies höchstwahrscheinlich eine speicherabgebildete E / A für eine höhere Geschwindigkeit.

Der PS / 2-Tastaturanschluss verwendet meines Erachtens den IN-Befehl, um Daten von der Tastatur zu lesen. Dies ersetzt die alte RS232, hat aber eine etwas andere Spezifikation, glaube ich.

Ein Festplattenlaufwerk war normalerweise speicherabgebildet, vermutlich ist dies auch jetzt noch der Fall, dh Sie betreiben kein Festplattenlaufwerk mit IN / out-Anweisungen, da diese zu langsam sind. Die Ports sind ohnehin langsam, es spielt also keine Rolle, z. B. ist ein Drucker so langsam, wie es die Datenrate erfordert, im Vergleich zu den hervorragenden 200 Megabyte / Sekunde, die von einer Festplatte benötigt werden. Ein Lautsprecher benötigt nur die Frequenz der Tonzeiten ca. 10 oder 20, sagen wir 20kHz wären ausreichend für einen Summer, daher ist es I / O. Langsame Dinge verwenden I / O, die IN / OUT-Anweisungen. Daher ist der USB-Speicher jetzt wahrscheinlich zugeordnet. Sie müssen ihn überprüfen.

Ein besserer Weg, es zu verstehen, ist dies. Auf alten Computern in den 80er Jahren wollte man manchmal ein Gerät steuern, das man gebaut hatte, und hatte keine Spezifikation für die Ausgangsanschlüsse (wie in jenen Tagen Hersteller dies versteckt, so dass bestimmte Unternehmen, z. B. Joystick- und Cartridge-Unternehmen) in den USA weiterkommen konnten Markt durch ein Geschäft). Was Sie tun mussten, war, den Computer zu öffnen und Drähte buchstäblich an einigen Stellen des Adressbusses zu löten, z. B. drei Drähte in sicherem Abstand (um den Chip nicht durch Hitze zu beschädigen) Punkte, die durch das Platinenlayout mit z. B. den Pins A15, A7 und A1 des Mikroprozessors verbunden sind. Und Sie müssten normalerweise auch eine MREQ-Leitung (eine Speicheranforderungsleitung und / oder die RD / WR-Leitung, um ein ordentlicheres Signal zu erzeugen, und das in die und oder nicht Logik einfügen, Aber wenn Sie schlau wären, könnten Sie es einfach mit den Adressleitungen tun.) Und dann haben Sie diese drei Drähte + dieses zusätzliche Ready-Signal (z. B. MREQ RD- oder WR-Leitung) verbunden, um ein aktives Low oder High zu erhalten (was möglicherweise ein zusätzliches NOT erfordern würde Gate hier) um zu sagen, dass DATA JETZT auf der Leitung bereit ist) durch ein AND-Gate mit 4 Eingängen, das eine Ausgabe an eine LED über einen 200-Ohm-Widerstand gab, haben Sie Ihre eigene speicherabgebildete Hochgeschwindigkeits-E / A an eine LED , die Sie durch einen SR-Latch oder einen D-Latch zwischenspeichern könnten, um sie in einem 1-Bit-Speicher extern auf einer Platine zu speichern. Hier ist 15 die 32K-Linie, 7 ist die 64-Linie, 1 ist die 2-Linie (binär arbeitet in Potenzen von 2, also ist A1 2 ^ 1, A7 ist 2 ^ 7 und A15 ist 2 ^ 15). Also, wenn Sie adressierte Stelle 32768 + 64 + 2 = 32834 = F041 in hexadezimaler Schreibweise, unter Verwendung von LDA oder STA oder LD auf alten MPUs im Assembler, würden Sie auf diese LED ausgeben, es würde hell aufleuchten, wenn der Widerstand etwa 100 Ohm betragen würde. Sie haben also speicherabgebildete E / A-Vorgänge durchgeführt, die so einfach wie möglich sind. Sie können dies heute tun, indem Sie sie auf die gleichen mpu-Adressleitungen löten. Aber Sie würden es jetzt wegen der Delikatesse der Schaltkreise nicht tun. Sie können aber auch die Datenleitungen D0..7 (früher) verbinden oder jetzt d0..31 für 32-Bit auf einem alten 486-PC sagen. Wenn Sie dann diesen Ort im Maschinencode ansprechen, indem Sie den Akku mit dem Wert 8 laden (mov ax, 8 nowadays) oder diesen Akku-Wert an einem Adressort speichern (mov F041h, ax accumulator), würden Sie heute AUCH das veranlassen, zu kommen Beachten Sie, dass die 8 in diesem Beispiel dem Datenbus entspricht. In diesem speziellen Fall leiten wir keine Daten weiter. Wir aktivieren nur das spezielle Gerät. (LED leuchtet, wenn wir DIESES E / A-Gerät ausgewählt haben.) hier nur eine LED), In diesem Beispiel spielt es keine Rolle, welche Zahl wir mit dieser MOV-Axt-8-Anweisung haben. Es könnte z. B. MOV-Axt 243 sein, und wir würden die LED in der Zeile F041h immer noch aktivieren, wenn wir dann MOV F041h as ausführen da wir die gleiche Adresse verwenden. Sie sehen, es gibt Adress- und Datenleitungen. Wenn Sie also 3F8 in COM1 adressieren oder wie auch immer die Adresse lautet, sendet die E / A-Speicherzuordnung einfach ein Signal an einen Port, z. B. ps / 2, und ein und ein Gate prüfen, ob Sie 1110000100 auf den Leitungen haben, dh 11 ist 3 1000 ist F und 0100 ist 8, siehe Umwandlung von Binär in Hex. Wenn an den Bitpositionen, an denen eine 1 vorhanden ist, hohe Spannungen auftreten, wird der Port, z. B. rs232 oder ps / 2, auf aktiv gesetzt, dh aktiviert, dies aktiviert die Latches durch das CE-Chip-Aktivierungssignal oder den CS-Chip einfach auswählen. Wenn wir dann den Befehl mov F041h ausführen, könnte dies beispielsweise mov ax, 243 sein, und wir würden die LED in der Zeile F041h immer noch aktivieren, da wir dieselbe Adresse verwenden. Sie sehen, es gibt Adress- und Datenleitungen. Wenn Sie also 3F8 in COM1 adressieren oder wie auch immer die Adresse lautet, sendet die E / A-Speicherzuordnung einfach ein Signal an einen Port, z 3 1000 ist F und 0100 ist 8, siehe Umwandlung von Binär in Hex. Wenn an den Bitpositionen, an denen eine 1 vorhanden ist, hohe Spannungen auftreten, wird der Port, z. B. rs232 oder ps / 2, auf aktiv gesetzt, dh aktiviert, dies aktiviert die Latches durch das CE-Chip-Aktivierungssignal oder den CS-Chip einfach auswählen. Wenn wir dann den Befehl mov F041h ausführen, könnte dies beispielsweise mov ax, 243 sein, und wir würden die LED in der Zeile F041h immer noch aktivieren, da wir dieselbe Adresse verwenden. Sie sehen, es gibt Adress- und Datenleitungen. Wenn Sie also 3F8 in COM1 adressieren oder wie auch immer die Adresse lautet, sendet die E / A-Speicherzuordnung einfach ein Signal an einen Port, z. B. ps / 2, und ein und ein Gate prüfen, ob Sie 1110000100 auf den Leitungen haben, dh 11 ist 3 1000 ist F und 0100 ist 8, siehe Umwandlung von Binär in Hex. Wenn an den Bitpositionen, an denen eine 1 vorhanden ist, hohe Spannungen auftreten, wird der Port, z. B. rs232 oder ps / 2, auf aktiv gesetzt, dh aktiviert, dies aktiviert die Latches durch das CE-Chip-Aktivierungssignal oder den CS-Chip einfach auswählen. da verwenden wir ja die selbe adresse. Sie sehen, es gibt Adress- und Datenleitungen. Wenn Sie also 3F8 in COM1 adressieren oder wie auch immer die Adresse lautet, sendet die E / A-Speicherzuordnung einfach ein Signal an einen Port, z. B. ps / 2, und ein und ein Gate prüfen, ob Sie 1110000100 auf den Leitungen haben, dh 11 ist 3 1000 ist F und 0100 ist 8, siehe Umwandlung von Binär in Hex. Wenn an den Bitpositionen, an denen eine 1 vorhanden ist, hohe Spannungen auftreten, wird der Port, z. B. rs232 oder ps / 2, auf aktiv gesetzt, dh aktiviert, dies aktiviert die Latches durch das CE-Chip-Aktivierungssignal oder den CS-Chip einfach auswählen. da verwenden wir ja die selbe adresse. Sie sehen, es gibt Adress- und Datenleitungen. Wenn Sie also 3F8 in COM1 adressieren oder wie auch immer die Adresse lautet, sendet die E / A-Speicherzuordnung einfach ein Signal an einen Port, z. B. ps / 2, und ein und ein Gate prüfen, ob Sie 1110000100 auf den Leitungen haben, dh 11 ist 3 1000 ist F und 0100 ist 8, siehe Umwandlung von Binär in Hex. Wenn an den Bitpositionen, an denen eine 1 vorhanden ist, hohe Spannungen auftreten, wird der Port, z. B. rs232 oder ps / 2, auf aktiv gesetzt, dh aktiviert, dies aktiviert die Latches durch das CE-Chip-Aktivierungssignal oder den CS-Chip einfach auswählen. 11 ist 3 1000 ist F und 0100 ist 8, siehe Umwandlung von Binär in Hex. Wenn an den Bitpositionen, an denen eine 1 vorhanden ist, hohe Spannungen auftreten, wird der Port, z. B. rs232 oder ps / 2, auf aktiv gesetzt, dh aktiviert, dies aktiviert die Latches durch das CE-Chip-Aktivierungssignal oder den CS-Chip einfach auswählen. 11 ist 3 1000 ist F und 0100 ist 8, siehe Umwandlung von Binär in Hex. Wenn an den Bitpositionen, an denen eine 1 vorhanden ist, hohe Spannungen auftreten, wird der Port, z. B. rs232 oder ps / 2, auf aktiv gesetzt, dh aktiviert, dies aktiviert die Latches durch das CE-Chip-Aktivierungssignal oder den CS-Chip einfach auswählen.

Bei einem Latch handelt es sich um den E-Enable-Pin oder die OE-Aktiv-Low-Output-Freigabe. Dh mit dem oben beschriebenen Beispiel verwenden wir die Adressen, um (durch Dekodieren) auszuwählen, welches E / A-Gerät wir verwenden möchten (dh in dem Beispiel leuchtet die LED, wenn dieses E / A-Gerät ausgewählt ist. Dies ist also die Aktivierungsleitung DANN werden nach Auswahl des E / A-Geräts DANN Daten vom Datenbus (früher D0..7 oder heute D0..63 für einen 64-Bit-Computer) über die Oktal-Latches 373 des alten Geräts übertragen Tage sind dies D-Flip-Flop-Schaltkreise, die die Daten innerhalb der Flip-Flops speichern.Mit einer aktiven hohen Taktflanke werden die Daten durchlaufen und gespeichert.Diese Taktflanke kommt vom 'DATA RDY'-Signal des Datensignals Dies hat verschiedene Namen, ich weiß nicht, wie der Name jetzt ist. Und sie verwenden bidirektionale Latches, um Daten in beide Richtungen oder in drei Zuständen zu steuern, sodass sich die Datenleitungen im hochohmigen Zustand befinden, wenn das E / A-Gerät nicht verwendet wird. Wenn Sie also das E / A-Gerät mit einer Kombination auf den Adressleitungen auswählen, ist dies die Nummer, z. B. 3f8h in OUT 3F8h, 7, und die Daten, hier im Beispiel 7, sind die Daten, die auf den Datenleitungen in übergeben werden Mit dem Befehl OUT werden die Daten an den Daten-Latch und an das E / A-Gerät weitergeleitet. Wenn Sie IN hätten, würden Sie einen Befehl ausführen, z. B. IN 3f8h, 800h (ich nehme an, aber ich kenne die Syntax von x86-Assembler nicht). Ich meine, für IN geben Sie die Daten von der ein Datenleitungen (nach Auswahl der Adresse, z. B. hier 3f7h, die DIESES E / A-Gerät auswählt), stammen diese Daten vom E / A-Gerät, über die D-Flip-Flops im Daten-Latch (eines für jedes Bit der Datenbusleitungen) und wird in die Pins D0..7 oder (D0..63 bei modernen PCs) der MPU-Mikroverarbeitungseinheit eingegeben ). In diesem Beispiel habe ich IN 3f8h, 800h eingegeben, um zu zeigen, dass die eingegangenen Daten in der Adresse 800h gespeichert werden. Die Syntax von x86 ist meiner Meinung nach anders. Sie müssten wahrscheinlich IN 3f8h, ah oder etwas Ähnliches tun, dh zuerst in ein Register mit den eingehenden Daten, dann würden Sie MOV 800h, ah, dh die Daten in den Speicher verschieben Speicherort im RAM, (wenn Sie ihn speichern wollten), oder machen Sie etwas anderes mit ah usw. ah ist ein Beispielregister, es könnte ein beliebiges, al, bh, bl usw. sein, aber überprüfen Sie die Syntax, die jedes Assemblersystem hat etwas anders, ich bin kein Experte für x86. Auch hier verwende ich 3f8h als Beispiel-E / A-Adresse, es gibt Hunderte,

Während beim Zugriff auf den Speicher (RAM, z. B. statische 64-Byte-RAMs und dynamische RAMs in den 70er-Jahren, 8-KByte-SRAMs und DRAMs in den 80er-Jahren) in den 90er-Jahren SIMMS-Zeilen mit jeweils einigen Megabyte (Single-In-Line-Speichermodul) vorhanden waren ist in der Form von DDR-Modulen mit DIMMs, Dual-In-Line-Speichermodulen, ich habe es nicht überprüft, aber die neuesten haben wahrscheinlich jeweils ein paar Gigabyte auf jedem kleinen Chip), wenn es sich nicht um eine E / A-Adresse handelt (sehr Wenige Adressen sind E / A-Adressen. Heutzutage ist die Wahrscheinlichkeit, dass sich der Speicher millionenfach im Adressraum befindet, höher als bei E / A auf einem modernen PC. Sie verwenden immer noch dieselben Anweisungen zum Lesen und Schreiben von Daten in den Speicher Ansteuern einiger externer Logikschaltungen, die nach diesen Bits suchen, stattdessen werden diese Adress- und Datenpins direkt mit den RAM-Chips verdrahtet.

Im Maschinencode sehen die E / A- und Speicheradressen genauso aus, als wären sie beide Speicherzugriffe, aber was physikalisch vor sich geht, ist in der tatsächlichen elektronischen Schaltung völlig anders.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.