C programazio-lengoaia (XIII). C konpiladorea eta beste lengoaiak
1992/03/01 Alegria Loinaz, Iñaki | Maritxalar, Montse Iturria: Elhuyar aldizkaria
Hamaikagarren kapituluan estekatzaileak (linker-ak) aparte konpilatutako modulu desberdinak programa exekutagarri bakar batean lotu ditzakeela ikusi genuen. Beraz lengoaia desberdinetako moduluak aparte konpilatu ondoren, liburutegian biltegiraturik ala ez, objektu-moduluak direnez estekatzailearen bidez bil daitezke.
Dena den, PCko mihiztadura-lengoaiaz idatzitako errutinak C programa batetik deitzeko zenbait puntu hartu behar da kontutan eta hori izango da kapitulu honetako lehen pasartea. Bestetik, PC bezalako 16 biteko ordenadoreetan C programak exekutatzeko konpilatzean aukera desberdinak egin behar dira, bigarren atalean ikusiko dugun legez. Azkenik, hirugarren pasartean, sistema eragilearen jatorrizko funtzioak, sistema-deiak deitutakoak, nola erreferentzia daitezkeen aztertuko dugu.
C eta mihiztadura-lengoaia
PCetan exekutatzen diren programak memoriako 6 eredu desberdinetan antola daitezke konpiladorearen arabera. Hurrengo pasartean aztertuko ditugun eredu hauen arabera, erakusleak ondoko hiru mota honetakoak izan daitezke: near, far eta huge.
near motako erakusleak 16 bitekoak diren bitartean, gainerakoak 32 bitekoak dira; lehen kasuan helbidea segmentu berean dagoela suposatzen bait da. far eta huge motako erakusleak antzekoak dira (biak 32 bitetan gordetzen bait dira) eta haien artean dagoen desberdintasun bakarra desplazamenduan adieraz daitekeen neurrian datza.
near, far eta huge hitz gakoak dira. PCetako C konpiladoreetarako eta erakusle, array zein funtzioen definizioetan erabil daitezke. C programa batek mihiztadura-lengoaiaz idatzitako errutina bat erabiltzeko, ez du ezer berezirik egin behar; funtzio bezala erazagutu eta erreferentziatzea besterik ez bait du behar. Dena den, funtzioaren erazagupenean near, far edota huge erabil daiteke memoriako ereduaren arabera.
Aldiz Ctik deitutako errutina bat mihiztadura-lengoaiaz idazten badugu, ondoko arauak hartu behar dira kontutan:
- parametroak pilan kokatuko dira, jeneralean alderantzizko ordenean, hau da, azken parametrotik hasiko da pila betetzen. Parametroek hartuko duten luzera 2. kapituluan aztertutako datuen ezaugarrien araberakoa izango da.
- errutinan, dagozkion ekintzak baino lehen, honako beste hauek burutu egin behar ditu: 1) erabiliko diren erregistroen edukina (BP beti, eta SI, DI, SS, DS edota CS beharrezkoa bada) pilan gordetzea. 2) BP erregistroan SPren balioa gordeko da; horrela BPren bidez parametroak eskuratuko bait dira. Lehen parametroa (BP + 4) helbidean egongo da funtzioa near bada eta (BP + 6)-an gainerako kasuetan.
- aldagai lokalak erabiltzeko SP erregistroaren balioa txikiagotuz joango da.
- errutinari dagozkion ekintzak burutu ondoren, itzul-emaitza AX erregistroan kokatu behar da eta ondoren gordetako erregistroen balioa berreskuratu.
1. programan bi zenbaki biderkatzen dituen mihiztadura-lengoaiaz idatzitako bider izeneko errutina azaltzen da, segmentuei dagozkien sasiaginduak azaldu gabe. Aipatzekoa da mihiztadurazko errutinen izenari azpimarra karakterea aurretik jartzen zaiola.
![](images/A57027.jpg)
C konpiladorea 16 biteko ordenadoreetan
Esan dugunez PCetako programetan memoriako 6 eredu desberdinen artean aukera egin daiteke konpilatzeko garaian. PCetako memoria-sistema segmentatua da eta bertan lau segmentu bereizten dira (aginduetakoa, datuetakoa, pilakoa eta estra), bakoitzari erregistro bat dagokiolarik; CS, DS, SS eta ES hain zuzen. Erregistro hauen balioa (eta ondorioz, programaren luzera) aukeratzeko ereduak daude.
Small ereduaz bi segmentu baino ez dira erabiltzen; aginduetarakoa eta datuetarakoa. Beraz, programek gehienez 128 K edukiko dute. Programa txikietarako erabiltzen da. Medium ereduaz datuetarako segmentu bat eta aginduetarako segmentu anitz adierazten da. Beraz, datuek 64 K baino gehiago hartzen ez duten bitartean, aginduek Mega bateraino irits daitezke.
Datu gutxi maneiatzen duten programa luzeetarako da. Compact ereduaz, aurrekoaren kontrakoa egiten da: aginduek 64 K baino gutxiago hartu eta datuek Mega bateraino. Datu asko maneiatzen duten programetarako egokia da. Large ereduaz, agindu zein datuak Mega bateraino irits daitezke, bietan segmentu anitz egokitzen delako. Beraz, programa handietarako egokia da. Huge eredua, Large ereduaren antzekoa da, baina datu estatikoak segmentu bakarrean kokatzen dira.
Eredua handiagotu ahala, programa luzeagoa eta motelagoa gertatzen da, erregistro eta pilaren arteko trukeak direla eta.
Seigarren eredua Tiny izenekoa da eta Turbo C konpiladoreak baino ez du eskaintzen. Eredu honen arabera programa osoa segmentu bakarra da eta 64 K baino gehiago ezin du hartu.
Eredua konpilatzeko komandoan zehazten da, eta Microsoft-eko C konpiladorea honela erabiltzen da:
![](images/A57027-a.jpg)
Sistema-deiak C-tik
Sistema-deiak sistema eragilearen jatorrizko eragiketak dira. Beraz, sistema eragilearen arabera sistema-dei desberdinen aurrean egongo gara.
Hemen azalduko ditugun sistema-deiak bi sistema eragile garrantzitsuenenak dira: MS-DOS eta UNIX-enak.
MS-DOS
dos.h fitxategian sistema-deiak erabiltzen dituzten liburutegiko funtzioak erazagutzen dira. Honako hauek dira esanguratsuenak:
![](images/A57027-b.jpg)
bdos eta intdos funtzioetan parametroaren arabera dei desberdinak egin daitezke.
UNIX
UNIXen sistema-dei asko daude, sistema eragilearen zerbitzuak zuzenean erabiltzeko asmoz. Izenburu-fitxategi desberdinetan dago sistema-deiei dagozkien funtzioen erazagupena; definizioa liburutegian konpilaturik bait dago.
Honako hauek dira dei garrantzitsuenak:
prozesuen gaineko deiak
![](images/A57027-c.jpg)
fitxategi eta gailuen gaineko deiak
open, read, write, close eta lseek aurreko kapituluan bezala
![](images/A57027-d.jpg)
prozesu arteko komunikazioa
![](images/A57027-e.jpg)
Sistema-dei hauen erabilpena nahiko konplexua eta bertsioaren araberakoa da. Horrexegatik ez dugu hemen gehiago sakonduko.
Hurrengo bi kapituluetan, azken bietan hain zuzen, aurrekoetan zehar aztertutako sententziak eta funtzioak erabili egingo ditugu, adibide konplexuak programatuz.
![](https://elia.eus/static/elhuyar/img/elia_RGB.png)
Gai honi buruzko eduki gehiago
Elhuyarrek garatutako teknologia