| |
|
|
Frank Abbing | In una otro Hilo wurde el Ejemplo genannt, una propio Assemblerfunktion de uno otro aufzurufen: KompilierenMarcaSeparación {$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
End
In mi aktuellen Programa mache es reichlich de XPIA Gebrauch, y como me está una Fehlerquelle aufgefallen. Übergibt uno Parámetro de uno Función a una otro, así necesario vorher el eigenen Parámetro gerettet voluntad. Es auch logisch, porque XPIA a Vereinfachung el Parameterübergabe interne Variables benutzt. Natürlich necesario esta global ser. Darum kann una aufgerufene Función el Parámetro el aufrufenden Función verändern. Diese gilt lo also antes Aufruf a retten! Ein Ejemplo con Parametern, en el a verdeutlichen: KompilierenMarcaSeparación {$iq}
Declarar z1&,z2&
Cls
Asmstart Eins (0,0)
mov eax,para1
add eax,para2
Asmend
-------------------------
Asmstart Zwei (10,15)
Scall Eins,500,45
add eax,para1
add eax,para2
Asmend (z1&)
-------------------------
Asmstart Drei (10,15)
push para1
push para2
Scall Eins,500,45
pop para2
pop para1
add eax,para1
add eax,para2
Asmend (z2&)
Imprimir "500 + 45 + 10 + 15 = " + Str$(z1&)+" Falsch!"
Imprimir "500 + 45 + 10 + 15 = " + Str$(z2&)+" Richtig!"
WaitInput
End
Función Zwei arbeitet con falschen Werten más, während Función Drei correcto arbeitet.
Natürlich funktioniert el herkömmliche Art el Parameterübergabe - sin la Vereinfachung - como gewohnt: KompilierenMarcaSeparación |
|
|
| |
|
|