Autor Beitrag
Berki
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Sa 14.06.03 15:41 
Hallo!

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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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.

_________________
Ist Zeit wirklich Geld?