which memory addresses are being referred to here. Is it virtual memory?
Parte do design do primeiro IBM PC foi usar alguns endereços de memória para outras coisas além da memória real (do tipo usado por programas e dados)
No primeiro IBM PC, você pode ter até 640 KB de RAM, mas os chips podem endereçar até 1024 KB de memória; no entanto, gravar endereços de memória maiores que 640 (e menores que 1024) seria realmente usado para comunicação não com RAM, mas com dispositivos como adaptadores gráficos de plug-in.
Este conceito é por vezes referido como IO mapeado em memória ou dispositivos de hardware mapeados em memória.
AsportasIOsãooutrotipoderecursoendereçávelnaarquiteturadoIBMPC.Nosprimeirosdias,vocêconfiguravafisicamenteessesendereçosemplacasplug-in(ISA)usando"jumpers" para conectar pinos de endereçamento na placa. Você também pode configurar o software para usar endereços IO correspondentes.
As letras brancas à esquerda do cartão descrevem quais posições de jumper fornecem quais endereços de porta IO, etc.
Atualmente, os detalhes de endereçamento são negociados e atribuídos dinamicamente pelos cartões e pelo computador host quando o sistema é inicializado. Nós não precisamos mais configurá-los.
Would it be possible to access these memory addresses from a user program to for example write into the serial port? Maybe using assembler?
Acredito que sim, supondo que você esteja usando um sistema operacional que o permita (por exemplo, PC-DOS, um SO de modo real). Em contraste, os SOs de modo protegido modernos impedirão que essas operações sejam bem-sucedidas em um programa do usuário.