Sistemas computacionales

Páginas: 11 (2559 palabras) Publicado: 14 de diciembre de 2009
Programación hibrida

1

EL ENSAMBLADOR Y EL LENGUAJE C
El lenguaje C es sin duda el más apropiado para la programación de sistemas, pudiendo sustituir al ensamblador en muchos casos. Sin embargo, hay ocasiones en que es necesario acceder a un nivel más bajo por razones de operatividad e incluso de necesidad (programas residentes que economicen memoria, algoritmos rápidos para operacionescríticas, etc.). Es entonces cuando resulta evidente la necesidad de poder emplear el ensamblador y el C a la vez. Para comprender este capítulo, basta tener unos conocimientos razonables de C estándar. Aquí se explicarán las funciones de librería necesarias para acceder al más bajo nivel, así como la manera de integrar el ensamblador y el C. USO DEL TURBO C y BORLAND C A BAJO NIVEL. A continuaciónveremos algunas funciones, macros y estructuras de la librería DOS.H del Turbo C. ACCESO A LOS PUERTOS DE E/S. int inp (int puerto); /* leer del puerto E/S una palabra (16 bits) */ int inport (int puerto); /* leer del puerto E/S una palabra (16 bits) */ unsigned char inportb (int puerto); /* leer del puerto E/S un byte (8 bits) */ int outp (int puerto, int valor); /* enviar al puerto E/S unapalabra (16 bits) */ void outport (int puerto, int valor); /* enviar al puerto E/S una palabra (16 bits) */ void outportb (int puerto, unsigned char valor); /* enviar al puerto E/S un byte (8 bits) */ Aunque pueden parecer demasiadas, algunas son idénticas (caso de inp() e inport()) y otras se diferencian sólo ligeramente en el tipo de los datos devueltos, lo cual es irrelevante si se tiene en cuentaque el dato devuelto es descartado (caso de outp() y outport()). En general, lo normal es emplear inport() e inportb() para la entrada, así como outport() y outportb() para la salida. Por ejemplo, para enviar el EOI al final de una interrupción hardware se puede ejecutar: outportb(0x20, 0x20);

ACCESO A LA MEMORIA. int peek (unsigned seg, unsigned off); char peekb (unsigned seg, unsigned off);void poke (unsigned seg, unsigned off, int valor); void pokeb (unsigned seg, unsigned off, char valor); unsigned FP_OFF (void far *puntero); unsigned FP_SEG (void far *puntero); void far *MK_FP (unsigned seg, unsigned off); /* leer la palabra (16 bits) en seg:off */ /* leer el byte (8 bits) en seg:off */ /* poner palabra valor (16 bits) en seg:off */ /* poner byte valor (8 bits) en seg:off */ /*obtener offset de variable tipo far */ /* obtener segmento de variable tipo far */ /* convertir seg:off en puntero tipo far */

Las funciones peek(), peekb(), poke() y pokeb() tienen una utilidad evidente de cara a consultar y modificar las posiciones de memoria. Cuando se necesita saber el segmento y/o el offset de una variable del programa, las macros FP_OFF y FP_SEG devuelven dicha información.Por último, con MK_FP es posible asignar una dirección de memoria absoluta a un puntero far. Por ejemplo, si se declara una variable: char far *pantalla_color; se puede hacer que apunte a la memoria de vídeo del modo texto de los adaptadores de color con: pantalla_color = MK_FP (0xB800, 0);

Programación hibrida

2

y después se podría limpiar la pantalla con un bucle:

for (i=0; i 64 Kb)MEDIUM: Este modelo es ideal para programas largos que no manejan demasiados datos. Se utilizan punteros largos para el código (que puede extenderse hasta 1 Mb) y cortos para los datos: la pila y los datos juntos no pueden exceder de 64 Kb.

COMPACT: Al contrario que el anterior, este modelo es el apropiado para los programas pequeños que emplean muchos datos. Por ello, el programa no puedeexceder de 64 Kb aunque los datos que controla pueden alcanzar el Mb, ya que los punteros de datos son de tipo far por defecto. LARGE: Empleado en las aplicaciones grandes y también por los programadores de sistemas que no tienen paciencia para andar forzando continuamente el tipo de los punteros (para rebasar el límite de 64 Kb). Tanto los datos como el código pueden alcanzar el Mb, aunque no...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • sistemas computacionales
  • SISTEMAS COMPUTACIONALES
  • Sistemas Computacionales
  • Sistemas Computacionales
  • Sistema computacional
  • sistemas computacionales
  • sistema computacional
  • Sistema computacional

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS