PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MMX


DrHardware
2003-01-06, 16:39:16
Kann man die MMX Register auch diret mit Werten belegen?
Beispiel:
mov eax,1
MOVD MM1,eax
Ich muss immer diesen Umweg gehen wenn ich den Inhalt von MM1 mit einer Zahl belegen will. Wie kann ich das ganze in einem Schritt machen?

Xmas
2003-01-06, 16:52:39
MOVD funktioniert nur mit Memory-Operanden, MMX- und Integer-Registern. Nicht mit Immediate Values.

Es geht also nur so wie in deinem Beispiel oder indem du den Wert vom Speicher liest. Eine 0 lässt sich natürlich mit PXOR MM1, MM1 erzeugen.

DrHardware
2003-01-06, 17:02:39
danke für die Antwort

zeckensack
2003-01-06, 17:16:31
Originally posted by Xmas
Eine 0 lässt sich natürlich mit PXOR MM1, MM1 erzeugen. ... und mit PCMPEQD MM1,MM1 lassen sich alle Bits setzen :)

Nasenbaer
2003-01-08, 20:12:31
Originally posted by zeckensack
... und mit PCMPEQD MM1,MM1 lassen sich alle Bits setzen :)

???
Mensch 8085er Assembler-Code ist da viel einfacher zu verstehen. :)

Mfg Nasenbaer

zeckensack
2003-01-09, 04:54:37
Originally posted by Nasenbaer
???Ist eigentlich ganz einfach ...

MMX hat keine Befehle zum Laden von Konstanten. Deswegen muß man ein bisschen tricksen :)

PCMPEQD vergleicht zwei DWORDs aus einem Register mit den DWORDs eines zweiten Registers. Bei Übereinstimmung werden alle Bits des DWORDs im Zielregister gesetzt. Somit erhält man eine Maske, in die man mit POR, PAND und PNAND andere Werte reinfummeln kann. Das ganze braucht man, um conditional branches zu vermeiden.

Praktischerweise ist ein Register immer gleich sich selbst, deswegen kann man mit diesem Befehl auch fix alle Bits setzen ;)

Nasenbaer
2003-01-09, 18:38:34
@zeckensack

Hehe das ist ne gute Idee.
Irgendwann muss ich mich mit x86-Assemblerprogrammierung auch mal auseinandersetzen. Aber leider spür ich immer wieder meine Faulheit. :D

Mfg Nasenbaer