Linguaxe de programación C (XIII). Compilador C e outras linguaxes

No capítulo undécimo vimos que o ligando (linkers) pode unir nun único programa executable diferentes módulos compilados aparte. Por tanto, una vez compilados por separado os módulos das diferentes linguaxes, almacenados ou non na biblioteca, ao tratarse de módulos de obxectos, pódense agrupar por ligante.

No entanto, paira chamar as rutinas escritas en linguaxe de ensamblaje en PC desde un programa C hai que ter en conta una serie de puntos, que é o primeiro paso deste capítulo. Doutra banda, ao compilar os programas C en computadores de 16 bits como PC, hai que facer diferentes opcións, como veremos no segundo apartado. Por último, no terceiro parágrafo analizaremos como se poden referir as funcións orixinais do sistema operativo, chamadas chamadas de sistema.

C e linguaxe de ensamblaje

Os programas que se executan nos PCs pódense organizar en 6 modelos diferentes da memoria en función do compilador. Segundo os modelos que analizaremos no seguinte parágrafo, os expositores poden ser de tres tipos: near, far e huge.

Mentres que os demostradores tipo near son de 16 bits, o resto son de 32 bits, xa que no primeiro caso suponse que a dirección está no mesmo segmento. Os demostradores tipo far e huge son similares (xa que ambos se almacenan en 32 bits) e a única diferenza entre eles radica na medida en que se pode expresar no desprazamento.

son palabras crave near, far e huge. Pódense utilizar paira compiladores C en PC e na definición de demostradores, arrays e funcións. Paira utilizar una rutina escrita por un programa C con linguaxe de ensamblaje, non fai falta facer nada especial, só ten que ser erixida e referenciada como función. No entanto, no desenvolvemento da función pode utilizarse near, far ou huge segundo o modelo da memoria.

Se escribimos una rutina chamada de Ct con linguaxe de ensamblaje, hai que ter en conta as seguintes regras:

  • os parámetros colocaranse na pila, xeralmente en orde inversa, é dicir, a pila comezará a encherse desde o último parámetro. A lonxitude dos parámetros dependerá das características dos datos analizados no capítulo 2.
  • na rutina, antes das accións correspondentes, deberá: 1) almacenar nunha pila o contido dos rexistros que se van a utilizar (sempre BP e si é necesario SI, DEI, SS, DS ou CS). 2) No rexistro BP gardarase o valor de SP, obtendo os parámetros a través de BP. O primeiro parámetro estará en (BP + 4) se a función é near e (BP + 6) no resto dos casos.
  • irase reducindo o valor do rexistro SP paira o uso de variables locais.
  • Una vez realizadas as accións correspondentes á rutina, o resultado da devolución inscribirase no rexistro AX e recuperarase o valor dos rexistros almacenados a continuación.

No programa 1 móstrase una rutina denominada por escrito cunha linguaxe de ensamblaje que multiplica dous números, sen que aparezan os pseudo-ordes correspondentes aos segmentos. Cabe destacar que ao nome das rutinas de ensamblaje colócaselle o carácter por diante.

Programa 1. Multiplicar a rutina pola linguaxe de ensamblaje.

Compilador C en computadores de 16 bits

Como xa se indicou, nos programas dos PCs pódese elixir entre 6 modelos diferentes de memoria á hora de compilar. Trátase dun sistema de memoria segmentado en PCs, no que se distinguen catro segmentos (de comandos, de datos, de pila e extra) aos que corresponde un rexistro: CS, DS, SS e É. Existen modelos paira seleccionar o valor destes rexistros e por tanto a lonxitude do programa.

Co modelo Small só se utilizan dous segmentos, o de comandos e o de datos. Por tanto, os programas terán un máximo de 128K. Utilízase paira programas pequenos. O modelo Medium representa un segmento de datos e varios segmentos paira as ordes. Por tanto, mentres os datos non superen os 64K, as ordes poden chegar a un Mega.

É paira programas longos que manexan pouco datos. Co modelo Compact oponse ao anterior: ordes inferiores a 64K e datos até un Mega. Adecuado paira programas que manexan gran cantidade de datos. Co modelo Large, tanto as ordes como os datos poden chegar a un Mega, porque en ambos os segmentos adáptanse múltiples. Por tanto, é adecuado paira grandes programas. O modelo Huge é similar ao modelo Large, pero os datos estáticos sitúanse nun mesmo segmento.

A medida que aumenta o modelo, o programa é máis longo e lento debido aos intercambios entre rexistros e pilas.

O sexto modelo, denominado Tiny, só o ofrece o compilador Turbo C. Segundo este modelo o programa completo é un segmento único que non pode superar os 64K.

Especifícase no comando compilar modelo e o compilador C de Microsoft utilízase como:

Chamadas de sistema desde C

As chamadas de sistema son operacións orixinais do sistema operativo. Por tanto, dependendo do sistema operativo estaremos ante diferentes chamadas de sistema.

As chamadas de sistema que se indican a continuación son os dous sistemas operativos máis importantes: de MS-DOUS e UNIX.

MS-DOUS

No ficheiro dous.h inclúense as funcións da biblioteca que utilizan chamadas de sistema. Os máis significativos son:

Nas funcións bdos e intdos pódense realizar distintas chamadas segundo o parámetro.

UNIX

En UNIX existen numerosas chamadas de sistema co fin de utilizar directamente os servizos do sistema operativo. Nos diferentes ficheiros de título atópase a descrición das funcións relativas ás chamadas de sistemas, xa que a definición está compilada na biblioteca.

As chamadas máis importantes son:

chamadas sobre procesos

chamadas sobre arquivos e dispositivos

open, read, write, close e lseek como no capítulo anterior

comunicación interproceso

O uso destas chamadas de sistemas é bastante complexo e depende da versión. Por iso non imos profundar máis aquí.

Nos dous capítulos seguintes, concretamente nos dous últimos, utilizaremos as sentenzas e funcións analizadas ao longo dos anteriores, programando exemplos complexos.

Babesleak
Eusko Jaurlaritzako Industria, Merkataritza eta Turismo Saila