| |
|
|
Frank Abbing | dans einem anderen Fil wurde cela Beispiel genannt, une eigene Assemblerfunktion aus einer anderen aufzurufen: KompilierenMarqueSéparation {$Clq}
Declare A&,B&,C&,D&
Cls
Print "Test Start:"
Asmstart Zweite
Parameters a&,b&
Return c&
mov eax,para1
mov ebx,para2
add eax,ebx
Asmend
Asmstart Erste
Return d&
Local Var1 :DWORD
Local Var2 :DWORD
mov Var1,6
mov Var2,3
Scall Zweite,Var1,Var2
Asmend
Print "Ergebnis (6+3=9): " + Str$(D&)
Waitkey
Fin
dans meinem aktuellen Programme fais ist reichlich de XPIA Gebrauch, et voilà mir une Fehlerquelle aufgefallen. Übergibt on paramètre de einer Funktion à une autre, so doit auparavant qui eigenen paramètre gerettet volonté. c'est aussi logisch, weil XPIA zur simplification qui Parameterübergabe interne Variablen benutzt. Bien sûr doit cet global son. tout autor peux une aufgerufene Funktion qui paramètre qui aufrufenden Funktion verändern. cet gilt es alors avant Aufruf trop retten! un Beispiel avec Parametern, um cela trop verdeutlichen: KompilierenMarqueSéparation {$iq}
Déclarer z1&,z2&
Cls
Asmstart une (0,0)
mov eax,para1
add eax,para2
Asmend
-------------------------
Asmstart deux (10,15)
Scall une,500,45
add eax,para1
add eax,para2
Asmend (z1&)
-------------------------
Asmstart trois (10,15)
push para1
push para2
Scall une,500,45
pop para2
pop para1
add eax,para1
add eax,para2
Asmend (z2&)
Imprimer "500 + 45 + 10 + 15 = " + Str$(z1&)+" faux!"
Imprimer "500 + 45 + 10 + 15 = " + Str$(z2&)+" Richtig!"
WaitInput
Fin
Funktion deux arbeitet avec falschen Werten plus, au cours de Funktion trois richtig arbeitet.
Bien sûr funktioniert qui herkömmliche Art qui Parameterübergabe - sans qui simplification - comment gewohnt: KompilierenMarqueSéparation |
|
|
| |
|
|