Entwickler-Ecke

Windows API - Assembler Parameter!


Berki - Sa 14.06.03 15:41
Titel: Assembler Parameter!
Hallo!

Habe eine Frage zur Parameterübergabe in Delphi an Assembler routinen. Und zwar: In Delphi ist die Funktion Pos wie folgt deklariert:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure       _Pos{ substr : ShortString; s : ShortString ) : Integer};
asm
{     ->EAX     Pointer to substr               }
{       EDX     Pointer to string               }
{     <-EAX     Position of substr in s or 0    }

        PUSH    EBX
        PUSH    ESI
        PUSH    EDI

wieso kommt diese Prozedur ohne Parameter aus, und ist auch noch eine Funktion?????

mfg Daniel


AndyB - Sa 14.06.03 16:00

In Assembler gibt es keinen Funktionen sondern nur Prozeduren. Es hat sich jedoch ein Standard entwickelt in dem das Ergebnis einer Funktion (bei Zahlen, Zeigern) im EAX/AX/AL Register zurückgeliefert wird. Zudem ist die Pos()-Funktion mit Compiler Magic umgeben. Was du also siehst ist nicht das, wass dir der Compiler dann anbietet.

Zu den Parametern:
In Delphi nutzen alle Funktionen/Prozeduren/Methoden als Vorgabe die Aufrufkonvention register. Diese besagt, dass die ersten drei Parameter (von Links her) über die Register EAX, EDX und ECX an die Funktion übergeben werden. Somit spart Delphi die Stack-Operationen womit das Programme schneller wird.