Aplicaciones Con Lenguaje Programacion Hibrida

Aplicaciones Con Lenguaje Programacion Hibrida

!! Programación híbrida

Pascal y ensamblador Como ya se mencionó, la programación en lenguaje ensamblador proporciona un mayor control sobre el hardware de la computadora, pero también dificulta la buena estructuración de los programas.

La programación híbrida proporciona un mecanismo por medio del cual podemos aprovechar las ventajas del lenguaje ensamblador y los lenguajes de alto nivel, todo esto con el fin de escribir programas más rápidos y eficientes.

En esta sección se mostrará la forma para crear programas híbridos utilizando el lenguaje ensamblador y Turbo Pascal. Turbo Pascal permite escribir procedimientos y funciones en código ensamblador e incluirlas como parte de los programas en lenguaje Pascal; para esto, Turbo Pascal cuenta con dos palabras reservadas: Assembler y Asm.

Assembler permite indicarle a Turbo Pascal que la rutina o procedimiento que se está escribiendo está totalmente escrita en código ensamblador. Ejemplo de un procedimiento híbrido: Procedure Limpia_Pantalla;

Assembler;

Asm

Mov AX,0600h

Mov BH,18h

Mov CX,0000h

Mov DX,184Fh

Int 10h

End;

El procedimiento del listado 23 utiliza la función 06h de la Int 10h del BIOS para limpiar la pantalla, este procedimiento es análogo al procedimiento Clr Scr de la unidad CRT de Turbo Pascal.

Por otro lado, Asm nos permite incluir bloques de instrucciones en lenguaje ensamblador en cualquier parte del programa sin necesidad de escribir procedimientos completos en ensamblador.

Ejemplo de un programa con un bloque de instrucciones en ensamblador:

{ Este programa muestra como se construye un programa híbrido utilizando un bloque Asm… End; en Turbo Pascal. El programa solicita que se introduzcan dos número, después calcula la suma por medio de la instrucción Add de ensamblador y finalmente imprime el resultado en la pantalla.}

Program hibrido;

Uses Crt;

Var

N1,N2,Res : integer;

Begin

Writeln(“Introduce un número: “);

Readln(N1);

Writeln(“Introduce un número: “);

Readln(N2);

Asm

Mov AX,N1;

Add AX,N2;

Mov Res,AX

End;

Writeln(“El resultado de la suma es: “,Res);

Readln;

End.

El programa del listado 24 realiza la suma de dos cantidades enteras (N1 y N2) introducidas previamente por el usuario, después almacena el resultado en la variable Res y finalmente presenta el resultado en la pantalla. El lenguaje ensamblador no cuenta con funciones de entrada y salida formateada, por lo cual es muy complicado escribir programas que sean interactivos, es decir, programas que soliciten información o datos al usuario. Es aquí donde podemos explotar la facilidad de la programación híbrida, en el programa anterior se utilizan las funciones Readln y Writeln para obtener y presentar información al usuario y dejamos los cálculos para las rutinas en ensamblador. En el siguiente listado nos muestra la forma de escribir programas completos utilizando procedimientos híbridos. {Este programa solicita al usuario que presione alguna tecla, cuando la tecla es presionada, ésta se utiliza para rellenar la pantalla. El programa termina cuando se presiona la tecla enter. El programa utiliza tres procedimientos: Limpia_Pantalla: Este se encarga de borrar la pantalla Cursor_XY: Este procedimiento reemplaza al Goto XY de Pascal Imprime_Car: Este procedimiento imprime en pantalla el carácter que se le pasa como parámetro. }

Program Hibrido2;

Uses Crt;

Var

Car: Char;

i,j : integer;

{Este procedimiento limpia la pantalla y pone blanco sobre azul}

Procedure Limpia_Pantalla;

Assembler;

Asm

Mov AX,0600h

Mov Bh,17h

Mov CX,0000h

Mov DX,184Fh

Int 10h

End;

{Este procedimiento imprime el carácter en la pantalla} Procedure Imprime_Car(C: Char);

Assembler;

Asm

Mov Ah,02h

Mov Dl,C

Int 21h

End;

{Este procedimiento tiene la misma función que el procedimiento Goto XY de Turbo Pascal}

Procedure Cursor_XY(X,Y: Byte);

Assembler;

Asm

Mov Ah,02h

Mov Bh,00h

Mov Dh,Y

Mov Dl,X

Int 10h

End;

Begin

Limpia_Pantalla;

Repeat

Limpia_Pantalla;

Cursor_XY(0,0);

Write(‘Introduce un carácter: ‘);

Car:=Read Key;

Imprime_Car(Car);

Limpia_Pantalla;

If car <> #13 then

Begin

For i:=0 to 24 do

For j:=0 to 79 do

Begin

Cursor_XY(j,i);

Imprime_Car(Car);

End;

Cursor_XY(30,24);

Write(‘Presiona enter para salir u otro para seguir…’);

Readln;

Until car = #13;

End.


Mis sitios nuevos:
Emprendedores
Politica de Privacidad