Překlad a sestavení programu v jazyku C a procedur v asembleru
(Borland BC, BCC, TASM, TLINK)
K.D. 2000
Pro vložení částí programu napsaných v asembleru do programu v jazyku C lze použít dvě základní metody:
Při sestavování programu v C a v asembleru je nutné dodržovat několik základních pravidel:
int abcd;
se bude vnitřně jmenovat _abcd . Podobně procedura
void secti(int x1)
bude mít jméno _secti.
Při psaní programů v asembleru bychom to měli respektovat, pokud vytváříme procedury volané z C nebo pokud chceme používat společné proměnné public/extrn. Překladač TASM ale do věci zasahuje následujícím způsobem:
Je-li kromě paměťového modelu v direktivě .model určen i jazyk C, tj. například
.model small,c ,
jsou pro jména použitá v public a extrn vygenerovány i jejich verze s podtržením na začátku.
Podobné problémy by mohly nastat při sestavování. Je vhodné použít pro TLINK volbu /c.
.model small,c .
Paměťový model pro program v C můžeme určit pomocí
#pragma small .
Nejjednodušší cesta jak spojit program v C s procedurou v asembleru je použití integrovaného prostředí BC. Postup je následující:
Vytvoříme projekt, ve kterém budou zahrnuty všechny potřebné moduly napsané v C i v asembleru. BC použije pro každý modul příslušný překladač a zajistí správné sestavení objektových souborů. Použitý způsob překladu pro daný zdrojový soubor lze ověřit tak, že nastavíme kurzor na jméno daného souboru v okně Project a použijeme příkaz Options na nástrojové liště. (Obecně je způsob překladu dán nastavením v menu Options – Transfer.)
Překladač (řídicí program) BCC umožňuje překlad a sestavení programových modulů napsaných v C nebo asembleru. Příkazová řádka pro jeho spuštění má tvar (zjednodušeně):
bcc options file [file file ... ] .
Options jsou volby (viz dále) a file jsou jména souboru (souborů) .asm nebo .c .
Některé důležitější z velkého množství možných voleb:
-Lpath | cesta ke knihovním souborům (nutné pro sestavení programu) |
-Ipath | cesta k souborům include (nutné pro překlad) |
-c | překlad souborů bez sestavení |
-S | překlad souboru .c do asembleru (generuje .asm) |
-v | vložení ladicích informací do výstupního souboru |
-mx | nastavení paměťového modelu na x (x = t, s, c, m, l, h pro model tiny, small, compact, middle, large, huge) |
-M | linker vytvoří mapový soubor (.map) |
Poznámka: Při zadávání voleb je nutné dodržet malá/velká písmena.
V OrioNT by měla být cesta k souborům include: j:\zcu.cz\novell\pub\bc31\include
a ke knihovním souborům: j:\zcu.cz\novell\pub\bc31\lib .
Překlad a sestavení programu prog.c s procedurou proc.asm může tedy být proveden příkazem:
bcc -Lj:\zcu.cz\novell\pub\bc31\lib -Ij:\zcu.cz\novell\pub\bc31\include -v prog.c proc.asm
Při tomto způsobu práce nejprve postupně přeložíme jednotlivé zdrojové soubory. Získané objektové soubory potom sestavíme spolu s dalšími potřebnými moduly a knihovnami pomocí programu TLINK.
Pro překlad pomocí TASM je nutné použít volbu /mx, která zajistí dodržení malých/velkých písmen u identifikátorů (nutné pro sestavení s moduly v C). Pro překlad modulu proc.asm může mít příkazová řádka tvar:
tasm /z/zi/l/mx proc.asm
Jednotlivé moduly napsané v C lze přeložit pomocí BCC s volbou -c :
bcc -Ij:\zcu.cz\novell\pub\bc31\include -c -v prog.c
Volba -I je nutná pro specifikaci adresáře, ve kterém má BCC hledat soubory include.
Při sestavování musíme k objektovým souborům, které jsme vytvořili překladem ze zdrojové formy přidat inicializační modul a potřebné knihovny. Jedná se o následující soubory:
t,s,m,c,l,h pro modely tiny, small, middle, compact, large, huge. Soubor pro model small má tedy název c0s.obj.
Inicializační modul musí výt v seznamu objektových souborů uveden jako první před námi vytvořenými soubory .obj.
Dále je nutné použít volbu /L pro definování cesty ke knihovnám (nejsou-li v pracovním adresáři) a /c pro povolení rozlišování malých a velkých písmen v identifikátorech extrn a public. Soubor c0x.obj musí být uložen v pracovním adresáři nebo k němu musí být uvedena cesta – volba /L se vztahuje pouze na knihovny .lib .
Obecná (zjednodušená) příkazová řádka pro linker:
tlink options,objfiles,exefile,mapfile,libfiles
kde options jsou volby pro sestavení, objfiles a libfiles jsou názvy souborů .obj resp. .lib oddělené mezerou, exefile je název výsledného souboru .exe a mapfile je název souboru s mapou segmentů .map .
Pro sestavení hlavního programu prog.obj a procedury proc.obj (model small) bude mít příkaz tvar:
tlink /Lj:\zcu.cz\novell\pub\bc31\lib /c c0s prog proc,prog,prog,cs emu maths
Pořadí knihoven se musí dodržet. Výsledný soubor bude prog.exe .
Viz též stručný návod k programování v assembleru I8086 a komentář k programu P2, který výše uvedené částečně doplňuje.