000
10.07.2005, 19:13 Uhr
Oliver
S2-Pixelgeneral
|
Hi,
ich benutze Inline Assembler in VC8 (Beta), um eine Surface zu "verdunkeln", damit das ein bisschen schneller geht, gleich noch mit MMX. Allerdings klappt das nicht so ganz, wenn ich mit dem Debugger in die erste Zeile vom _asm Block springe und die ausführen lasse, steht in eax 4 ?? Das Lustige ist nun, wenn man sich das Disassembly anschaut, übersetzt er die Zeile
mov eax, width
in
mov eax, 4
width und height sind Member der Klasse Surface und vom Typ unsigned int.
Nun die Frage: Warum?
C++: |
void Surface::BlendDark (const unsigned long color) { unsigned char * data; unsigned long pitch; this->Lock(&data,pitch);
pitch -= width * 4;
_asm { mov eax, width shr eax, 1 mov ebx, data mov ecx, height movd mm0, color psllq mm0, 32 movd mm0, color
LoopY:
mov eax, width shr eax, 1
LoopX:
movq mm1, dword ptr[ebx] psubusb mm1, mm0 movq dword ptr[ebx], mm1
dec eax jnz LoopX
add ebx, pitch
dec ecx jnz LoopY
emms }
this->Unlock(); }
|
-- Demokratie ist die Diktatur der Mehrheit.
www.siedler25.org/ ( Siedler2 - Remake ) |