Překlad a sestavení programu v jazyku C a procedur v asembleru

(Borland BC, BCC, TASM, TLINK)

K.D. 2000

 


1. Úvod

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 .


2. Překlad a sestavení C a ASM v integrovaném prostředí BC

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 OptionsTransfer.)


3. Použití překladače BCC

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


4. Samostatný překlad jednotlivých modulů a sestavení pomocí TLINK

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.

4.1. Překlad modulů v asembleru

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

4.2. Překlad modulů v C

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.

4.3. Sestavení programu

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.