Aktuelle Zeit: 20.11.2017 07:34

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 12:43 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Ich würde diese Procedure gerne nach fasm übersetzen (für ein Objektmodul).

Code:
;PB v.5.60 x64
Procedure.i Processed(Bytes.i,BytesProccessed)
  Protected Factor.f = Bytes / 100
  ProcedureReturn BytesProccessed / Factor
EndProcedure


Ziel -> Funktion als reinen fasm Code:
Code:
proc Processed
...
endp


Zum Testen habe ich versucht das Ganze erst einmal mit Inline-fasm zu schreiben... leider ohne Erfolg. :(
Code:
Procedure.i ASM_Processed(Bytes.i,BytesProcessed.i)
  !xor rax,rax
  !mov rbx,64h
  !fld qword[rsp+30h]
  !fdiv qword[rbx];<- Error: (read error at address 100) ???
  !fstp qword[rax]
  ProcedureReturn;Bytes / 100
EndProcedure


Was mache ich falsch? :freak:


Zuletzt geändert von Mijikai am 02.09.2017 19:13, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 16:13 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Habs doch noch hinbekommen :D

Code:
Procedure.i ASM_Processed(Bytes.i,BytesProcessed.i)
  !fild qword[rsp+30h]
  !mov qword[rsp+30h],64h
  !fild qword[rsp+30h]
  !fdivp
  !fild qword[rsp+38h]
  !fld st1
  !fdivp
  !fistp qword[rsp+30h]
  !mov rax,[rsp+30h]
  ProcedureReturn
EndProcedure


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 18:20 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
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 ?

_________________
PureBasic 5.45 LTS / 5.61 (Windows x86/x64) | Windows10 Pro x64 | Z87-PLUS | i7 4770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 02.09.2017 19:06 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
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:
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:
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 20:31 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hi,
@Mijikai

ich kenne mich mit ASM nicht aus, aber deine Procedure (in ASM) liefert bei mir nur Müll.

Außerdem ist der erste Parameter der Procedure bei mir ja hier:

!fild qword[rsp+28h] ;Nehme den ersten Parameter (Bytes)

und der zweite Parameter ja hier:

!fild qword[rsp+30h] ;Nehme den zweiten Parameter (BytesProcessed)

Wie gesagt deine Procedure läuft irgend wie nicht.

Ich kenne mich mit Assembler aber auch nicht aus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 20:40 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Die Procedure ist nur für 64-Bit ausgelegt! Die funktioniert mit 32-Bit nicht :)

Gruß
Thomas

_________________
PureBasic 5.61 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 18.2 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 20:48 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hi ts-soft:

Das ist mir schon klar!

Das rsp, rsi, rax, .. Register gibt es ja auch nur unter 64 bit.

Trotzdem liefert die Procedure bei mir einen undefinierten Wert.

Außerdem liegt bei mir der erste Procedure-Parameter immer genau bei [rsp+28h] und der zweite Procedure-Parameter immer genau bei [rsp+30h].

Ob nun word, dword, qword, ... ist dabei egal.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 20:50 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
ccode_new hat geschrieben:
...
Trotzdem liefert die Procedure bei mir einen undefinierten Wert.

Außerdem liegt bei mir der erste Procedure-Parameter immer genau bei [rsp+28h] und der zweite Procedure-Parameter immer genau bei [rsp+30h].

Ob nun word, dword, qword, ... ist dabei egal.


Welches OS?
Ich habs nur auf Win10 x64 getestet.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 20:53 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Welches OS?

Ok, genau da liegt wahrscheinlich der Hund begraben.

*(Linux)* oh oh!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 20:55 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Das sollte immer gehen:
Code:
Procedure.i ASM_Processed(Bytes.i,BytesProcessed.i)
  !fild qword[p.v_Bytes]
  !mov qword[p.v_Bytes],64h
  !fild qword[p.v_Bytes]
  !fdivp
  !fild qword[p.v_BytesProcessed]
  !fld st1
  !fdivp
  !fistp qword[p.v_Bytes]
  !mov rax,[p.v_Bytes]
  ProcedureReturn
EndProcedure


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye