Pozostawienie wyboru rejestrów kompilatorowi
Ze względów optymalizacyjnych dobrze jest wybór rejestru do przekazywania parametrów pozostawić kompilatorowi,
można też przekazywać zmienne w pamięci.
int x=2, y=3, result;
asm( "movl %1, %%eax;"
"addl %2, %%eax;"
"movl %%eax, %0"
: "=r"(result)
: "r"(x),
"m"(y)
: "eax"
);
- x będzie w którymś z rejestrów dostępnym pod nazwą %1,
- y będzie w pamięci pod adresem %2
- wynik będzie zwrócony w rejestrze %0 i zapisany do zmiennej result,
- w ostatniej części informujemy kompilator, że nasz kod zmienia eax
i kompilator nie może już ufać wartości tego rejestru, która wcześniej tam umieścił.