ASM in Purebasic dll reinbringen mit Ausgabe.

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 649
Registriert: 31.12.2009 11:58

ASM in Purebasic dll reinbringen mit Ausgabe.

Beitrag 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
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ASM in Purebasic dll reinbringen mit Ausgabe.

Beitrag von mk-soft »

Warum ?

Schau dir die ASM Ausgabe von Compiler an. Siehe Hilfe Command Line Compiler und Option '--commented'
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
funkheld
Beiträge: 649
Registriert: 31.12.2009 11:58

Re: ASM in Purebasic dll reinbringen mit Ausgabe.

Beitrag 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.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ASM in Purebasic dll reinbringen mit Ausgabe.

Beitrag 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.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
funkheld
Beiträge: 649
Registriert: 31.12.2009 11:58

Re: ASM in Purebasic dll reinbringen mit Ausgabe.

Beitrag von funkheld »

Danke , mit diesen kleinen Sachen hast du mir schon viel geholfen.
Antworten