Reihenfolge bits invertieren < Assembler < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 18:16 Do 05.07.2012 | Autor: | Basser92 |
Aufgabe | Gegeben sei der Wert a im Register $1. Invertieren Sie die Reihenfolge der Bits in a, so dass [mm] a'_{i}=a_{31-i} [/mm] für [mm] 0\le i\le [/mm] 31.
Hinweis: Die Musterlösung kommt mit 35 Befehlen aus und enthält keine Verzweigungen, es ist jedoch nicht erforderlich, dass SIe ihren Algorithmus optimieren. |
Wie geht sowas? Kann ich das einfach über eine Maske machen, bei der immer nur 1 Bit den Wert 1 hat und dann jeweils das Register $1 mit der Maske AND verknüpfen und die Ergebnisse aufaddieren?
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 08:30 Fr 06.07.2012 | Autor: | rainerS |
Hallo!
> Gegeben sei der Wert a im Register $1. Invertieren Sie die
> Reihenfolge der Bits in a, so dass [mm]a'_{i}=a_{31-i}[/mm] für
> [mm]0\le i\le[/mm] 31.
> Hinweis: Die Musterlösung kommt mit 35 Befehlen aus und
> enthält keine Verzweigungen, es ist jedoch nicht
> erforderlich, dass SIe ihren Algorithmus optimieren.
> Wie geht sowas? Kann ich das einfach über eine Maske
> machen, bei der immer nur 1 Bit den Wert 1 hat und dann
> jeweils das Register $1 mit der Maske AND verknüpfen und
> die Ergebnisse aufaddieren?
Im Prinzip ja. Statt der Addtion könntest du auch mit OR verknüpfen. Schreib das doch mal im Detail auf!
Viele Grüße
Rainer
|
|
|
|
|
Mein Algorithmus sieht so aus:
# Maske erzeugen
lui $2, 0x0001
srl $2, $2, 16
# Laufvariable gleich 31 setzen
addi $5, $0, 31
# Zwischenergebnis gleich 0 setzen
add $4, $0, $0
# letzte 16 bit bitweise verschieben
E: beq $5, 1, F
and $3, $1, $2
sllv $3, $3, $5
or $4, $4, $3
# Maske um 1 Bit verschieben
sll $2, $2, 1
# Laufvariable ändern
subi $5, $5, 2
jump E
# erste 16 bit bitweise verschieben
F: beq $5, 31, G
and $3, $1, $2
srlv $3, $3, $5
or $4, $4, $3
# Maske um 1 Bit verschieben
sll $2, $2, 1
# Laufvariable ändern
addi $5, $5, 2
jump F
# Ergebnis wieder in $1 speichern
F: add $1, $0, $4
So müsste es doch eigentlich funktionieren, oder?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 10:20 So 08.07.2012 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|