Supongamos que tenemos una computadora direccionable por palabra de 64 bits y queremos programarla para que muestre un carácter de 5x7 almacenado como un mapa de bits de imagen binaria (como el siguiente) en una pantalla mapeada en memoria.
Como tenemos 5 x 7 = 35 píxeles por carácter, podríamos almacenar un carácter utilizando 35 bits en una sola palabra. Con el bit menos significativo de partida en el lado izquierdo de la palabra y con cada píxel de la imagen que está siendo representado por el n ésimo bit como se muestra arriba, el número "3" supra se almacena en la memoria como: 01110100010000100110000011000101110, seguido por 29 sin usar bits establecidos en 0.
¿Es así como los personajes fueron / son almacenados en las computadoras antiguas / modernas? ¿O utilizan un solo byte / palabra por píxel en su lugar?
Si se almacenan de esta manera, ¿qué utilizaría la rutina en el ensamblaje / código de máquina (usando nada más que instrucciones elementales tales como operaciones de transporte de datos, aritmética y bit a bit de la Arquitectura del conjunto de instrucciones de la computadora) para convertir estos datos en una imagen en se ve la pantalla? ¿Sería algo así como:
- Almacene las coordenadas de visualización x e y para el píxel actual que se actualizará en un determinado registro.
- Almacene los dos valores RGB elegidos (en este caso 0,255,0 para verde y 0,0,0 para negro) en otros dos registros separados.
- Haga que otros dos registros actúen como contadores inicializados en 5 y 7 para realizar un seguimiento de la fila y columna actuales de la imagen que se está representando.
- Pruebe si el registro de la columna no es 0. Si no lo es, pruebe si el LSB del mapa de bits está establecido en 1, luego AND el respectivo valor RGB se registra con el registro de coordenadas xey dependiendo del resultado, luego MOV ese resultado al registro de salida de pantalla.
- Disminuya el registro del contador de filas en 1, pruebe para ver si es 0. Si es así, vuelva a configurarlo en 5 e incremente la coordenada y en 1 y disminuya el contador de columna en 1.
- Desplace el registro sosteniendo el bitmap 1 bit hacia la izquierda.
- JMP a la instrucción 4.
¿Hay una manera más simple o más eficiente de hacer esto? Parece que incluso algo tan simple como representar un solo carácter de texto pequeño requiere una gran cantidad de operaciones y tomaría alrededor de 200 ciclos de CPU.
Finalmente, ¿hay algún buen libro o recurso sobre código de nivel de máquina para mostrar imágenes desde cero? ensamblador que usa macros, todos los cuales son "trampas" y no explican qué sucede fundamentalmente en el nivel más bajo.