Seite 1 von 1

ASM in Purebasic dll reinbringen mit Ausgabe.

Verfasst: 03.04.2023 21:59
von funkheld
Hallo. guten Tag.

ich hab hier 2 Procedure die funktionieren als DLL.
Nun möchte ich den Inhalt in der Procedure mit ASM lösen , Mult und Div , übergeben werden 2 Werte und die Ausgabe ist dann die Lösung von der ASM-Routine.

Wie geht das bitte.

------------------------------------
ProcedureCDLL.l mult(a.l,b.l)
wertl.l = a*b
ProcedureReturn wertl.l
EndProcedure

ProcedureCDLL.l div(a.l,b.l)
wertl.l = a/b
ProcedureReturn wertl.l
EndProcedure
---------------------------------

danke

Re: ASM in Purebasic dll reinbringen mit Ausgabe.

Verfasst: 03.04.2023 22:18
von mk-soft
Warum ?

Schau dir die ASM Ausgabe von Compiler an. Siehe Hilfe Command Line Compiler und Option '--commented'

Re: ASM in Purebasic dll reinbringen mit Ausgabe.

Verfasst: 03.04.2023 22:46
von funkheld
Das interessiert mich einmal mit 74 Jahren.
Wie man das in einer Dll erstellt meine beiden Beispiele mit Ausgabe.

Habe mich wohl falsch ausgedückt, in der Procedure soll der ASM-Code für Mult und Div stehen.

Danke.

Re: ASM in Purebasic dll reinbringen mit Ausgabe.

Verfasst: 03.04.2023 23:37
von mk-soft
Es dürfen nicht alle register verwendet werden. Siehe PB Hilfe Inline Assembler.

Code: Alles auswählen


ProcedureCDLL.l add(a.l, b.l)
  !mov eax, dword[p.v_a]
  !add eax, dword[p.v_b]
  ProcedureReturn
EndProcedure

ProcedureCDLL.l mul(a.l, b.l)
  !mov eax, dword[p.v_a]
  !mov ecx, dword[p.v_b]
  !imul eax, ecx
  ProcedureReturn
EndProcedure

ProcedureCDLL.i div(a.i, b.i)
  !mov rax, qword[p.v_a]
  !mov rcx, qword[p.v_b]
  !cqo
  !idiv rcx
  ProcedureReturn
EndProcedure

r1 = add(1,1)
Debug r1

r1 = mul(2,2)
Debug r1

r1 = div(16,2)
Debug r1
Mit ProcedureReturn ohne Angabe wird das RAX register zurückgegeben.

Re: ASM in Purebasic dll reinbringen mit Ausgabe.

Verfasst: 04.04.2023 11:44
von funkheld
Danke , mit diesen kleinen Sachen hast du mir schon viel geholfen.