RAX: 0xAF650B76
RBX: 0xF0F0F0F0
RAX stellt dabei meine Daten dar, in RBX liegt eine Bitmaske, mit Hilfe
von AND wird die Hälfte von RAX eliminiert. Was in RAX übrig bleibt ist
0xA0600070. Ich möchte jetzt die 0en zwischen den Werten eliminieren.
Deshalb meine Frage ob es einen entsprechenden Befehl gibt und ob etwas
dieser Art von Visual C++ Intrinsics unterstütz wird?
mfg, Hipo
Möglich, daß es im 64-Bit Modus dafür 'n extra Befehl gibt.
Im 32-Bit Modus könnte man bspw. sowas machen:
mov eax,$AF650B76
and eax,$F0F0F0F0
mov ebx,eax
shr ebx,20
or eax,ebx
and eax,$0000FFFF
Dann ist aber noch die Reihenfolge der Hex-Ziffern verkehrt,
aber Du hast ja auch nur nach "Kompression" gefragt.
Gruss
Jan Bruns
Welches Ergebnis willst Du haben? 0xa67 oder 0xa607? Falls letzteres:
Dafür gibt es MMX bzw SSE-Befehle (packXXX), die die komplette Operation
übernehmen.
--
Gruß,
Sebastian
Ist gut, daß Du's erwähnst. Aber ich meine doch, daß bei MMX
die kleinste Verarbeitungseinheit das Byte ist. Für SSE weiß ich
gerade nicht, schlag doch mal nach.
Davon mal abgesehen hilft's eh nicht, wenn man von Allzweckrgistern
ausgeht, und das Ergebnis wieder in einem Allzweckregister haben will.
Gruss
Jan Bruns
Urgs, ja. Ich war gedanklich bei Bytes, weil man sowas "normalerweise"
nur mit Bytes macht :)
> Für SSE weiß ich
> gerade nicht, schlag doch mal nach.
>
> Davon mal abgesehen hilft's eh nicht, wenn man von Allzweckrgistern
> ausgeht, und das Ergebnis wieder in einem Allzweckregister haben will.
Ich habe das dumpfe Gefühl, dass der OP sowieso MMX/SSE verwenden will,
wenn er so Operationen (in schnell) braucht.
--
Gruß,
Sebastian
Ich wollte noch fragen, ob mir jemand eine gute Einführung in ML64 (MASM
für x64) empfehlen kann?
mfg, hipo