Suponha que tenhamos um computador endereçável por palavras de 64 bits e desejamos programá-lo para gerar um caractere 5x7 armazenado como um bitmap de imagem binária (como o abaixo) para uma exibição mapeada na memória.
Como temos 5 x 7 = 35 pixels por caractere, podemos armazenar um caractere usando 35 bits em uma única palavra. Com o bit menos significativo a partir do lado esquerdo da palavra e com cada pixel na imagem a ser representado por o n ésimo bit, como mostrado acima, o número "3" acima seria armazenado na memória como: 01110100010000100110000011000101110, seguido por 29 não utilizada bits definidos como 0.
É assim que os caracteres foram / são armazenados em computadores antigos / modernos? Ou eles usam um único byte / palavra por pixel?
Se eles forem armazenados dessa maneira, qual seria a rotina em montagem / código de máquina (usando nada mais do que instruções elementares, como operações bit a bit, aritmética e de transporte de dados da Arquitetura do conjunto de instruções do computador) usada para converter esses dados em uma imagem no a tela se parece? Seria algo como:
- Armazene as coordenadas de exibição x e y para o pixel atual a ser atualizado em um determinado registro.
- Armazene os dois valores RGB escolhidos (neste caso, 0,255,0 para verde e 0,0,0 para preto) em outros dois registros separados.
- Faça com que dois outros registradores atuem como contadores inicializados em 5 e 7 para acompanhar a linha e a coluna atuais da imagem que está sendo renderizada.
- Teste se o registro da coluna não é 0. Se não estiver, teste se o LSB do bitmap está definido como 1, E o respectivo valor RGB registra-se com o registro de coordenadas xey, dependendo do resultado, e MOV esse resultado no registro de saída do visor.
- Reduza o registro do contador de linhas em 1, teste para ver se é 0. Se estiver, defina-o novamente como 5 e aumente a coordenada y em 1 e diminua o contador da coluna em 1.
- Mude o registro segurando o bitmap 1 bit para a esquerda.
- JMP à instrução 4.
Existe uma maneira mais simples ou mais eficiente de fazer isso? Parece que mesmo algo tão simples quanto renderizar um único caractere de texto pequeno requer um número bastante grande de operações e levaria cerca de 200 ciclos de CPU.
Finalmente, existem bons livros ou recursos no código no nível da máquina para exibir imagens do zero, porque não consegui encontrar nenhum, pois eles encobrem esse assunto específico ou o código está escrito em um idioma de alto nível ou em um assembler usando macros, que estão "trapaceando" e não explicam o que está acontecendo fundamentalmente no nível mais baixo.