Załóżmy, że mamy 64-bitowy adresowalny komputer i chcemy go zaprogramować, aby wyświetlał znak 5 x 7 zapisany jako bitmapa obrazu binarnego (takiego jak ten poniżej) na wyświetlaczu odwzorowanym w pamięci.
Ponieważ mamy 5 x 7 = 35 pikseli na znak, moglibyśmy zapisać znak przy użyciu 35 bitów w jednym słowie. Z najmniej znaczącym bitem rozpoczynającym się po lewej stronie słowa, a każdy piksel na obrazie jest reprezentowany przez n- ty bit, jak pokazano powyżej, liczba „3” powyżej byłaby przechowywana w pamięci jako: 01110100010000100110000011000101110, a następnie 29 nieużywane bity ustawione na 0.
Czy w ten sposób postacie były / są przechowywane na starych / nowoczesnych komputerach? A może zamiast tego używają jednego bajtu / słowa na piksel?
Jeśli są one przechowywane w ten sposób, to co zastosowałaby procedura w asemblerze / kodzie maszynowym (wykorzystując jedynie elementarne instrukcje, takie jak operacje bitowe, arytmetyczne i transport danych z architektury zestawu instrukcji komputera) użyte do konwersji tych danych w obraz na wyświetlacz wygląda? Czy byłoby to coś takiego:
- Zachowaj współrzędne wyświetlania xiy dla bieżącego piksela, który ma zostać zaktualizowany, w pewnym rejestrze.
- Przechowuj dwie wybrane wartości RGB (w tym przypadku 0,255,0 dla zieleni i 0,0,0 dla czerni) w dwóch innych osobnych rejestrach.
- Niech dwa kolejne rejestry działają jak liczniki zainicjowane na 5 i 7, aby śledzić bieżący wiersz i kolumnę renderowanego obrazu.
- Sprawdź, czy rejestr kolumny nie jest 0. Jeśli nie, sprawdź, czy LSB mapy bitowej jest ustawiony na 1, a następnie ORAZ odpowiedni rejestr wartości RGB z rejestrem współrzędnych xiy w zależności od wyniku, a następnie MOV ten wynik do rejestru wyjściowego wyświetlacza.
- Zmniejsz rejestr licznika wierszy o 1, sprawdź, czy wynosi 0. Jeśli tak, ustaw go z powrotem na 5 i zwiększ współrzędną y o 1 i zmniejsz licznik kolumn o 1.
- Przesuń rejestr trzymając bitmapę 1 bit w lewo.
- JMP do instrukcji 4.
Czy istnieje prostszy lub bardziej wydajny sposób na zrobienie tego? Wydaje się, że nawet coś tak prostego jak renderowanie pojedynczego małego tekstu wymaga dość dużej liczby operacji i zająłoby około 200 cykli procesora.
Na koniec, czy są jakieś dobre książki lub zasoby na temat kodu na poziomie maszyny do wyświetlania obrazów od zera, ponieważ nie byłem w stanie ich znaleźć, ponieważ albo mówią o tym konkretnym temacie, albo kod jest napisany w języku wysokiego poziomu lub asembler używający makr, z których wszystkie „oszukują” i nie wyjaśniają, co się zasadniczo dzieje na najniższym poziomie.