Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
Delphi 10.3 Rio
|
AW: Geht das noch schneller? - Bitmap-Verrechnung
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
|
|
Zitat
|