Angenommen, wir haben einen 64-Bit-Computer mit Wortadressierbarkeit und möchten ihn so programmieren, dass er ein 5x7-Zeichen ausgibt, das als Binärbild-Bitmap (wie die folgende) auf einer speicherabgebildeten Anzeige gespeichert ist.
Da wir 5 x 7 = 35 Pixel pro Zeichen haben, können wir ein Zeichen mit 35 Bit in einem einzelnen Wort speichern. Wenn das niedrigstwertige Bit auf der linken Seite des Wortes beginnt und jedes Pixel im Bild wie oben gezeigt durch das n- te Bit dargestellt wird, wird die obige Zahl "3" im Speicher gespeichert als: 01110100010000100110000011000101110, gefolgt von 29 nicht verwendeten Bits auf 0 gesetzt.
Wurden / werden Zeichen auf diese Weise in alten / modernen Computern gespeichert? Oder verwenden sie stattdessen ein einzelnes Byte / Wort pro Pixel?
Wenn sie auf diese Weise gespeichert werden, wie würde die Routine im Assembler- / Maschinencode (die nur elementare Anweisungen wie bitweise, arithmetische und Datentransportoperationen aus der Befehlssatzarchitektur des Computers verwendet) verwendet, um diese Daten in ein Bild zu konvertieren das Display sieht aus wie? Wäre es so etwas wie:
- Speichern Sie die x- und y-Anzeigekoordinate für das aktuelle Pixel, das aktualisiert werden soll, in einem bestimmten Register.
- Speichern Sie die beiden ausgewählten RGB-Werte (in diesem Fall 0,255,0 für Grün und 0,0,0 für Schwarz) in zwei weiteren separaten Registern.
- Lassen Sie zwei weitere Register als auf 5 und 7 initialisierte Zähler fungieren, um die aktuelle Zeile und Spalte des gerenderten Bildes zu verfolgen.
- Testen Sie, ob das Spaltenregister nicht 0 ist. Wenn dies nicht der Fall ist, testen Sie, ob das LSB der Bitmap auf 1 gesetzt ist, dann UND das jeweilige RGB-Wertregister mit dem x- und y-Koordinatenregister in Abhängigkeit vom Ergebnis und dann MOV dieses Ergebnis zum Anzeigeausgangsregister.
- Dekrementieren Sie das Zeilenzählerregister um 1, prüfen Sie, ob es 0 ist. Wenn dies der Fall ist, setzen Sie es auf 5 zurück, erhöhen Sie die y-Koordinate um 1 und dekrementieren Sie den Spaltenzähler um 1.
- Verschieben Sie das Register mit der Bitmap 1 Bit nach links.
- JMP zu Anweisung 4.
Gibt es eine einfachere oder effizientere Möglichkeit, dies zu tun? Es scheint, als ob selbst etwas so Einfaches wie das Rendern eines einzelnen kleinen Textzeichens eine ziemlich große Anzahl von Operationen erfordert und ungefähr 200 CPU-Zyklen dauern würde.
Schließlich gibt es gute Bücher oder Ressourcen zum Code auf Maschinenebene für die Anzeige von Bildern von Grund auf neu, da ich keine finden konnte, da sie entweder dieses bestimmte Thema beschönigen oder der Code in einer höheren Sprache oder in einer höheren Sprache geschrieben ist Assembler mit Makros, die alle "schummeln" und nicht erklären, was auf der untersten Ebene grundsätzlich vor sich geht.