0

MARS シミュレーター(Assembly)で宿題をしているのですが、1 つの部分で行き詰まっています。

レジスタに 32 ビット ワードをロードする必要があります。

ビット 0 ~ 7 は青色、ビット 8 ~ 15 は緑色、ビット 16 ~ 23 は赤色を表します。残りのビットはゼロに設定されます。

たとえば、黄色は 0x00ffff00 です。

 [31]       [24]|[23]         [16]|[15]         [8] | [7]         [0]
+----+-   -+----+----+- ... -+----+----+- ... -+----+----+- ... -+----+
| 0  | ... | 0  |    RED COLOR    |   GREEN COLOR   |   BLUE COLOR    |
+----+-   -+----+----+- ... -+----+----+- ... -+----+----+- ... -+----+

つまり、メモリ順の BGR0 カラー フォーマット、またはネイティブ エンディアン マシン語の 0RGB です。

宿題は 3 つのタスクに分かれており、私は最後のタスクに取り組んでいます。64 x 64 ピクセルのディスプレイがあります (各ピクセルは 4*4 なので、幅と高さの合計は 256 です)。赤は常に 0 に設定され、緑は 4 * 行の数、青は 4 * 列の数です。2 行 3 行にあると想像してください。緑の値は 2*4 で、青の値は 3*4 です。したがって、この例では、16 進数で 12 は 0xc、8 は 0x08 になり、レジスタにロードする数値は 0x00000c08 になります。

私の最初の質問は、ビット代数を使用して 2 つの乗算の結果を連結するにはどうすればよいかということです。

そして、私の 2 番目の質問は次のとおりです。最後のピクセルの行と列にいると想像してください: 64 * 4 と 64 * 4.結果は 256 であり、8 ビットだけを使用してその数値を表すことはできないため、おそらくピクセルを使用しないでください。 1 から 64 でも 0 から 63 ですよね?

4

1 に答える 1

1

0x08 と 0x0C があり、 0x0C08 が必要ですか?

ルックアップビットシフト

Cのような言語では、次のようになります

(0x0C << 8) | 0x08

(0x0C << 8) gives 0x0C00
于 2012-04-06T16:47:56.097 に答える