Onde entra a tabela ASCII e outras de mapa de caracteres na programação, no código dos programas em modo real, como a BIOS ou em outro local?
Em todo lugar onde você tem uma sequência de bytes e quer interpretá-la como texto, ou o contrário, gerar bytes a partir de um texto em memória.
Por exemplo, se você está lendo os bytes de um arquivo, você precisa saber como interpretar esses bytes. Cada byte é um caracter? Caracteres podem ser formados por mais de um byte? Caracteres tem tamanhos variados? Essas perguntas são respondidas com um charset, como o ASCII. Você tem que saber previamente que aquele arquivo contém um texto codificado em ASCII (ou utf-8, o que seja).
No final, são bytes sendo transmitidos entre processos, e precisamos de uma forma de interpretá-los. A mesma coisa acontece com números. Dados 8 bytes, que você sabe que tem algum tipo de número. Qual tipo você usa para ler o dado? Inteiro? Ponto flutuante? Você precisa saber previamente como o dado foi codificado, para saber como interpretá-lo.
Tabelas de caracteres servem como uma forma de codificar e decodificar texto.
Essa forma de interpretar bytes como texto está na BIOS e nos SOs? É isso?
Se eu escrever um programa em modo real, essa forma de interpretar bytes como texto em funções específicas será colocada no código pelo próprio compilador?
Pode estar. A BIOS precisa ler bytes e transformá-los em texto de alguma forma? Se precisa, tem charset envolvido. Mesma coisa para o sistema operacional. Olha o tanto de texto que tem nessa tela que você está olhando agora mesmo.
Toda vez que eu pressiono uma tecla para informar o próximo caractere dessa resposta que estou escrevendo agora, o sistema operacional pega a representação da tecla que eu apertei e informa o browser. O browser usa essas informações para duas coisas: mostrar para mim mesmo o que eu estou digitando e, posteriormente, enviar essa sequência de bytes para o servidor por HTTP. Quando você dá um refresh na página, o seu browser puxa essas informações do servidor e usa uma tabela de caracteres para interpretá-los e mostrá-los na tela do seu computador.
Uma coisa é o texto que representa o seu programa, outra coisa é o texto que o seu programa usa durante o runtime. O encoding do código fonte depende do compilador. Swift, por exemplo, aceita utf-8. Outras linguagens aceitam apenas ASCII.
Se o seu código lida com texto, você vai fazer a lógica dentro do programa para fazer as conversões.
Me surgiu outra dúvida há pouco sobre este mesmo assunto. Se tudo é representado por 0 e 1, lendo, na maioria das vezes, em hexa, por economizar espaço, como se entra no computador representações de textos? Usando como exemplo, já que os demais tipos de informações devem seguir o mesmo princípio. Seria desenhos de pixels?
0 e 1 do mesmo jeito. O texto que aparece na tela não é a mesma coisa que é armazenada em memória e no disco. O que aparece na tela é só uma representação do dado, interpretado como caracteres.
Este é uma das melhores explicações sobre encoding e UTF-8 que já vi. Recomendo muito: https://www.youtube.com/watch?v=MijmeoH9LT4