Komentář k programu P2
Program P2 demonstruje na velmi jednoduchém příkladu možnost sestavení částí programu napsaných v jazyku C a v assembleru. V programu P2_prog.c je volána funkce soucet, která je typu int a vrací součet dvou argumentů kterými jsou čísla int.
Část napsaná v jazyku C
Pomocí #pragma small je pro program P2_prog nastaven model small. Program obsahuje pouze prototyp funkce soucet. Po překladu je v tabulce externalů uvedena funkce _soucet, tedy s malými písmeny a podtržením před jménem (viz soubor P2.map v části “Publics by Name”).
Program přeložíme příkazem
bcc –Ij:\zcu.cz\novell\pub\bc31\include –v –c P2_prog.c .
Předpokladem je nastavení cesty k bcc v PATH. V tomto příkladu je uvedena cesta pro případ použití instalace BC v OrioNT (listopad 2002). Volba –I nastavuje cestu k souborům include, volba –v nám zajistí možnost ladění programu pomocí TD s propojením na zdrojový kód.
Poslední volba –c je důležitá: bcc provede pouze překlad, nikoliv sestavení programu. Výsledným produktem je tedy soubor P2_prog.obj .
Poznámka: Spustíme-li bcc s volbou –S, vygeneruje nám překladač soubor P2_prog.asm který obsahuje program přeložený z C do assembleru. V něm lze najít seznam public a externalů a výše uvedené si tak ověřit.
Část napsaná v assembleru
Funkce soucet je v souboru P2_proc.asm. Stejně jako u hlavního programu, i zde je nastaven model small a dále ještě jazykové konvence pro spolupráci s C ( .model small,c ). Použití tohoto nastavení má pro nás několik důsledků:
Program můžeme přeložit příkazem
tasm /z/zi/l/mx P2_proc .
Překladem vytvoříme soubor P2_proc.obj a P2_proc.lst.
Sestavení obou modulů
Kromě modulů P2_prog.obj a P2_proc.obj musíme sestavit i startup modul c0s.obj a runtime knihovny cs.lib, emu.lib a maths.lib. Linker můžeme spustit příkazem
tlink /Lj:\zcu.cz\novell\pub\bc31\lib /c /s /m /v c0s P2_prog P2_proc,P2,P2,cs emu maths .
Zde c0s, P2_prog a P2_proc jsou jména sestavovaných modulů, dále P2 je jméno výstupního souboru .exe, další P2 je jméno mapového souboru .map . cs, emu a maths jsou názvy knihoven. Cesta k nim je určena pomocí parametru /L. Z ostatních voleb je významná volba /c, která umožní rozlišovat malá/velká písmena ve jménech. Volba /v zajistí možnost symbolického ladění programu. “Vedlejší produkt” činnosti linkeru je soubor P2.map s mapou segmentů atd., který je vygenerován na základě voleb /m a /s. Protože jsme v obou programech použili model small, je kód obou modulů v jediném segmentu _TEXT. Data a stack obou modulů jsou ve skupině segmentů s názvem DGROUP.
Viz též Stručný návod k programování v asembleru pro I8086 a Překlad a sestavení programu v jazyku C a procedur v asembleru.
Poslední úprava stránky: 13.11.2002