64ビットのワードアドレス指定可能なコンピューターがあり、バイナリイメージのビットマップとして格納されている5x7文字(下図のような)をメモリマップディスプレイに出力するようにプログラムしたいとします。
1文字あたり5 x 7 = 35ピクセルなので、1つの単語に35ビットを使用して文字を格納できます。最下位ビットがワードの左側から始まり、上記のように画像の各ピクセルがn番目のビットで表される場合、上記の数値「3」は、01110100010000100110000011000101110としてメモリに格納され、その後に29が使用されません。ビットは0に設定されています。
これは、キャラクターが古い/現代のコンピューターにどのように保存されているのですか?または、代わりにピクセルごとに1バイト/ワードを使用しますか?
これらがこの方法で格納されている場合、アセンブリ/マシンコードのルーチン(コンピューターの命令セットアーキテクチャーからのビット単位、算術、およびデータ転送操作などの基本命令のみを使用)は、このデータをディスプレイはこんな感じ?それは次のようなものでしょうか?
- 更新する現在のピクセルのxおよびy表示座標を特定のレジスタに格納します。
- 選択した2つのRGB値(この場合、緑の場合は0、255、0、黒の場合は0、0、0)を他の2つの別のレジスタに保存します。
- さらに2つのレジスターを5および7に初期化されたカウンターとして機能させ、レンダリングされるイメージの現在の行と列を追跡します。
- 列レジスタが0ではないかどうかをテストします。そうでない場合は、ビットマップのLSBが1に設定されているかどうかをテストし、結果に応じてそれぞれのRGB値レジスタとxおよびy座標レジスタをANDで結合し、その結果をMOVしますディスプレイ出力レジスタに。
- 行カウンタレジスタを1だけデクリメントして、0かどうかをテストします。0の場合は、それを5に戻して、y座標を1だけインクリメントし、列カウンタを1だけデクリメントします。
- ビットマップを保持するレジスタを1ビット左にシフトします。
- JMPから命令へ4。
これを行うためのより簡単またはより効率的な方法はありますか?単一の小さなテキスト文字をレンダリングするような単純なものでさえ、かなりの数の操作を必要とし、約200 CPUサイクルを要するようです。
最後に、マシンレベルのコードにゼロから画像を表示するための優れた書籍やリソースはありますか?この特定の主題について光沢があるか、コードが高級言語で記述されているか、またはマクロを使用するアセンブラ。これらはすべて「不正行為」であり、基本的に最下位レベルで行われていることを説明していません。