Interfejsowanie C w trybie 64 bitowym
Parametry 64-bit - przykład 4

Jeżeli zwracamy przez wartość dużą strukturę i nie zmieści się ona w rejestrach RAX,RDX,XMM0,XMM1 to do funkcji w RDI zostanie przesłany adres gdzie należy umieścić wynik.

typedef struct {
  int a, b, c, d, e;
} Dane;
 
extern "C" Dane suma(int, int);
...
Dane c = suma(4, 5);

W rejestrze RDI zostanie przesłany adres zmiennej c.
W RSI będzie wartość 4, a w RDX wartość 5.

Wynik wpisujemy bezpośrednio do zmiennej c, a w RAX zwracamy adres zmiennej c

Program w C
Moduł w assemblerze


Tomasz Kapela, Kraków 2011-2020