PŘÍMÉ PŘEDÁVÁNÍ PARAMETRŮ
Charakteristika
Přímé předávání parametrů volanému podprogramu je metodou, která zjednodušuje práci programátorovi. Tento způsob předávání parametrů využívá metodu
předávání dat na zásobníku, pouze jej uživatel "nevidí" a problém alokace ukládání/vydávání parametrů řeší systém interně.
Použití je vhodné pro relativně malý objem předávaných parametrů, pro větší objemy předávaných dat je vhodnější použít nepřímé
předávání parametrů.
|
Programátor při tvorbě podprogramu definuje název parametru a jeho typ. Při volání podprogramu potom přímo k jednotlivým parametrům doplní požadovanou proměnnou shodného typu. U takovýchto zápisů se rozlišuje, je-li parametr vstupní nebo výstupní, případně může být vstupně-výstupní. Názvy parametrů
je možno uživatelsky měnit.
Poznámka |
Při přímém předávání parametrů si systém vyhrazuje určitou oblast systémové paměti o potřebné velikosti odpovídající celkové velikosti všech parametrů podle jejich
deklarace v podprogramu. |
Příklad: Příprava a volání podprogramu s přiřazením parametrů pro dvě skupiny zpracování hodnot (A, B).
1) Deklarace proměnných pro skupinu A a B v nadřazeném programu:
|
|
|
|
|
|
|
|
|
|
(symbol) |
|
(typ) |
|
|
// deklarace parametrů pro skupinu A |
|
|
A_VALUE: |
|
Integer |
|
|
// celočíselná proměnná typu Integer |
|
|
A_DIFF: |
|
Integer |
|
|
// celočíselná proměnná typu Integer |
|
|
A_COEF: |
|
Real |
|
|
// proměnná čísla s desetinnou čárkou typu Real |
|
|
A_ENABLE: |
|
Bool |
|
|
// proměnná jednoho bitu typu Bool |
|
|
A_STATUS: |
|
Bool |
|
|
// proměnná jednoho bitu typu Bool |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// deklarace parametrů pro skupinu B |
|
|
B_VALUE: |
|
Integer |
|
|
// celočíselná proměnná typu Integer |
|
|
B_DIFF: |
|
Integer |
|
|
// celočíselná proměnná typu Integer |
|
|
B_COEF: |
|
Real |
|
|
// proměnná čísla s desetinnou čárkou typu Real |
|
|
B_ENABLE: |
|
Bool |
|
|
// proměnná jednoho bitu typu Bool |
|
|
B_STATUS: |
|
Bool |
|
|
// proměnná jednoho bitu typu Bool |
|
|
|
|
|
|
|
|
2) Volání podprogram pro hodnoty A a B z nadřazeného (pod)programu:
|
|
|
|
|
|
|
|
|
|
CALL |
|
TEST |
|
|
// volání podprogramu pro proměnné "A" |
|
|
VALU: |
|
A_VALUE |
|
|
// přiřazení proměnné vstupnímu parametru 1 |
|
|
COEF: |
|
A_COEF |
|
|
// přiřazení proměnné vstupnímu parametru 2 |
|
|
ENBL: |
|
A_ENABLE |
|
|
// přiřazení proměnné vstupnímu parametru 3 |
|
|
DIFF: |
|
A_DIFF |
|
|
// přiřazení proměnné výstupnímu parametru 1 |
|
|
STAT: |
|
A_STATUS |
|
|
// přiřazení proměnné výstupnímu parametru 2 |
|
|
... |
|
|
|
|
|
|
|
CALL |
|
TEST |
|
|
// volání podprogramu pro proměnné "B" |
|
|
VALU: |
|
B_VALUE |
|
|
// přiřazení proměnné vstupnímu parametru 1 |
|
|
COEF: |
|
B_COEF |
|
|
// přiřazení proměnné vstupnímu parametru 2 |
|
|
ENBL: |
|
B_ENABLE |
|
|
// přiřazení proměnné vstupnímu parametru 3 |
|
|
DIFF: |
|
B_DIFF |
|
|
// přiřazení proměnné výstupnímu parametru 1 |
|
|
STAT: |
|
B_STATUS |
|
|
// přiřazení proměnné výstupnímu parametru 2 |
|
|
|
|
|
|
|
|
3) Podprogram:
|
|
|
|
|
|
|
|
|
NAME: |
TEST |
|
|
|
|
// název podprogramu a deklarace parametrů |
|
Inp: VALU |
|
Integer |
|
|
// 1. vstupní parametr, typ Integer |
|
Inp: COEF |
|
Real |
|
|
// 2. vstupní parametr, typ Real |
|
Inp: ENBL |
|
Bool |
|
|
// 3. vstupní parametr, typ Bool |
|
Out: DIFF |
|
Integer |
|
|
// 1. výstupní parametr, typ Integer |
|
Out: STAT |
|
Bool |
|
|
// 2. výstupní parametr, typ Bool |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// vlastní podprogram |
|
|
L |
|
#VALU |
|
|
// načtení hodnoty z parametru VALU (Integer) |
|
|
ITD |
|
|
|
|
// pomocná konverze |
|
|
DTR |
|
|
|
|
// pomocná konverze |
|
|
L |
|
#COEF |
|
|
// načtení hodnoty z parametru COEF (Real) |
|
|
-R |
|
|
|
|
// rozdíl hodnot |
|
|
TRUNC |
|
|
|
|
// pomocná konverze (DInt/Int) |
|
|
T |
|
#DIFF |
|
|
// uložení výsledku do výstupního parametru DIFF (Int) |
|
|
L |
|
0 |
|
|
// porovnávací hodnota (konstanta) |
|
|
>=I |
|
|
|
|
// porovnání |
|
|
A |
|
#ENBL |
|
|
// načtení podmínky výstupu ENBL (Bool) |
|
|
= |
|
#STAT |
|
|
// uložení výsledku podm. porovnání do výstupního param. STAT (Bool) |
|
|
RET |
|
|
|
|
// konec podprogramu |
|
|
|
|
|
|
|
|
|