2012-04-06 15 views
0

MARSシミュレータ(アセンブリ)でやっていることと宿題が1つの部分でスタックしました。 レジストリに32ビットワードをロードするのは嫌です。 0〜7のビットは青色を表し、ビット8〜15は緑色を、ビット16〜23は赤色を表す。残りのビットは0に設定されます。たとえば、黄色は0x00ffff00です。ビット演算 - 1ビットで2つの結果を連結します

宿題は木の仕事に分かれていて、私は最後にやっています。 私たちは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を使うべきです。右?

+0

使用バイナリシフトのようなものを希望または2^nで乗算の言語のようにCで

をシフトを検索します。途中でどのプロセッサ? – BlackBear

+0

は0-63ではない1-64と考える。 63 = 0x3F 63 * 4 = 0x3F << 2 = 8ビット以内に収まる0xFCは問題ありません。 –

+0

x64プロセッサ搭載のWindows。提供された例は何ですか?申し訳ありませんが、私は理解していません。 – Favolas

答えて

1

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

は少しそれが

(0x0C << 8) | 0x08 

(0x0C << 8) gives 0x0C00 
+1

あなたは '(0x0C << 8)| 0x08'? – harold

+0

はい、私は、誰かが注意を払っているのを見てうれしいことを意味した –

+0

@ TonyHopkinsonありがとう。あなたの提案は私の問題を解決するために管理:) – Favolas

関連する問題