Mikroprocesory - Skripta
Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.
Existuje několik způsobů předávání parametrů při volání funkce. Tyto způsoby nazýváme
volacími konvencemi. V případě klasické volací konvence jazyka C jsou parametry do
zásobníku ukládány v pořadí zprava doleva, tedy zezadu. Volající funkce se musí po návratu
postarat o odstranění parametrů ze zásobníku.
Při volání funkce (nebo procedury) je v zásobníku vytvořen pro příslušnou funkci
(proceduru) tzv. stack frame, v němž se nachází parametry předávané funkci, návratová adresa
a lokální proměnné dané funkce. K paměťovým pozicím uvnitř stack frame se často přistupuje
za pomoci vyčleněného registru CPU, který je pak nazýván frame pointer.
Volací konvence jazyka Pascal je opakem volací konvence jazyka C. Parametry jsou do
zásobníku ukládány zleva doprava a volaná funkce zodpovídá za vyčištění zásobníku.
Předpokládejme C funkci deklarovanou jako:
unsigned f1(unsigned c1, unsigned c2);
Pro jednoduchost dále uvažujme, že proměnné cislo1, cislo2 a vysl budou
uloženy v paměti a že velikost datového typu unsigned je 16 bitů. Dále budeme
předpokládat, že pro přístup k lokálním proměnným použijeme indexové adresování pomocí
registru X. Registr X bude tedy sloužit jako frame pointer. Funkce f1 bude vracet výsledek
v registru D.
Funkci použijeme v následujícím příkazu:
vysl = f1(cislo1, unsigned cislo2);
Pak pro volání funkce f1 bude třeba použít následující kód (zápis je v jazyku
symbolických adres pro procesory Motorola řady M68HC11):
LDY
cislo2 ; Uložení parametru c2 do zásobníku