Rückgabewerte bei Prozeduren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Rückgabewerte bei Prozeduren

Beitrag von Lebostein »

Hi,

Gibt eine Prozedur immer 0 zurück, wenn sie auf "natürlichem Wege" verlassen wird? Ich habe gehört, das Prozeduren den aktuellen Stack-Wert zurückgeben können, angeblich nur wenn ich procedurereturn ohne eine variable schreibe...

Also nochmal zusammengefasst. So weit mir bekannt, gibt es 3 Wege eine prozedur zu verlassen:

1) Das 'EndProcedure' wird erreicht - Prozedur gibt 0 zurück
2) Verlassen mit 'ProcedureReturn' - Aktueller Stack wird zurückgegeben
3) Verlassen mit 'ProcedureReturn variable' - Der Inhalt der Variable wird zurückgegeben

Sind meine Annahmen, was den Rückgabewert angeht, richtig?
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Rückgabewerte bei Prozeduren

Beitrag von Danilo »

Lebostein hat geschrieben:2) Verlassen mit 'ProcedureReturn' - Aktueller Stack wird zurückgegeben
Bei diesem Punkt wird das Register EAX zurückgegeben wenn
die Prozedur Long zurückgibt.

Code: Alles auswählen

Procedure xyz()
  !MOV dword EAX, 0AABBCCDDh
  ProcedureReturn
EndProcedure

Debug Hex(xyz())
Bei Word ist es dann eben AX und bei Byte AL.

Floats werden bei normalen Prozeduren über den FPU-Stack
zurückgegeben, bei DLL-Prozeduren auch über EAX.

Mach am besten mal ein paar solche Prozeduren auch schau
Dir dann den ASM-Source an (Compilerargument /COMMENTED).

Beachte auch das dies Betriebssystem- und Prozessorabhängig ist
(68000 != x86 != AMD64 != IA64 != Mac).
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten