2012-04-06 4 views
0

Ich mache und Hausaufgaben in MARS Simulator (Assembly) und ich habe an einem Teil fest. Wir hassen in eine Registrierung ein 32-Bit-Wort zu laden. Die Bits von 0 bis 7 repräsentieren die blaue Farbe, die Bits 8 bis 15 die grüne Farbe und die Bits 16 bis 23 die rote Farbe. Die verbleibenden Bits werden auf Null gesetzt. Zum Beispiel ist die gelbe Farbe 0x00ffff00.Bit Arithmetik - verketten zwei Ergebnisse in einem Bit

Die Hausaufgaben sind in Baumaufgaben aufgeteilt und ich bin auf der letzten. Wir haben eine 64 mal 64 Pixel-Anzeige (jedes Pixel ist 4 * 4, also Gesamtbreite und -höhe sind 256). Die rote Farbe ist immer auf 0 gesetzt, grün ist 4 * die Nummer der Zeile und blau ist 4 * die Nummer der Spalte. Stellen Sie sich vor, wir sind in der Zeile 2 und 3, grüner Wert wäre 2 * 4 und blauer Wert 3 * 4. Also, in diesem Beispiel, in hex, wäre 12 0xc und 8 0x08 und die Nummer, die in die Registrierung geladen werden sollte, wäre 0x00000c08.

Also mein erster Zweifel ist, wie kann ich Bit Algebra verwenden, um das Ergebnis der 2 Multiplikationen zu verketten?
Und mein zweiter Zweifel ist das. Stellen Sie sich vor, wir sind das letzte Pixel, das wir 64 * 4 und 64 * 4 haben müssen. Das Ergebnis ist 256 und wir können nicht nur 8 Bits zur Darstellung dieser Zahl verwenden, also sollte ich wahrscheinlich nicht die Pixel 1 bis 64, sondern 0 bis 63 verwenden. Recht?

+0

Verwenden Binärverschiebungen oder 2 multiplizieren^n. Welcher Prozessor übrigens? – BlackBear

+0

denke 0-63 nicht 1-64. 63 = 0x3F 63 * 4 = 0x3F << 2 = 0xFC das passt innerhalb von 8 Bit kein Problem. –

+0

Windows mit x64-Prozessor. Was wäre das angegebene Beispiel? Tut mir leid, aber ich verstehe nicht. – Favolas

Antwort

1

Sie haben also 0x08 und 0x0C und Sie wollen 0x0C08?

Suchen Bitverschieben

In C wie Sprachen, es wäre so etwas wie

(0x0C << 8) | 0x08 

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

Meinst du nicht '(0x0C << 8) | 0x08'? – harold

+0

Ja, ich meinte das, froh zu sehen, dass jemand aufpasst –

+0

@TonyHopkinson Danke. Mit deinem Vorschlag gelang es, mein Problem zu lösen :) – Favolas