Diferença entre porta mapeada e acesso mapeado à memória?

19

Alguém pode explicar qual é a diferença entre o mapeamento de portas e o mapeamento de memória e o que os dois conseguem? Por que a porta é mapeada, como ela difere na estrutura dos mapas de memória e há algum motivo para muitas arquiteturas usarem ambas? Além disso, o que é uma "porta" nesse sentido, porque porta pode significar coisas diferentes em diferentes contextos?

Exemplo: Encaminhamento de porta, porta como terminal de comunicação, "mapeamento de porta".

Digamos que eu escreva OUT na porta 400h (fictícia; apenas por exemplo) (como em x86-64, etc.).

O que ou para onde estou escrevendo se não estiver na memória? Como é mapeada uma "porta", e o que é nesse sentido?

Varaquilex
fonte

Respostas:

24

E / S mapeada em memória e E / S mapeada em porta são dois métodos complementares para E / S.

E / S mapeada na memória

Nos sistemas mapeados na memória, o dispositivo de E / S é acessado como parte da memória. Loade os Storecomandos são executados para leitura e gravação em dispositivos de E / S, assim como são usados ​​para a memória (o mapeamento de porta possui comandos especiais para E / S). Isso significa que os dispositivos de E / S usam o mesmo barramento de endereço da memória, o que significa que a CPU pode se referir à memória ou ao dispositivo de E / S com base no valor do endereço. Essa abordagem requer isolamento no espaço de endereço: ou seja, endereços reservados para E / S não devem estar disponíveis para a memória física.

Abaixo está uma imagem de um sistema de computador simples e básico . O caso é muito mais complicado nos sistemas contemporâneos.

insira a descrição da imagem aqui


E / S mapeada por porta

De acordo com a Wikipedia

A E / S mapeada na porta geralmente usa uma classe especial de instruções da CPU especificamente para executar a E / S. Isso é encontrado nos microprocessadores Intel, com as instruções IN e OUT. Essas instruções podem ler e gravar de um a quatro bytes (outb, outw, outl) em um dispositivo de E / S. Os dispositivos de E / S têm um espaço de endereço separado da memória geral, realizado por um pino de "E / S" extra na interface física da CPU ou por um barramento inteiro dedicado à E / S. Como o espaço de endereço para E / S é isolado daquele da memória principal, isso às vezes é chamado de E / S isolada.


Quanto às vantagens e desvantagens: como os dispositivos periféricos são mais lentos que a memória, o compartilhamento de barramentos de dados e endereço pode diminuir o acesso à memória. Por outro lado, pela simplicidade de E / S que os sistemas mapeados em memória fornecem, a CPU requer menos lógica interna e isso ajuda a implementações de CPUs mais rápidas, baratas e com menor consumo de energia. A lógica é semelhante à dos sistemas RISC: reduza a complexidade, obtenha um sistema mais dedicado e robusto, que é bastante útil para sistemas embarcados, por exemplo.

Pelo contrário (novamente do Wiki):

As instruções de E / S mapeadas por porta geralmente são muito limitadas, fornecendo apenas operações simples de carregamento e armazenamento entre registradores da CPU e portas de E / S, de modo que, por exemplo, adicionar uma constante a um registro de dispositivo mapeado por porta exigiria três instruções: leia a porta em um registro da CPU, inclua a constante no registro da CPU e escreva o resultado novamente na porta.

Eu recomendo fortemente que você leia esse artigo da wiki para obter mais informações.


Para responder a uma de suas perguntas:

O que ou para onde estou escrevendo se não estiver na memória?

Você está gravando nos registros da interface de E / S através do barramento de dados, que mais tarde (quando pronto) envia os dados para o dispositivo de E / S real. Abaixo está uma imagem de uma interface de dispositivo de E / S de exemplo.

insira a descrição da imagem aqui

Varaquilex
fonte
O que isso significa para você escrever para a memória mapeada "Essa abordagem requer isolamento no espaço de endereço: ou seja, endereços reservados para E / S não devem estar disponíveis para a memória física." Você quer dizer que os endereços reservados para E / S estão na memória principal e não estão disponíveis para não-E / S. Claramente, os endereços IO e não IO são memória física. Não existe memória que não seja física. (a menos que você acredite nos argumentos de william lane craig, ou seja, que algo pode ter um cérebro e uma memória não-físicos!).
barlop
1
e quando você escreve isto "Você está escrevendo nos registradores da interface de E / S através do barramento de dados, que mais tarde (quando pronto) envia os dados para o dispositivo de E / S real. Abaixo está uma imagem de um exemplo de E / S dispositivo." Você não sabe ao certo se o "registro" de E / S está no dispositivo, suponho que se você chamá-lo de registro, parece que está no dispositivo. Mas você escreve "..que mais tarde (quando estiver pronto) envia os dados para o dispositivo de E / S real" "Portanto, não está claro onde você está dizendo que esses locais de memória estão. Se eles estão dentro do dispositivo ou fora do dispositivo .. ou sempre fora do dispositivo.
barlop
1
Atenção: compilei aqueles com o que aprendi na palestra sobre microprocessadores e alguns com o Wiki. Dito isto, o que quero dizer com o que você perguntou em seu primeiro comentário é que: "Endereços de E / S e endereços que não são de E / S são memória física" não está claro como você pensa. Na verdade (tanto quanto eu sei, tanto quanto eu sou ensinado), o decodificador de código de endereço ativa a interface IO quando o endereço IO é especificado, o que significa que, quando você fornece um endereço, ele não deve estar na faixa do endereço físico, por exemplo , US $ 0000 - US $ 00FF para físico e US $ 0100 - US $ 01FF para IO (ignore a quantia, apenas cuide dos limites).
Varaquilex
@ barlop Para sua segunda pergunta, você está bem aqui, o que eu quis dizer foi "Abaixo está uma imagem de uma interface de dispositivo de E / S de exemplo ". Corrigi isso na edição que acabei de fazer. Espero que a edição tenha eliminado a confusão. Caso contrário, pergunte mais. Vou tentar responder da melhor maneira possível.
Varaquilex
1
@ barlop O ponto da localização da memória é ambíguo na maioria dos posts e na literatura que me deparei. Ou eles assumem que você já sabe ou realmente não sabem. Acredito que a resposta esteja nessas palavras do LDD3 ch. 9: "A memória de E / S é simplesmente uma região de locais semelhantes à RAM que o dispositivo disponibiliza ao processador pelo barramento". (itálico adicionado) Ou seja, a memória e / ou os registros estão no dispositivo. A porta de E / S e a memória de E / S são apenas as duas maneiras pelas quais o sistema disponibiliza esses locais para o software.
orodbhen 8/09/18
2

Nas E / S mapeadas na memória (simplesmente MMIO), os dispositivos são acessados ​​por meio de instruções que realmente significam acessar a memória. Cada dispositivo obtém determinados endereços de memória. No entanto, quando você tenta ler ou gravar nesta parte da memória, um determinado dispositivo (provavelmente a ponte norte) envia apenas para o dispositivo relacionado. Mesmo que o computador não tenha memória suficiente para esse endereço (como os endereços MMIO geralmente são muito altos), não importa como a memória física (que é a que você vê quando olha para a placa-mãe, a RAM) ) nem sequer está relacionado. Se você tiver RAM suficiente para o endereço, ele é mapeado para um número não I / O mais alto ou apenas significa que você não pode ler ou gravar nele.

A E / S mapeada em porta (simplesmente PMIO) é muito diferente. Você tem instruções diferentes usadas para ler e gravar em portas. Há um espaço de endereço de porta, assim como o espaço de endereço de memória, onde os endereços são endereços de E / S que realmente se comunicam com os dispositivos ou são apenas inválidos. O PMIO pode essencialmente ser considerado um MMIO com um espaço de endereço de memória separado apenas para E / S.

Ahmet Zahit Can
fonte
"O PMIO pode essencialmente ser considerado um MMIO com um espaço de endereço de memória separado apenas para E / S". - O espaço de endereçamento é um conceito tão simples e básico. Por que você adota uma analogia enganosa à sua resposta razoável? Essa analogia enganosa não muda os fatos: por exemplo, pode haver outros espaços de endereço além de um "espaço de endereço de memória".
sawdust
1

Com nomes como 'sinal de E / S' e 'mapeamento de memória', tudo fica muito mais complicado do que realmente é, e, portanto, dá à pessoa a impressão de que há muito mais e aborda um tópico avançado. A tendência agora é que as pessoas vejam isso como algo novo. Mas isso está muito longe do caso. Até Babbage, na década de 1830, dirigia sua impressora, isso precisava de um sinal de E / S, embora feito por um eixo e roda dentada. Por exemplo, nas máquinas de Hero of Alexandria, há 2000 anos, ou nos cinemas de volta aos tempos gregos, eles sempre puxavam uma corda de um conjunto de cordas diferentes para controlar as luzes ou o cenário, cada corda é como uma linha de entrada e saída, é como simples assim, o endereço é 'qual linha', ou seja, qual coisa, memória ou dispositivo estamos escolhendo,

Embora os grandes computadores mainframe que enchiam edifícios com gabinetes usassem coisas como 64 bits nos anos 40 e, portanto, lidassem com o mapeamento de E / S da mesma forma há muito tempo, por exemplo, Konrad Zuse e seu computador de sala usavam flutuante ponto que tinha cerca de 20 dígitos decimais na década de 1930 e precisava acionar coisas como sua impressora, seus vários indicadores de lâmpadas e seus interruptores. Mas em microprocessadores minúsculos a história é diferente: eles não foram previstos até os anos 60 e construídos até 1971. Todas essas técnicas usando lógica de 8 bits nos anos 80 foram usadas para microprocessadores em 4 bits nos anos 70, 2 bits nos anos 60 e foram usadas em 16 bits nos anos 90 ' s, quando todos começaram a obter um computador e, portanto, porque agora estava à sua frente, começaram a discutir esse tópico de E / S e mapeamento de memória pela primeira vez, e parecia ser algo novo que veio com o advento da Internet; então tivemos computadores de 32 bits nos anos 00 e computadores de 64 bits nos anos 10, o que causou discussões intermináveis ​​de memória nas linhas de dados. Para responder à sua pergunta, falarei sobre chips que os entusiastas da eletrônica compraram 30-40 anos atrás, como fiz naquela época, pois, mais tarde, as coisas ficaram tão avançadas que não consegui construir com os chips posteriores, mas o os princípios são os mesmos agora, os portões estão escondidos dentro de chips de caixa preta maiores que incorporam outros pinos que lidam com essas operações que acontecem muito mais paralelamente (por exemplo, permitindo muitas travas octais,

Bem, eu não sei nada sobre todas as novas linguagens ou como estão nos PCs modernos agora, mas posso dizer como era nos velhos tempos quando eu costumava construir computadores com chips.

Todo o mapeamento de E / S e mapeamento de memória significa, em termos simples, se você colocar um exemplo de carga de lâmpadas para alguma comemoração e teve fios indo para cada uma e chamar as localizações de memória das lâmpadas (ou seja, as lâmpadas representam a memória na RAM, também ligado ou desligado e, se você selecionar o local 0, obterá o fio 0, o local 1, o fio 1, o local 2 e o fio 2 e assim por diante) se você adicionar mais alguns fios, por exemplo, um fio é um sino, esse local em particular não é uma memória. é um dispositivo para o qual você envia, usando o comando OUT, para fazê-lo tocar. Mas é visto como um local de memória do ponto de vista do computador, porque entra como um fio para a MPU da mesma forma. Se outro fio foi adicionado, que era um comutador que você operava externamente, este é um dispositivo de E / S, que seria uma instrução IN para o PC. Portanto, isso é chamado de E / S mapeada de E / S.

Agora, nos computadores, os fios nos barramentos representam linhas de endereço ou linhas de dados, mas eles são binários, ou seja, com 2 fios, você pode ter 00 01 10 11 ou seja, 4 combinações 2 ^ 2, portanto, com 8 linhas 2 ^ 8 = 256 possibilidades, com 20 linhas 2 ^ 20 = 1048576 com 30 linhas 2 ^ 30 = 1073741824 (1 gig) de possibilidades com 30 linhas. Portanto, é por isso que se chama MAPPED, em vez de apenas dizer E / S e memória, eles estão dizendo E / S mapeada e memória mapeada, porque você está mapeando os fios como codificação binária. Então, se você diz que você tem 2 fios, 4 combinações, eles não podem ser conectados apenas a lâmpadas (para não mencionar a amplificação de corrente necessária das pequenas voltagens do MPU e a prevenção da corrente de realimentação), mas os 2 fios têm para passar por um decodificador (costumávamos usar um 138 para decodificar 3 linhas em 8 linhas, um 164 para decodificar 4 linhas binárias em 16 linhas. ) Uma vez através do decodificador, essas 2 linhas, por exemplo, A0 e A1 (endereço0 e endereço 1 (LINHAS)), tornam-se 4 linhas (ativadas ou desativadas) para a lâmpada específica que você está dirigindo (no caso de um computador, A MEMÓRIA), mas em alguns casos, esse local seleciona algum dispositivo de entrada / saída e, em vez disso, diz 'use-me', ou seja, como memória, uma vez localizados, os dados são passados ​​de uma maneira ou de outra (usando lógica inteligente de três estados para cortar tensões no caminho cada vez) nas linhas de barramento de dados D0..7 ou D0..31 ou qualquer tamanho dos dados no computador (você possui um computador de 2 bits, 4 bits, 8 bits, 16 bits, 32 bits, 64 bits, 128 bits, 256 bits, computador, qualquer que seja o tamanho. computador que você está construindo). Portanto, os dados passam naturalmente para fora ou para fora das linhas de dados para a memória ou para o dispositivo de E / S (se houver memória mapeada), mas ISSO NÃO DEVE SER CONFUSO COM AS instruções IN / OUT, ESTE IN e OUT significa, a partir de outro bloco de memória de E / S, um bloco de memória de E / S especial dentro da MPU atribuído especialmente apenas para E / S, ou seja (sem memória mapeada), esse espaço de E / S que você nem sempre obtém em alguns microprocessadores, por exemplo, acho que não o tínhamos no 6502, mas sim no z80. Os chips mais artísticos usavam apenas o mapeamento de memória, por exemplo, nos consoles de jogos, etc., os chips mais sensíveis, mas desinteressantes (mantidos no livro), também servem para o espaço de E / S. A E / S mapeada na memória é a velocidade da luz, pois incorpora o endereçamento de memória (que é super rápido para a RAM); portanto, o computador do tipo gráfico usa apenas o mapeamento de memória para a E / S para obter a velocidade. A E / S mapeada de E / S é atribuída a portas lentas, por exemplo, rs232 ou porta paralela e usa os comandos IN OUT. e (sem memória mapeada), esse espaço de E / S que você nem sempre encontra em alguns microprocessadores, por exemplo, acho que não o tínhamos em um 6502, mas em um z80. Os chips mais artísticos usavam apenas o mapeamento de memória, por exemplo, nos consoles de jogos, etc., os chips mais sensíveis, mas desinteressantes (mantidos no livro), também servem para o espaço de E / S. A E / S mapeada na memória é a velocidade da luz, pois incorpora o endereçamento de memória (que é super rápido para a RAM); portanto, o computador do tipo gráfico usa apenas o mapeamento de memória para a E / S para obter a velocidade. A E / S mapeada de E / S é atribuída a portas lentas, por exemplo, rs232 ou porta paralela e usa os comandos IN OUT. e (sem memória mapeada), esse espaço de E / S que você nem sempre encontra em alguns microprocessadores, por exemplo, acho que não o tínhamos em um 6502, mas em um z80. Os chips mais artísticos usavam apenas o mapeamento de memória, por exemplo, nos consoles de jogos, etc., os chips mais sensíveis, mas desinteressantes (mantidos no livro), também servem para o espaço de E / S. A E / S mapeada na memória é a velocidade da luz, pois incorpora o endereçamento de memória (que é super rápido para a RAM); portanto, o computador do tipo gráfico usa apenas o mapeamento de memória para a E / S para obter a velocidade. A E / S mapeada de E / S é atribuída a portas lentas, por exemplo, rs232 ou porta paralela e usa os comandos IN OUT. chips mais sensatos, mas desinteressantes (mantidos no livro), também servem para o espaço de E / S. A E / S mapeada na memória é a velocidade da luz, pois incorpora o endereçamento de memória (que é super rápido para a RAM); portanto, o computador do tipo gráfico usa apenas o mapeamento de memória para a E / S para obter a velocidade. A E / S mapeada de E / S é atribuída a portas lentas, por exemplo, rs232 ou porta paralela e usa os comandos IN OUT. chips mais sensatos, mas desinteressantes (mantidos no livro), também servem para o espaço de E / S. A E / S mapeada na memória é a velocidade da luz, pois incorpora o endereçamento de memória (que é super rápido para a RAM); portanto, o computador do tipo gráfico usa apenas o mapeamento de memória para a E / S para obter a velocidade. A E / S mapeada de E / S é atribuída a portas lentas, por exemplo, rs232 ou porta paralela, e usa os comandos IN OUT.

Agora, se em vez de adicionar dois fios, se você realmente substituiu dois fios que originalmente foram para lâmpadas e pegou algumas dessas lâmpadas e as substituiu por outras coisas, por exemplo, uma campainha em um e um interruptor em outro, eles agora não são referenciados (selecionado ) com as instruções IN e OUT, respectivamente, elas são referenciadas acessando o local específico da memória que seleciona esses fios (que eram originalmente lâmpadas). Portanto, essa é a E / S mapeada na memória.

A E / S mapeada na memória significa que o barramento de endereço real que normalmente vai para a memória (a RAM) também é conectado a OUTROS decodificadores (decodificadores lógicos) e, quando detecta a combinação binária específica de sinais de endereço, produz uma saída alta , (por exemplo, se você tinha uma carga de e não portões e disse, se isso e não aquilo e assim por diante, usando os pinos A0..A20 ou qualquer tamanho que seja o seu barramento de endereços), esse sinal alto HABILITA uma trava, (para um dispositivo específico, como uma porta serial, uma porta paralela), essa trava PASSA os dados no barramento de dados, através do dispositivo de E / S. Isso é para gravar no dispositivo de E / S. A leitura funciona da maneira oposta, o dispositivo de E / S, transmite os dados e, se bem me lembro, envia exatamente a mesma combinação de código de endereço para as linhas de endereço.

Presumo que deve funcionar da mesma maneira hoje, exceto que serão apenas muito mais dados e linhas de endereço.

Você literalmente está FECHANDO a E / S nas linhas de endereço. Portanto, a E / S é efetivamente mapeada no espaço da memória, como se fosse memória. Mas outra trava desativa os pinos de endereço de acessar o ram ao mesmo tempo, para que você não tenha voltagens de dois endereços ou fontes de dados na mesma linha, o que danificaria os chips.

Com as instruções IN e OUT, tivemos isso há 40 anos, no chip z80. Isso ocorre em casos especiais em que o chip realmente lida com a E / S de uma maneira diferente, ou seja, não é mapeado na memória. (ou seja, com a memória mapeada, você apenas lê ou grava no local da memória, mas com IN e OUT você já está dizendo à CPU que é um sinal de E / S e não memória). Portanto, com a instrução IN / OUT, ela possui seu próprio espaço de endereço de E / S (que é extra para a memória da ram), essa RAM de E / S, como parece ser, possui um conjunto de endereços da mesma forma, exceto se você está acessando diretamente o dispositivo através de um decodificador conectado a esses endereços de E / S e não está acessando o dispositivo de E / S pelos pinos de endereço padrão, isto é para a instrução IN / OUT.

que, neste caso, são melhor passados ​​como cadeias de códigos ASCII para letras e números. Esses comandos são exatamente os mesmos que se você tivesse usado as instruções IN e OUT em um loop em que a contagem é o comprimento da string.

Se você estiver acessando, por exemplo, o alto-falante do PC, estará apenas passando um dado de cada vez usando OUT.

Se você estivesse lendo a partir da porta paralela, estaria executando IN e usando o código para o endereço de E / S da porta. Escrevendo para ele, por exemplo, para conduzir impressoras antigas ou robótica por sinais eletrônicos, você usaria o comando OUT. A porta paralela e a porta serial (RS232 antiga) são portas típicas usadas. O RS232 é um dado serial, com apenas um bit permitido para entrar ou sair, portanto, se você estivesse lendo de um rs232, teria apenas 1 bit do byte relevante, o mesmo da saída. A taxa de transmissão é de cerca de 17kHz no máximo para um rs232, mas estes costumavam acionar eletrônicos muito, antigamente eu costumava construir circuitos rs232, por exemplo, para ler tensões ou acionar microcontroladores PIC. Cada porta é nomeada, por exemplo, COM1 COM2 COM3 COM4 e eles têm endereços de E / S. Não tenho certeza aqui, mas eles são semelhantes, por exemplo, a 3F8h 378h (h = endereço hexadecimal)

Não tenho certeza sobre as portas modernas, mas se você estava gravando no USB, provavelmente será a E / S mapeada na memória para maior velocidade.

A porta do teclado PS / 2, acho que isso usa a instrução IN, para ler dados do teclado. Isso substitui o antigo RS232, mas acredito que tenha uma especificação ligeiramente diferente.

Uma unidade de disco geralmente era mapeada na memória, provavelmente ainda é agora, ou seja, você não dirige uma unidade de disco com instruções de entrada / saída, elas seriam muito lentas. Mas as portas são lentas de qualquer maneira, portanto, isso não importa, por exemplo, uma impressora é lenta na medida da taxa de dados necessária, em comparação com os fantásticos, por exemplo, 200 megabytes / segundo necessários em um disco rígido. Um alto-falante precisa apenas da frequência do som cerca de 10 ou 20, digamos que 20kHz seria suficiente para uma campainha, portanto é de E / S. Coisas lentas usam E / S, as instruções IN / OUT. Portanto, o USB provavelmente agora está mapeado na memória, você precisará verificar isso.

Uma maneira melhor de entender é isso. Em computadores antigos nos anos 80, às vezes, você queria controlar algum dispositivo que havia construído e não tinha especificações para as portas de saída (como naqueles dias o fabricante mantinha isso oculto para que certas empresas, como empresas de joystick e cartuchos) pudessem avançar no mercado. mercado por algum negócio). O que você tinha que fazer era abrir o computador e literalmente soldar os fios em alguns pontos do barramento de endereços; por exemplo, você soldou três fios em alguns pontos do circuito a uma distância segura (para não danificar o chip com o calor), aqueles pontos conectados pelo layout da placa de circuito eletrônico, por exemplo, aos pinos A15 A7 e A1 no microprocessador. E você também teria que conectar uma linha MREQ (uma linha de solicitação de memória e / ou a linha RD / WR para emitir um sinal mais limpo e adicioná-lo à lógica ou não, mas se você fosse esperto, poderia fazê-lo com as linhas de endereço) E então você conectou esses três fios + esse sinal do tipo Pronto extra (por exemplo, linha MREQ RD ou WR para fornecer um nível baixo ou alto ativo (o que exigiria um possível NÃO adicional porta aqui) para dizer que os dados estão prontos na linha AGORA) através de uma porta AND de 4 entradas, que deu uma saída a um led através de um resistor de 200 ohm, você tem sua própria E / S de alta velocidade mapeada para uma luz led , que você pode travar através de uma trava SR ou trava do tipo D para armazená-la em uma memória de 1 bit externamente em alguma placa de circuito. Aqui 15 é a linha de 32K, 7 é a linha de 64, 1 é a linha 2 (o binário funciona com potências de 2, então A1 é 2 ^ 1, A7 é 2 ^ 7 e A15 é 2 ^ 15), portanto, se você local endereçado 32768 + 64 + 2 = 32834 = F041 em hexadecimal, usando LDA ou STA ou LD em MPU's antigas no assembler, você enviaria para esse led, acenderia se o resistor dissesse cerca de 100 ohms. Portanto, você fez a E / S mapeada na memória e, por mais simples que seja, você pode fazer isso hoje soldando as linhas de endereço mpu da mesma forma. Mas você não faria isso agora devido à delicadeza dos circuitos. Mas você também pode juntar as linhas de dados D0..7 (nos velhos tempos) ou dizer d0..31 agora para 32 bits em um antigo PC 486. Então, se você abordasse esse local no código da máquina, carregando o acumulador com o valor 8 (mov ax, 8 hoje em dia) ou armazenando esse valor no acumulador em um local de endereço (mov F041h, acumulador de machado), você MESMO levaria até hoje o que está por vir Observe que o 8, no exemplo, é o que está no barramento de dados; nesse caso em particular, não estamos transmitindo dados, apenas ativando o dispositivo específico (o LED está aceso, se tivermos selecionado esse dispositivo de E / S, aqui, apenas um LED), portanto, neste exemplo, não importa qual o número que temos com esse eixo MOV, instrução 8, poderia ser, por exemplo, mov ax, 243 e ainda estaríamos ativando o LED na linha F041h quando, então, movemos F041h, como já que estamos usando o mesmo endereço. Veja bem, existem linhas de endereço e linhas de dados. Portanto, quando você endereça 3F8 em COM1 ou qualquer que seja o endereço, o mapa de memória de E / S simplesmente envia um sinal para uma porta, por exemplo, ps / 2, e um e gate está verificando se você tem 1110000100 nas linhas, ou seja, 11 é 3 1000 é F e 0100 é 8, consulte a conversão de binário em hexadecimal. Se altas voltagens aparecerem nas posições de bits em que houver 1, a porta, por exemplo, rs232 ou ps / 2, será ativada, ou seja, está habilitada, isso habilitará as travas, pelo sinal de habilitação do chip CE ou chip CS selecione simples. Na instrução 8, poderia ser, por exemplo, mov ax, 243 e ainda estaríamos ativando o LED na linha F041h quando fizermos o mov F041h, como se estivéssemos usando o mesmo endereço. Veja bem, existem linhas de endereço e linhas de dados. Portanto, quando você endereça 3F8 em COM1 ou qualquer que seja o endereço, o mapa de memória de E / S simplesmente envia um sinal para uma porta, por exemplo, ps / 2, e um e gate está verificando se você tem 1110000100 nas linhas, ou seja, 11 é 3 1000 é F e 0100 é 8, consulte a conversão de binário em hexadecimal. Se altas voltagens aparecerem nas posições de bits em que houver 1, a porta, por exemplo, rs232 ou ps / 2, será ativada, ou seja, está habilitada, isso habilitará as travas, pelo sinal de habilitação do chip CE ou chip CS selecione simples. Na instrução 8, poderia ser, por exemplo, mov ax, 243 e ainda estaríamos ativando o LED na linha F041h quando fizermos o mov F041h, como se estivéssemos usando o mesmo endereço. Veja bem, existem linhas de endereço e linhas de dados. Portanto, quando você endereça 3F8 em COM1 ou qualquer que seja o endereço, o mapa de memória de E / S simplesmente envia um sinal para uma porta, por exemplo, ps / 2, e um e gate está verificando se você tem 1110000100 nas linhas, ou seja, 11 é 3 1000 é F e 0100 é 8, consulte a conversão de binário em hexadecimal. Se altas voltagens aparecerem nas posições de bits em que houver 1, a porta, por exemplo, rs232 ou ps / 2, será ativada, ou seja, está habilitada, isso habilitará as travas, pelo sinal de habilitação do chip CE ou chip CS selecione simples. como estamos usando o mesmo endereço. Veja bem, existem linhas de endereço e linhas de dados. Portanto, quando você endereça 3F8 em COM1 ou qualquer que seja o endereço, o mapa de memória de E / S simplesmente envia um sinal para uma porta, por exemplo, ps / 2, e um e gate está verificando se você tem 1110000100 nas linhas, ou seja, 11 é 3 1000 é F e 0100 é 8, consulte a conversão de binário em hexadecimal. Se altas voltagens aparecerem nas posições de bits em que houver 1, a porta, por exemplo, rs232 ou ps / 2, será ativada, ou seja, está habilitada, isso habilitará as travas, pelo sinal de habilitação do chip CE ou chip CS selecione simples. como estamos usando o mesmo endereço. Veja bem, existem linhas de endereço e linhas de dados. Portanto, quando você endereça 3F8 em COM1 ou qualquer que seja o endereço, o mapa de memória de E / S simplesmente envia um sinal para uma porta, por exemplo, ps / 2, e um e gate está verificando se você tem 1110000100 nas linhas, ou seja, 11 é 3 1000 é F e 0100 é 8, consulte a conversão de binário em hexadecimal. Se altas voltagens aparecerem nas posições de bits em que houver 1, a porta, por exemplo, rs232 ou ps / 2, será ativada, ou seja, está habilitada, isso habilitará as travas, pelo sinal de habilitação do chip CE ou chip CS selecione simples. 11 é 3 1000 é F e 0100 é 8, consulte a conversão de binário em hexadecimal. Se altas voltagens aparecerem nas posições de bits em que houver 1, a porta, por exemplo, rs232 ou ps / 2, será ativada, ou seja, está habilitada, isso habilitará as travas, pelo sinal de habilitação do chip CE ou chip CS selecione simples. 11 é 3 1000 é F e 0100 é 8, consulte a conversão de binário em hexadecimal. Se altas voltagens aparecerem nas posições de bits em que houver 1, a porta, por exemplo, rs232 ou ps / 2, será ativada, ou seja, está habilitada, isso habilitará as travas, pelo sinal de habilitação do chip CE ou chip CS selecione simples.

Em uma trava, está o pino E Enable ou a baixa saída ativa do OE. Ou seja, com o exemplo acima descrito, usamos os endereços para selecionar (decodificando) QUAL dispositivo de E / S que queremos usar (ou seja, no exemplo em que o LED acende, se esse dispositivo de E / S for selecionado. Portanto, esta é a linha de ativação ENTÃO, uma vez que o dispositivo de E / S é selecionado, ENTÃO os dados são transmitidos do barramento de dados (D0..7 nos velhos tempos, ou exemplo D0..63 agora para um computador de 64 bits), através de travas octais 373's no antigo dias, estes são circuitos do tipo flip-flop do tipo D. que armazenam os dados dentro dos flip-flops. Com uma borda ativa alta do relógio, os dados passam e são armazenados. Essa borda do relógio virá do sinal 'DATA RDY' no sinal de dados , isso tem vários nomes, não sei qual é o nome agora, então, para 64 bits, temos 8 travas octais. E eles usam travas bidirecionais para controlar os dados de uma maneira ou de três estados, para que, quando o dispositivo de E / S não for usado, as linhas de dados estejam no estado de alta impedância. Portanto, você seleciona o dispositivo de E / S com uma combinação nas linhas de endereço, este é o número, por exemplo, 3f8h em OUT 3F8h, 7, e os dados, aqui no exemplo 7, são os que são transmitidos nas linhas de dados, em o comando OUT os dados estão passando OUT para a trava de dados e para o dispositivo de E / S. Se você tivesse IN, estaria executando um comando, por exemplo, IN 3f8h, 800h (espero, mas não conheço a sintaxe do x86 assembler), o que quero dizer é que, para IN, você está inserindo os dados do linhas de dados (depois de selecionar o endereço, por exemplo, aqui 3f7h, que seleciona esse dispositivo de E / S), esses dados são provenientes do dispositivo de E / S, através dos flip-flops do tipo D na trava de dados (uma para cada bit das linhas do barramento de dados) e é inserida nos pinos D0..7 ou (D0..63 em computadores modernos) na unidade de microprocessamento MPU ) Neste exemplo, coloquei IN 3f8h, 800h, para mostrar que, assim que os dados chegam, eles são armazenados no endereço 800h. Acho que a sintaxe do x86 é diferente, você provavelmente faria IN 3f8h, ah ou algo semelhante, ou seja, em um registro primeiro com os dados entrando, então você MOV 800h, ah, ou seja, mover os dados para a memória local na RAM, (se você quiser armazená-lo) ou fazer outra coisa com ah etc. ah é um exemplo de registro, pode ser qualquer um, al, bh, bl etc., mas verifique a sintaxe, todo sistema montador é um pouco diferente, não sou especialista em x86. Mais uma vez, estou usando 3f8h como um exemplo de endereço de E / S, existem centenas,

Considerando que, quando você acessa a memória (a RAM, por exemplo, RAMs estáticas de 64 bytes e RAMs dinâmicas nos anos 70, SRAMs e DRAMs de 8K nos anos 80, as linhas de SIMMS têm cada uma com alguns megabytes (módulo de memória em linha único) nos anos 90 e agora está na forma de módulos DDR contendo DIMMs, módulos de memória dupla em linha, eu não verifiquei, mas o mais recente provavelmente sem dúvida tem alguns gigabytes em cada chip), se não for um endereço de E / S (muito poucos endereços são endereços de E / S, atualmente a memória tem milhões de vezes ou mais chances de estar no espaço de endereço do que a E / S em um PC moderno), você ainda usa as mesmas instruções de leitura e gravação de dados na memória, mas não tem dirigindo alguns circuitos lógicos externos que procuram esses bits, em vez disso, esses pinos de endereço e dados são conectados diretamente aos chips de RAM.

No código da máquina, o E / S e o endereçamento de memória parecem os mesmos, como se fossem acessos à memória, mas o que acontece fisicamente é totalmente diferente no circuito eletrônico real.

Christine
fonte