Bisonte hat geschrieben:Ich könnte es nicht
Wobei ich dachte... cool... wird es wohl schneller sein... aber weit gefehlt.
Die ASM Procedure ist um etliche Ecken langsamer....
hab das mal im schleifendurchlauf mit 100000x Befehl ausführen probiert.
ASM ca 48ms
PB ca. 1ms
Ohne Debugger....
Und nun frag ich mich gerade warum das überhaupt in ASM sein muss ?
So groß ist der Unterschied (lt. Output) eigentlich nicht - 'fdivp' mag etwas langsamer sein.
Ich brauch das Ganze (abgewandelt) für ein Objektmodul das ich in fasm schreibe
Output PureBasic Procedure:
Code: Alles auswählen
48 89 4C 24 08 - mov [rsp+08],rcx
48 89 54 24 10 - mov [rsp+10],rdx
41 57 - push r15
48 31 C0 - xor rax,rax
50 - push rax
48 83 EC 28 - sub rsp,28 { 40 }
DF 6C 24 40 - fild qword ptr [rsp+40]
D8 35 113F0000 - fdiv dword ptr [IMAGE_BASE+5028] { [100.00] }
D9 5C 24 28 - fstp dword ptr [rsp+28]
4C 8B 7C 24 48 - mov r15,[rsp+48]
4C 89 7C 24 F8 - mov [rsp-08],r15
DF 6C 24 F8 - fild qword ptr [rsp-08]
D8 74 24 28 - fdiv dword ptr [rsp+28]
DF 7C 24 F8 - fistp qword ptr [rsp-08]
48 8B 44 24 F8 - mov rax,[rsp-08]
EB 03 - jmp IMAGE_BASE+113B
48 31 C0 - xor rax,rax
48 83 C4 30 - add rsp,30 { 48 }
41 5F - pop r15
C3 - ret
Output PureBasic Inline-fasm Procedure:
Code: Alles auswählen
48 89 4C 24 08 - mov [rsp+08],rcx
48 89 54 24 10 - mov [rsp+10],rdx
48 83 EC 28 - sub rsp,28 { 40 }
DF 6C 24 30 - fild qword ptr [rsp+30]
48 C7 44 24 30 64 - mov [rsp+30],64 { 100 }
DF 6C 24 30 - fild qword ptr [rsp+30]
DE F9 - fdivp st(1),st(0)
DF 6C 24 38 - fild qword ptr [rsp+38]
D9 C1 - fld st(1)
DE F9 - fdivp st(1),st(0)
DF 7C 24 30 - fistp qword ptr [rsp+30]
48 8B 44 24 30 - mov rax,[rsp+30]
EB 03 - jmp IMAGE_BASE+1130
48 31 C0 - xor rax,rax
48 83 C4 28 - add rsp,28 { 40 }
C3 - ret
Der Testcode wäre interessant dann kann ich noch etwas rum experimentieren.