¿Diferencia entre acceso mapeado de puertos y acceso mapeado de memoria?

19

¿Alguien puede explicar cuál es la diferencia entre el mapeo de puertos y el mapeo de memoria, y qué logran ambos? ¿Por qué hay un puerto asignado, cómo difiere en estructura de los mapas de memoria, y hay alguna razón por la cual muchas arquitecturas usan ambos? Además, ¿qué es un "puerto" en este sentido, porque el puerto puede significar cosas diferentes en diferentes contextos?

Ejemplo: reenvío de puertos, puerto como punto final de comunicaciones, "mapeo de puertos".

Digamos que escribo OUT al puerto 400h (ficticio; solo por ejemplo) (como en x86-64, etc.).

¿A qué o dónde escribo si no está en la memoria? ¿Cómo se mapea un "puerto", y qué es en este sentido?

Varaquilex
fuente

Respuestas:

24

La E / S mapeada en memoria y la E / S mapeada en puerto son dos métodos complementarios para E / S.

E / S mapeadas en memoria

En los sistemas mapeados en memoria, se accede al dispositivo de E / S como si fuera parte de la memoria. Loady los Storecomandos se ejecutan para leer y escribir en dispositivos de E / S, al igual que se usan para la memoria (el mapa de puertos tiene comandos especiales para E / S). Esto significa que los dispositivos de E / S usan el mismo bus de direcciones que la memoria, lo que significa que la CPU puede referirse a la memoria o al dispositivo de E / S en función del valor de la dirección. Este enfoque requiere aislamiento en el espacio de direcciones: es decir, las direcciones reservadas para E / S no deben estar disponibles para la memoria física.

A continuación se muestra una imagen de un sistema informático simple y básico . El caso es mucho más complicado en los sistemas contemporáneos.

ingrese la descripción de la imagen aquí


E / S asignadas a puerto

De acuerdo con Wikipedia

Las E / S asignadas a puertos a menudo usan una clase especial de instrucciones de CPU específicamente para realizar E / S. Esto se encuentra en los microprocesadores Intel, con las instrucciones IN y OUT. Estas instrucciones pueden leer y escribir de uno a cuatro bytes (outb, outw, outl) en un dispositivo de E / S. Los dispositivos de E / S tienen un espacio de direcciones separado de la memoria general, ya sea mediante un pin adicional de "E / S" en la interfaz física de la CPU o un bus completo dedicado a E / S. Debido a que el espacio de direcciones para E / S está aislado del de la memoria principal, esto a veces se denomina E / S aislada.


En cuanto a las ventajas y desventajas: dado que los dispositivos periféricos son más lentos que la memoria, compartir buses de datos y direcciones puede ralentizar el acceso a la memoria. Por otro lado, por la simplicidad de E / S que proporcionan los sistemas mapeados en memoria, la CPU requiere menos lógica interna y esto ayuda a implementar CPU más rápidas, más baratas y que consuman menos energía. La lógica es similar a la de los sistemas RISC: reduzca la complejidad, obtenga un sistema más dedicado y robusto que sea bastante útil para los sistemas integrados, por ejemplo.

Por el contrario (nuevamente de Wiki):

Las instrucciones de E / S asignadas a puertos a menudo son muy limitadas, y a menudo proporcionan solo operaciones simples de carga y almacenamiento entre registros de CPU y puertos de E / S, de modo que, por ejemplo, agregar una constante a un registro de dispositivo asignado a puertos requeriría tres instrucciones: lea el puerto en un registro de CPU, agregue la constante al registro de CPU y escriba el resultado en el puerto.

Le recomiendo que lea ese artículo wiki para obtener más información.


Para responder una de sus preguntas:

¿A qué o dónde escribo si no está en la memoria?

Está escribiendo en los registros de la interfaz de E / S a través del bus de datos, que luego (cuando esté listo) envía los datos al dispositivo de E / S real. A continuación se muestra una imagen de un ejemplo de interfaz de dispositivo de E / S.

ingrese la descripción de la imagen aquí

Varaquilex
fuente
¿Qué significa esto que usted escribe para la memoria asignada? "Este enfoque requiere aislamiento en el espacio de direcciones: es decir, las direcciones reservadas para E / S no deberían estar disponibles para la memoria física". ¿Quiere decir que las direcciones reservadas para E / S están en la memoria principal y no están disponibles para no E / S? Claramente, las direcciones IO y las direcciones no IO son memoria física. No existe tal cosa como la memoria que no sea física. (¡a menos que sea un creyente en los argumentos de William Crane Craig, es decir, que una cosa puede tener un cerebro y una memoria no físicos!).
barlop
1
y cuando escribe esto "Está escribiendo en los registros de la interfaz de E / S a través del bus de datos, que luego (cuando esté listo) envía los datos al dispositivo de E / S real. A continuación se muestra una imagen de un ejemplo de E / S dispositivo." No tiene claro si el "registro" de E / S está en el dispositivo, supongo que si lo llama registro, parece que está en el dispositivo. Pero luego escribe "... que luego (cuando esté listo) envía los datos al dispositivo de E / S real". Por lo tanto, no está claro dónde dice que están estas ubicaciones de memoria. Si están dentro del dispositivo, o si están fuera del dispositivo ... o alguna vez fuera del dispositivo.
barlop
1
Aviso: compilé los que aprendí en la conferencia sobre microprocesadores y algunos de Wiki. Dicho esto, lo que quiero decir con lo que preguntaste en tu primer comentario es que: "Las direcciones IO y las direcciones que no son IO son memoria física" no está claro como piensas. En realidad (por lo que yo sé, en lo que se me enseña) el decodificador de código de dirección activa la interfaz IO cuando se especifica la dirección de IO, lo que significa que cuando se proporciona una dirección, se debe no estar en el rango de dirección física, por ejemplo, , $ 0000 - $ 00FF por físico y $ 0100 - $ 01FF por IO (ignore la cantidad, solo cuide los límites).
Varaquilex
@barlop Para su segunda pregunta, está aquí, lo que quise decir fue "A continuación se muestra una imagen de un ejemplo de interfaz de dispositivo de E / S ". Corregí esto en la edición que acabo de hacer. Espero que la edición elimine la confusión. Si no, pregunta más. Trataré de responder lo mejor que pueda.
Varaquilex
1
@barlop El punto de ubicación de la memoria es ambiguo en la mayoría de las publicaciones y la literatura que he encontrado. O suponen que ya lo sabes, o realmente no lo saben. Creo que la respuesta está en estas palabras de LDD3 ch. 9: "La memoria de E / S es simplemente una región de ubicaciones similares a RAM que el dispositivo pone a disposición del procesador a través del bus". (cursiva agregada) Es decir, la memoria y / o los registros están en el dispositivo. El puerto de E / S y la memoria de E / S son solo las 2 formas en que el sistema pone esas ubicaciones a disposición del software.
orodbhen
2

En E / S asignadas a memoria (simplemente MMIO), se accede a los dispositivos mediante instrucciones que en realidad están destinadas a acceder a la memoria. Cada dispositivo obtiene ciertas direcciones de memoria. Sin embargo, cuando intenta leer o escribir en esta parte de la memoria, un determinado dispositivo (probablemente el puente norte) simplemente lo envía al dispositivo relacionado. Incluso si la computadora no tiene suficiente memoria para dicha dirección (ya que las direcciones MMIO suelen ser muy altas), no importa como la memoria física (que es la que ve cuando mira la placa base, la conocida como RAM ) ni siquiera está relacionado. Si tiene suficiente RAM para la dirección, está asignada a una que no sea de E / S más alta, o simplemente se pierde, lo que significa que no puede leer ni escribir allí.

La E / S asignada a puertos (simplemente PMIO) es muy diferente. Tiene diferentes instrucciones para leer y escribir en los puertos. Hay un espacio de direcciones de puerto como el espacio de direcciones de memoria donde las direcciones son direcciones de E / S que realmente se comunican con los dispositivos o simplemente no son válidas. El PMIO se puede considerar esencialmente como un MMIO con un espacio de direcciones de memoria separado solo para E / S.

Ahmet Zahit Can
fuente
"PMIO puede considerarse esencialmente como un MMIO con un espacio de direcciones de memoria separado solo para E / S". - El espacio de direcciones es un concepto tan simple y básico, ¿por qué agrega una analogía engañosa a su respuesta razonable? Esa analogía engañosa no cambia los hechos: por ejemplo, puede haber otros espacios de direcciones además de un "espacio de direcciones de memoria".
aserrín el
1

Con nombres como 'Señal de E / S' y 'mapeo de memoria' todo se vuelve mucho más complicado de lo que realmente es, y por lo tanto le da a la persona la impresión de que hay mucho más y cubre un tema avanzado. La tendencia ahora es que la gente lo vea como algo nuevo. Pero esto está muy lejos del caso. Incluso Babbage en la década de 1830 manejaba su impresora, esto necesitaba una señal de E / S, aunque hecha por un eje y una rueda dentada. Por ejemplo, en las máquinas de Hero of Alexandria hace 2000 años o en los teatros desde la época griega, siempre sacaban una cuerda de un conjunto de cuerdas diferentes para controlar las luces o el escenario, cada cuerda es como una línea de entrada y salida, es como así de simple, la dirección es 'qué línea', es decir, qué cosa, memoria o dispositivo estamos eligiendo,

Aunque las grandes computadoras centrales que llenaban los edificios con gabinetes, usaban cosas como 64 bits en los años 40 y, por lo tanto, se ocupaban del mapeo de E / S de la misma manera que hace mucho tiempo, por ejemplo, Konrad Zuse y su computadora del tamaño de una habitación usaban flotación punto que tenía unos 20 dígitos en decimal en la década de 1930, y tuvo que manejar cosas como su impresora y sus diversos indicadores de bombilla y sus interruptores. Pero en microprocesadores pequeños, la historia es diferente: no se imaginaron hasta los años 60 y se construyeron hasta 1971. Todas estas técnicas que utilizan la lógica de 8 bits en los años 80, se usaron para microprocesadores en 4 bits en los años 70, 2 bits en los años 60 y se usaron en 16 bits en los 90 ' s cuando todos comenzaron a tener una computadora y, por lo tanto, porque ahora estaba frente a ellos, comenzaron a discutir este tema de E / S y mapeo de memoria por primera vez, y parecía ser algo nuevo que surgió con el advenimiento de Internet; luego tuvimos 32 bits en las computadoras de los 00 y 64 bits en los años 10, lo que provocó discusiones interminables sobre la memoria en las líneas de datos. Para responder a su pregunta, hablaré sobre los chips que los aficionados a la electrónica compraron hace 30-40 años, como lo hice en ese momento, ya que más tarde, las cosas se pusieron tan avanzadas que no pude construir con los chips posteriores, pero el Los principios son exactamente los mismos ahora, las puertas están ocultas dentro de chips más grandes en caja negra que incorporan otros pines que se ocupan de que estas operaciones se desarrollen mucho más en paralelo (por ejemplo, permitiendo muchos pestillos octales,

Bueno, no sé nada sobre todos los nuevos idiomas o cómo está en las PC modernas ahora, pero puedo decirte cómo era en los viejos tiempos cuando solía construir computadoras con chips.

Todo el mapeo de E / S y el mapeo de memoria significan en términos simples, si colgó una carga de ejemplo de bombillas para alguna celebración y tenía cables que iban a cada uno y llamó a las bombillas Lugares de memoria (es decir, las bombillas representan memoria en la RAM, ya sea encendido o apagado, y si selecciona la ubicación 0, obtiene el cable 0, la ubicación 1, el cable 1, la ubicación 2, el cable 2, etc. es un dispositivo al que se envía, utilizando el comando OUT, para que suene. Pero se ve como una ubicación de memoria desde el punto de vista de la computadora, ya que viene como un cable a la MPU de la misma manera. Si se agregó otro cable que era un interruptor que usted operaba externamente, este es un dispositivo de E / S, que sería una instrucción IN para la PC. Entonces esto se llama E / S mapeadas.

Ahora en las computadoras, los cables en los autobuses representan líneas de dirección o líneas de datos, PERO están en binario, es decir, con 2 cables puede tener 00 01 10 11, es decir, 4 combinaciones 2 ^ 2, por lo que con 8 líneas 2 ^ 8 = 256 posibilidades, con 20 líneas 2 ^ 20 = 1048576 con 30 líneas 2 ^ 30 = 1073741824 (1 concierto) de posibilidades con 30 líneas. Por eso se llama MAPPED, en lugar de solo decir E / S y memoria, dicen E / S mapeadas, y memoria mapeada, porque estás mapeando los cables como una COMBINACIÓN y codificándolos binariamente. Entonces, si dice que tenía 2 cables, 4 combinaciones, no se pueden conectar a las bombillas (sin mencionar la amplificación de corriente requerida por los pequeños voltajes de la MPU y la prevención de la corriente de retroalimentación), pero los 2 cables tienen para pasar a través de un decodificador (solíamos usar un 138 para decodificar 3 líneas en 8 líneas, un 164 para decodificar 4 líneas binarias en 16 líneas. ) Una vez a través del decodificador, estas 2 líneas, por ejemplo, A0 y A1 (dirección 0 y dirección 1 (LÍNEAS)), se convierten en 4 líneas (activadas o desactivadas) para la bombilla particular que está manejando (en el caso en una computadora, LA MEMORIA), pero en algunos casos, esta ubicación en su lugar selecciona algún dispositivo de entrada / salida y dice "úsame", es decir, como memoria, una vez localizada, los datos se pasan de una forma u otra (usando una lógica inteligente de tres estados para cortar los voltajes en el camino cada vez) en las líneas de bus de datos D0..7 o D0..31 o el tamaño de los datos en la computadora (usted tiene una computadora de 2 bits, 4 bits, 8 bits, 16 bits, 32 bits, 64 bits, 128 bits, 256 bits, lo que sea computadora que está construyendo). Por lo tanto, los datos pasan de forma natural dentro o fuera de las líneas de datos a la memoria o al dispositivo de E / S (SI está mapeado en memoria), pero ESTO NO DEBE SER CONFUNDIDO CON LAS instrucciones de ENTRADA / SALIDA, ESTE ENTRADA y SALIDA significa de algún OTRO bloque de memoria de E / S, un bloque de memoria de E / S especial dentro de la MPU asignado especialmente solo para E / S, es decir (no mapeado en memoria), este espacio de E / S no siempre se obtiene en algunos microprocesadores, por ejemplo, no creo que lo tengamos en un 6502, pero lo tuvimos en un z80. Los chips más artísticos utilizaron solo el mapeo de memoria, por ejemplo, en consolas de juegos, etc., los chips más sensibles pero poco interesantes (permanecieron en el libro) también van para el espacio de E / S. La E / S mapeada en memoria es una velocidad más ligera ya que incorpora direccionamiento de memoria (que es súper rápido para la RAM), por lo tanto, la computadora de tipo gráfico usa solo mapeo de memoria para que la E / S obtenga la velocidad. La E / S asignada de E / S se asigna para puertos lentos, por ejemplo, rs232 o el puerto paralelo, y utiliza los comandos IN OUT. mi. (sin memoria asignada), este espacio de E / S no siempre se obtiene en algunos microprocesadores, por ejemplo, no creo que lo tengamos en un 6502, pero lo tuvimos en un z80. Los chips más artísticos utilizaron solo el mapeo de memoria, por ejemplo, en consolas de juegos, etc., los chips más sensibles pero poco interesantes (permanecieron en el libro) también van para el espacio de E / S. La E / S mapeada en memoria es una velocidad más ligera ya que incorpora direccionamiento de memoria (que es súper rápido para la RAM), por lo tanto, la computadora de tipo gráfico usa solo mapeo de memoria para que la E / S obtenga la velocidad. La E / S asignada de E / S se asigna para puertos lentos, por ejemplo, rs232 o el puerto paralelo, y utiliza los comandos IN OUT. mi. (sin memoria asignada), este espacio de E / S no siempre se obtiene en algunos microprocesadores, por ejemplo, no creo que lo tengamos en un 6502, pero lo tuvimos en un z80. Los chips más artísticos utilizaron solo el mapeo de memoria, por ejemplo, en consolas de juegos, etc., los chips más sensibles pero poco interesantes (permanecieron en el libro) también van para el espacio de E / S. La E / S mapeada en memoria es una velocidad más ligera ya que incorpora direccionamiento de memoria (que es súper rápido para la RAM), por lo tanto, la computadora de tipo gráfico usa solo mapeo de memoria para que la E / S obtenga la velocidad. La E / S asignada de E / S se asigna para puertos lentos, por ejemplo, rs232 o el puerto paralelo, y utiliza los comandos IN OUT. los chips más sensibles pero poco interesantes (permanecieron en el libro) también van para el espacio de E / S. La E / S mapeada en memoria es una velocidad más ligera ya que incorpora direccionamiento de memoria (que es súper rápido para la RAM), por lo tanto, la computadora de tipo gráfico usa solo mapeo de memoria para que la E / S obtenga la velocidad. La E / S asignada de E / S se asigna para puertos lentos, por ejemplo, rs232 o el puerto paralelo, y utiliza los comandos IN OUT. los chips más sensibles pero poco interesantes (permanecieron en el libro) también van para el espacio de E / S. La E / S mapeada en memoria es una velocidad más ligera ya que incorpora direccionamiento de memoria (que es súper rápido para la RAM), por lo tanto, la computadora de tipo gráfico usa solo mapeo de memoria para que la E / S obtenga la velocidad. La E / S asignada de E / S se asigna para puertos lentos, por ejemplo, rs232 o el puerto paralelo, y utiliza los comandos IN OUT.

Ahora, si en lugar de agregar dos cables, si realmente reemplazó dos cables que originalmente fueron a bombillas y tomó algunas de esas bombillas y las reemplazó con otras cosas, por ejemplo, una campana en uno y un interruptor en otro, ahora no se hace referencia a ellos (seleccionado ) con las instrucciones IN y OUT respectivamente, se hace referencia a ellas accediendo a esa ubicación de memoria particular que selecciona esos cables (que originalmente eran bombillas). Entonces esto es E / S mapeada en memoria.

La E / S mapeada en memoria significa que el bus de direcciones real que normalmente va a la memoria (la RAM), está conectado también a OTROS decodificadores (decodificadores lógicos), y cuando detecta la combinación binaria particular de señales de dirección, produce una salida alta , (por ejemplo, si tenía una carga de y no puertas, y usted dijo, si esto y no eso y así sucesivamente, utilizando los pines A0..A20 o el tamaño de su bus de direcciones), esta señal alta PERMITE un pestillo, (para un dispositivo en particular, como un puerto serie, un puerto paralelo), este pestillo luego PASA los datos en el bus de datos, a través del dispositivo de E / S. Esto es para escribir en el dispositivo de E / S. La lectura funciona al revés, el dispositivo de E / S, devuelve los datos y, si no recuerdo mal, envía exactamente la misma combinación de código de dirección a las líneas de dirección.

Supongo que debe funcionar de la misma manera hoy, excepto que serán muchas más líneas de datos y direcciones.

Literalmente está CONECTANDO la E / S a las líneas de dirección. Por lo tanto, la E / S se MAPEA efectivamente en el espacio de memoria, como si fuera memoria. Pero otro pestillo impide que los pines de dirección accedan al ram al mismo tiempo, para que no obtenga voltajes de dos direcciones o fuentes de datos en la misma línea, lo que dañaría los chips.

Con la instrucción IN y OUT, tuvimos esto hace 40 años, en el chip z80. Esto es para casos especiales en los que el chip realmente trata las E / S de una manera diferente, es decir, no está mapeado en memoria. (es decir, con la memoria asignada, solo lee o escribe en la ubicación de la memoria, pero con IN y OUT ya le está diciendo a la CPU que es una señal de E / S y no una memoria). Entonces, con la instrucción IN / OUT, esto tiene su propio espacio de dirección de E / S (que es adicional a la memoria del ram), este Ram de E / S, como parece ser, tiene un conjunto de direcciones igual, excepto que está accediendo directamente al dispositivo a través de un decodificador conectado a esas direcciones de E / S, y no está accediendo al dispositivo de E / S desde los pines de dirección estándar, esto es para la instrucción IN / OUT.

que para este caso se pasan mejor como cadenas de códigos ASCII para letras y números. Estos comandos son exactamente los mismos que si usara las instrucciones IN y OUT en un bucle donde el conteo es la longitud de la cadena.

Si está accediendo, por ejemplo, al altavoz de la PC, simplemente estaría pasando una pieza de datos a la vez usando OUT.

Si estuviera leyendo desde el puerto paralelo, estaría haciendo IN y utilizando el código para la dirección de E / S del puerto. Al escribirle, por ejemplo, para manejar impresoras antiguas o robótica mediante señales electrónicas, usaría el comando OUT. El puerto paralelo y el puerto serie (antiguo RS232) son puertos típicos que se utilizaron. El RS232 son datos en serie, solo se permite la entrada o salida de un bit, por lo que si estaba leyendo desde un rs232, solo tendría 1 bit del byte que es relevante, lo mismo con la salida. La velocidad en baudios es de aproximadamente 17 kHz como máximo para un rs232, pero estos solían conducir mucho la electrónica, en aquellos días solía construir circuitos rs232, por ejemplo, para leer voltajes o controlar microcontroladores PIC. Cada puerto se llama, por ejemplo, COM1 COM2 COM3 COM4 y tienen direcciones de E / S. No estoy seguro aquí, pero son similares a, por ejemplo, 3F8h 378h (h = dirección hexadecimal)

No estoy seguro acerca de los puertos modernos, pero si estaba escribiendo en el USB, probablemente sea una E / S mapeada en memoria para una mayor velocidad.

El puerto del teclado PS / 2, creo que esto usa la instrucción IN, para leer datos del teclado. Esto reemplaza al antiguo RS232, pero creo que tiene una especificación ligeramente diferente.

Por lo general, una unidad de disco tenía un mapa de memoria, presumiblemente todavía lo es ahora, es decir, si no maneja una unidad de disco con instrucciones de ENTRADA / SALIDA, serían demasiado lentas. Pero los puertos son lentos de todos modos, por lo que no importa, por ejemplo, una impresora es lenta en cuanto a la velocidad de datos requerida en comparación con la excelente, por ejemplo, 200 megabytes / segundo necesarios de un disco duro. Un altavoz, solo necesita la frecuencia del sonido por 10 o 20, digamos que 20kHz sería suficiente para un zumbador, por lo tanto, es E / S. Las cosas lentas usan E / S, las instrucciones IN / OUT. Por lo tanto, el USB probablemente ahora esté mapeado en memoria, tendrá que verificarlo.

Una mejor manera de entenderlo es esto. En las computadoras antiguas de los años 80, a veces deseaba controlar algún dispositivo que había construido y no tenía especificaciones para los puertos de salida (ya que en aquellos días el fabricante mantenía esto oculto para que ciertas compañías, por ejemplo, las compañías de joystick y cartuchos) pudieran avanzar. mercado por algún negocio). Lo que tenía que hacer era abrir la computadora y soldar literalmente los cables en algunos puntos del bus de direcciones, por ejemplo, soldaba tres cables en algunos puntos del circuito a una distancia segura (para no dañar el chip con el calor), esos puntos conectados por el diseño de la placa de circuito a, por ejemplo, los pines A15 A7 y A1 en el microprocesador. Y tendrías que cablear también generalmente una línea MREQ (una línea de solicitud de memoria y / o la línea RD / WR para hacer una señal más ordenada, y agregar eso a la lógica o no, pero si fuera inteligente, simplemente podría hacerlo con las líneas de dirección) Y luego conectó estos tres cables + esta señal adicional de tipo Ready (por ejemplo, MREQ RD o línea WR para dar algo de activo bajo o alto (que necesitaría un posible NO adicional compuerta aquí) para decir que los DATOS están listos en la línea AHORA) a través de una compuerta AND de 4 entradas, que dio salida a un led a través de una resistencia de 200 ohmios, tiene su propia memoria asignada de E / S de alta velocidad a una luz led , que puede enganchar a través de un enganche SR o enganche tipo D para almacenarlo en una memoria de 1 bit externamente en alguna placa de circuito. Aquí 15 es la línea de 32K, 7 es la línea de 64, 1 es la línea 2 (el binario funciona en potencias de 2, entonces A1 es 2 ^ 1, A7 es 2 ^ 7 y A15 es 2 ^ 15), entonces si ubicación direccionada 32768 + 64 + 2 = 32834 = F041 en hexadecimal, usando LDA o STA o LD en las MPU antiguas en el ensamblador, usted saldría a este led, se iluminaría si la resistencia fuera de unos 100 ohmios. Entonces, ha hecho E / S mapeadas en memoria, que tan simple como es, podría hacerlo hoy soldando a sus líneas de dirección de mpu lo mismo. Pero no lo harías ahora debido a la delicadeza de los circuitos. Pero también puede unirse a las líneas de datos D0..7 (en los viejos tiempos) o decir d0..31 ahora por 32 bits en una vieja PC 486. Entonces, si abordó esa ubicación en el código de la máquina cargando el acumulador con el valor 8 (mov ax, 8 hoy en día) o almacenando ese valor del acumulador en una ubicación de dirección (mov F041h, acumulador del hacha, INCLUSO hoy obtendría ese led para venir Nota: el 8, en el ejemplo, es lo que está en el bus de datos, en este caso particular, no estamos pasando datos, solo estamos habilitando el dispositivo en particular (el LED está encendido, si hemos seleccionado ESE dispositivo de E / S, aquí, solo un LED), así que, en este ejemplo, no importa qué número tengamos con ese eje MOV, 8 instrucciones, podría ser, por ejemplo, mov ax, 243 y todavía estaríamos habilitando el LED en la línea F041h cuando hagamos mov F041h, como ya que estamos usando la misma dirección. Usted ve, hay líneas de dirección y hay líneas de datos. Entonces, cuando se dirige a 3F8 en COM1 o cualquiera que sea la dirección, el mapa de memoria de E / S simplemente está enviando una señal a un puerto, por ejemplo, ps / 2, y una puerta y está verificando si tiene 1110000100 en las líneas, es decir, 11 es 3 1000 es F y 0100 es 8, ver conversión de binario a hexadecimal. Si aparecen voltajes altos en esas posiciones de bit donde hay un 1, entonces el puerto, por ejemplo, rs232 o ps / 2, se establece en activo, es decir, está habilitado, esto habilita los pestillos, mediante la señal de habilitación del chip CE o el chip CS seleccione simple. 8 instrucciones, podría ser, por ejemplo, mov axe, 243 y todavía estaríamos habilitando el LED en la línea F041h cuando hagamos mov F041h, ya que estamos usando la misma dirección. Usted ve, hay líneas de dirección y hay líneas de datos. Entonces, cuando se dirige a 3F8 en COM1 o cualquiera que sea la dirección, el mapa de memoria de E / S simplemente está enviando una señal a un puerto, por ejemplo, ps / 2, y una puerta y está verificando si tiene 1110000100 en las líneas, es decir, 11 es 3 1000 es F y 0100 es 8, ver conversión de binario a hexadecimal. Si aparecen voltajes altos en esas posiciones de bit donde hay un 1, entonces el puerto, por ejemplo, rs232 o ps / 2, se establece en activo, es decir, está habilitado, esto habilita los pestillos, mediante la señal de habilitación del chip CE o el chip CS seleccione simple. 8 instrucciones, podría ser, por ejemplo, mov axe, 243 y todavía estaríamos habilitando el LED en la línea F041h cuando hagamos mov F041h, ya que estamos usando la misma dirección. Usted ve, hay líneas de dirección y hay líneas de datos. Entonces, cuando se dirige a 3F8 en COM1 o cualquiera que sea la dirección, el mapa de memoria de E / S simplemente está enviando una señal a un puerto, por ejemplo, ps / 2, y una puerta y está verificando si tiene 1110000100 en las líneas, es decir, 11 es 3 1000 es F y 0100 es 8, ver conversión de binario a hexadecimal. Si aparecen voltajes altos en esas posiciones de bit donde hay un 1, entonces el puerto, por ejemplo, rs232 o ps / 2, se establece en activo, es decir, está habilitado, esto habilita los pestillos, mediante la señal de habilitación del chip CE o el chip CS seleccione simple. ya que estamos usando la misma dirección. Usted ve, hay líneas de dirección y hay líneas de datos. Entonces, cuando se dirige a 3F8 en COM1 o cualquiera que sea la dirección, el mapa de memoria de E / S simplemente está enviando una señal a un puerto, por ejemplo, ps / 2, y una puerta y está verificando si tiene 1110000100 en las líneas, es decir, 11 es 3 1000 es F y 0100 es 8, ver conversión de binario a hexadecimal. Si aparecen voltajes altos en esas posiciones de bit donde hay un 1, entonces el puerto, por ejemplo, rs232 o ps / 2, se establece en activo, es decir, está habilitado, esto habilita los pestillos, mediante la señal de habilitación del chip CE o el chip CS seleccione simple. ya que estamos usando la misma dirección. Usted ve, hay líneas de dirección y hay líneas de datos. Entonces, cuando se dirige a 3F8 en COM1 o cualquiera que sea la dirección, el mapa de memoria de E / S simplemente envía una señal a un puerto, por ejemplo, ps / 2, y una compuerta y comprueba si tiene 1110000100 en las líneas, es decir, 11 es 3 1000 es F y 0100 es 8, ver conversión de binario a hexadecimal. Si aparecen voltajes altos en esas posiciones de bit donde hay un 1, entonces el puerto, por ejemplo, rs232 o ps / 2, se establece en activo, es decir, está habilitado, esto habilita los pestillos, mediante la señal de habilitación del chip CE o el chip CS seleccione simple. 11 es 3 1000 es F y 0100 es 8, vea la conversión de binario a hexadecimal. Si aparecen voltajes altos en esas posiciones de bit donde hay un 1, entonces el puerto, por ejemplo, rs232 o ps / 2, se establece en activo, es decir, está habilitado, esto habilita los pestillos, mediante la señal de habilitación del chip CE o el chip CS seleccione simple. 11 es 3 1000 es F y 0100 es 8, vea la conversión de binario a hexadecimal. Si aparecen voltajes altos en esas posiciones de bit donde hay un 1, entonces el puerto, por ejemplo, rs232 o ps / 2, se establece en activo, es decir, está habilitado, esto habilita los pestillos, mediante la señal de habilitación del chip CE o el chip CS seleccione simple.

En un pestillo es el pin E Enable u OE active low output enable. Es decir, con el ejemplo descrito anteriormente, usamos las direcciones para seleccionar (decodificando) QUÉ dispositivo de E / S queremos usar (es decir, en el ejemplo, el LED se enciende, si ese dispositivo de E / S está seleccionado. Entonces esta es la línea de activación ENTONCES, una vez que se selecciona el dispositivo de E / S, ENTONCES los datos pasan del bus de datos (D0..7 en los viejos tiempos, o ejemplo D0..63 ahora para una computadora de 64 bits), a través de los pestillos octales 373 en el viejo días, estos son circuitos tipo flip flop tipo D que almacenan los datos dentro de los flip flops. Con un borde de reloj alto activo, los datos pasan y se almacenan. Este borde de reloj vendrá de la señal 'DATA RDY' en la señal de datos , esto tiene varios nombres, no sé cuál es el nombre ahora, así que para 64 bits, tenemos 8 pestillos octales. Y usan pestillos bidireccionales para controlar los datos de cualquier manera o de tres estados, de modo que cuando no se usa el dispositivo de E / S, las líneas de datos están en el estado de alta impedancia. Por lo tanto, selecciona el dispositivo de E / S con una combinación en las líneas de dirección, este es el número, por ejemplo, 3f8h en OUT 3F8h, 7, y los datos, aquí en el ejemplo 7, es lo que se pasa en las líneas de datos, en con el comando OUT, los datos pasan OUT al pestillo de datos y salen al dispositivo de E / S. Si tuviera IN, estaría haciendo un comando, por ejemplo, IN 3f8h, 800h, (espero, pero no sé la sintaxis del ensamblador x86), lo que quiero decir es que, para IN, está ingresando los datos del líneas de datos (después de haber seleccionado la dirección, por ejemplo, aquí 3f7h, que selecciona ESE dispositivo de E / S), estos datos provienen del dispositivo de E / S, a través de los flip flops tipo D en el pestillo de datos (uno para cada bit de las líneas del bus de datos), y se ingresa a los pines D0..7 o (D0..63 en PC modernas) en la unidad de microprocesador MPU ) En este ejemplo, puse IN 3f8h, 800h, para mostrar que una vez que entran los datos, se almacenan en la dirección 800h. La sintaxis de x86 creo que es diferente, probablemente tendría que hacer IN 3f8h, ah o algo similar, es decir, en un registro primero con los datos entrantes, luego MOV 800h, ah es decir, mover los datos a la memoria ubicación en la RAM, (si desea almacenarlo), o hacer algo más con ah etc. ah es un ejemplo de registro, podría ser cualquiera, al, bh, bl, etc. lo que sea, pero verifique la sintaxis, cada sistema ensamblador es ligeramente diferente, no soy un experto en x86. De nuevo, estoy usando 3f8h como ejemplo de dirección de E / S, hay cientos,

Mientras que cuando accede a la memoria (la RAM, por ejemplo, RAM estáticas de 64 bytes y RAM dinámicas en los años 70, 8K SRAM y DRAM en los 80, las filas de SIMMS tienen cada una unos pocos megabytes cada una (módulo de memoria en línea individual) en los 90 y ahora está en forma de módulos DDR que contienen módulos DIMM, módulos de memoria dual en línea, no lo he comprobado, pero lo último probablemente sin duda cada uno tiene unos pocos gigabytes en cada pequeño chip), si no es una dirección de E / S pocas direcciones son direcciones de E / S, hoy en día la memoria tiene millones de veces o más de probabilidades de estar en el espacio de direcciones que la E / S en una PC moderna), todavía usa las mismas instrucciones de lectura, escritura y datos en la memoria, pero no controlando algunos circuitos lógicos externos que buscan esos bits, en cambio, los pines de dirección y datos están conectados directamente a los chips de RAM.

En el código de máquina, el direccionamiento de E / S y memoria simplemente parece lo mismo, como si ambos fueran accesos a la memoria, pero lo que sucede físicamente es totalmente diferente en el circuito electrónico real.

Christine
fuente