V předchozích kapitolách o podrutinách / funkcích jsem uvedl příklady, jak lze dělat podrutiny nebo funkce se vstupními/výstupními parametry jen s pomocí JUMP instrukce.

Je nutné ale zdůraznit, že šlo pouze o ukázkové příklady. V moderních procesorech lze stejného výsledku dosáhnout obrovským množstvím jiných způsobů.

Z tohoto důvodu existují calling conventions neboli volací konvence.

📜 Co je volací konvence?

Volací konvence je soubor pravidel které určují, jaké instrukce se mají používat a jakým způsobem pro:

  • tvorbu funkcí: včetně vstupních parametrů a výstupu funkce, pokud ji funkce definuje
  • volání funkcí: včetně předávání vstupních hodnot a vrácení výstupní hodnoty
    • vstup do funkce: jakým způsobem se při volání funkce přejde z jedné podrutiny do další
    • výstup z funkce: jakým způsobem se při dokončení konkrétní funkce kód vrátí do podrutiny, která funkci zavolala

⚠️ Konvence není závazná. Programy běžící přímo na procesorech si klidně mohou vymyslet své vlastní konvence. Programy běžící v rámci operačních systémů už nějaké konvence dodržovat musí, protože to od nich operační systémy vyžadují.

Nejběžnější volací konvence

  • x86: fastcall, stdcall, cdecl
  • ARM: Procedure Call Standard

⚠️ Běžný ajťák se volacími konvencemi nezabývá (měl by však vědět, že existují). Běžný ajťák (v mém pojetí) netvoří software na úrovni podrutin a volacích konvencí ale může se s nimi vzácně potkat.