Ein erste Minimal-Assembler-Programm zum Addieren zweier Zahlen:
CLS
ASM "MeineFunktion", 2
mov eax,par1
mov ebx,par2
add eax,ebx
ENDASM
Var Long Ergebnis = MeineFunktion(38764, 879879878)
Print Ergebnis
Print "Fertig!"
WaitInput
Alles anzeigen
Die Zahl hinter dem Funktionsnamen gibt die Anzahl der Parameter an. Diese ist wichtig, damit nach dem Aufruf korrekt "aufgeräumt" wird. Im Debug-Modus, der derzeit im Interpreter noch fix eingestellt ist, wird ein Assemblerlisting für jede ASM-Funktion ausgegeben. Der Dateiname ist der Funktionsname mit der Endung "lst". Dieses Listing sieht hioer so aus:
MeineFunktion - 2
0000 55 PUSH ebp
0001 89E5 MOV ebp,esp
0003 8B4508 MOV eax,par1
0006 8B5D0C MOV ebx,par2
0009 01D8 ADD eax,ebx
000B 89EC MOV esp,ebp
000D 5D POP ebp
000E C20800 RET 8
5589E58B45088B5D0C01D889EC5DC20800
Alles anzeigen
Das zwingend notwendige "PUSH EBP" und "MOV EBP,ESP" am Anfang, sowie das "MOV ESP,EBP" und "POP EBP" und das "RET x" fügt XProfan selbsttätig hinzu. Vom ESP-Register (Stack) sollte man auf alle Fälle im Code die Finger lassen!
Par1 steht für [ebp + 8] (die Speicherstelle an der der erste Parameter abgelegt wird), Par2 für [ebp + 12], etc. Da wir uns in der 32-Bit-Welt befinden hat jeder Parameter eben 4 Byte! Der Wert in EAX ist der Rückgabewert der Funktion.
Der ASM-Befehl assembliert den nachfolgenden Code bis ENDASM und fügt die Funktion der Liste der importierten Funktionen bei, so wie es auch ImportDLL und ImportFunc machen. Anschließend steht die Funktion dem Programm zur Verfügung.
Gruß
Roland