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?

Každá instrukční sada obsahuje víc než jednu volacích konvencí. Volací konvence je jinými slovy 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 nemají povinnost konvence dodržovat u svých vlastních podrutin ale mají povinnost konvenci dodržovat pokud chtějí využívat OS API.

⚠️ Běžný software je běžně vyrobený způsobem, který tyto konvence automaticky používá.

Nejběžnější volací konvence

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

⚠️ Přestože to pro moderní procesory není problém, běžné volací konvence umožňují žádný nebo jen jeden výstupní parametr. Toto má historické ale i logické důvody, ke kterým se vrátím v kapitolách o programování a tvorbě softwaru.

⚠️ 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í.