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