Seite 1 von 1

Rückgabewerte bei Prozeduren

Verfasst: 03.05.2005 10:05
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?

Re: Rückgabewerte bei Prozeduren

Verfasst: 03.05.2005 12:07
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).