Einzelnen Beitrag anzeigen

Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#50

AW: Geht das noch schneller? - Bitmap-Verrechnung

  Alt 26. Nov 2014, 12:33
Aber wieso verwendest Du 'MulDiv' nicht?
MulDiv ist immer ein Far-Call und Jumps und damit auf jeden Fall langsamer. (Auch wenn ich es nicht getestet habe)

Aber ein

C := A * 5 div B;

ist:
Code:
xor eax,eax
mov al,[ebp-$5]
lea eax,[eax+eax*4]
xor edx,edx
mov dl,[ebp-$06]
mov ecx,edx
xor edx,edx
div ecx
mov edx,[ebp-$04]
mov [edx+$002d4],al
ein C := MULDIV(A,5,B) ist:
Code:
xor eax,eax
mov al,[ebp-$6]      
push eax
push $05
xor eax,eax
mov al,[ebp-$5)
Push eax            // bishier schon fast so viele Ticks wie oben
CALL MulDiv
// aus MulDiv
jmp dword ptr[$00896ae8]
mov eax,[esp+$04}
or eax,eax
js $75201b80
mov edx,[esp+$80]
or edx,edx
js $75201c06
mul edx
mov ecx,[eps+$0c]
or ecx,ecx
js $75201c48
sar ecx,1
add eax,ecx
adc edx.$00
cmp edx,[esp+$0c]
jnb $75201b7a
div dword ptr [esp+$0c]
or eax,eay
js $75201b7a
ret $000c
mov edx,[ebp-$04]  // gleich mit oben
mov [edx+$02d4],al // gleich mit oben
Ein C := A * B div 8 ist:
Code:
xor eax,eax        // gleich mit oben
mov al,[ebp-$05]   // gleich mit oben
xor edx,edx        // gleich mit oben
mov dl,[ebp-$06],
imul edx
shr eax, $03        // div 8 erkannt
mov edx,[ebp-$04]  // gleich mit oben
mov [edx+$02d4],al // gleich mit oben

Mavarik
  Mit Zitat antworten Zitat