Supponiamo di avere un computer indirizzabile a parole a 64 bit e di voler programmarlo per generare un carattere 5x7 memorizzato come bitmap di immagine binaria (come quello sotto) su un display mappato in memoria.
Dato che abbiamo 5 x 7 = 35 pixel per carattere, potremmo memorizzare un carattere usando 35 bit in una sola parola. Con il bit meno significativo a partire dal lato sinistro della parola e ad ogni pixel dell'immagine è rappresentata dal n esimo bit come mostrato sopra, il numero "3" sopra dovrebbe essere memorizzati nella memoria, come: 01110100010000100110000011000101110, seguito da 29 inutilizzata bit impostati su 0.
È così che i personaggi erano / sono memorizzati nei computer vecchi / moderni? O usano invece un singolo byte / parola per pixel?
Se sono memorizzati in questo modo, quale sarebbe la routine nell'assembly / codice macchina (usando nient'altro che istruzioni elementari come operazioni bit a bit, aritmetiche e di trasporto dei dati dall'architettura del set di istruzioni del computer) utilizzate per convertire questi dati in un'immagine su il display sembra? Sarebbe qualcosa del tipo:
- Memorizza le coordinate di visualizzazione xey per il pixel corrente da aggiornare in un determinato registro.
- Memorizzare i due valori RGB scelti (in questo caso 0,255,0 per il verde e 0,0,0 per il nero) in altri due registri separati.
- Fai in modo che altri due registri fungano da contatori inizializzati su 5 e 7 per tenere traccia della riga e della colonna correnti dell'immagine renderizzata.
- Verifica se il registro di colonna non è 0. In caso contrario, verifica se l'LSB della bitmap è impostato su 1, quindi AND il rispettivo registro di valori RGB con il registro delle coordinate xey in base al risultato, quindi MOV quel risultato al registro di uscita del display.
- Diminuisci il registro contatori di riga di 1, verifica se è 0. Se lo è, quindi ripristinalo a 5 e incrementa la coordinata y di 1 e decrementa il contatore di colonne di 1.
- Sposta il registro tenendo la bitmap di 1 bit a sinistra.
- JMP all'istruzione 4.
Esiste un modo più semplice o più efficiente per farlo? Sembra che anche qualcosa di semplice come il rendering di un singolo carattere di testo richiede un numero piuttosto elevato di operazioni e richiederebbe circa 200 cicli di CPU.
Infine, ci sono buoni libri o risorse sul codice a livello di macchina per la visualizzazione di immagini da zero, perché non sono stato in grado di trovarne alcuno mentre si passano sopra questo particolare argomento o il codice è scritto in un linguaggio di alto livello o un assemblatore che utilizza macro, tutte "imbrogliate" e non spiegano cosa sta fondamentalmente succedendo al livello più basso.