0% encontró este documento útil (0 votos)
1K vistas6 páginas

Programación Hibrida

La programación híbrida combina lenguajes de alto nivel y ensamblador para aprovechar las ventajas de ambos, permitiendo el uso de instrucciones de ensamblador en lenguajes como Pascal, C++ y Rust para mejorar el rendimiento cuando se requiere un control más bajo nivel.

Cargado por

Adrian Dojer
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
1K vistas6 páginas

Programación Hibrida

La programación híbrida combina lenguajes de alto nivel y ensamblador para aprovechar las ventajas de ambos, permitiendo el uso de instrucciones de ensamblador en lenguajes como Pascal, C++ y Rust para mejorar el rendimiento cuando se requiere un control más bajo nivel.

Cargado por

Adrian Dojer
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 6

Programación hibrida

¿Qué es?
La programación hibrida es utilizada en los casos en donde el código en ensamblador
dificulta la estructuración del programa. 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 escribir programas más
rápidos y eficientes. 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.
Al trabajar con un lenguaje de alto nivel, en ocasiones nos encontramos con el problema
de que necesitamos que haga determinada función o trabajo, pero desafortunadamente
ésta solo existe en otro lenguaje que no es el que necesitamos utilizar, o simplemente, no
encontramos esa función en ningún lenguaje de alto nivel.

Ventajas de la Programación Híbrida


• Para mejorar la escalabilidad
• Cuando muchas tareas producen desbalanceo
• Aplicaciones que combinan paralelismo de grano grueso y fino
• Reducción del tiempo de desarrollo de código
• Cuando el número de procesos MPI (interfaz de paso de mensajes) es fijo
• En caso de mezcla de paralelismo funcional y de datos
En este momento el lenguaje ensamblador constituye una herramienta no solo eficaz, sino
simple para producir un parche para el compilador de nuestro lenguaje preferido. Tal vez
el mayor problema con el que nos enfrentemos sea el de cómo conectar ambos
programas (el de alto y el de bajo niveles) y cómo pasar variables de un programa al otro.
Para conseguir nuestro objetivo se utilizan pseudo-operadores, es decir, instrucciones que
aparecen en el código fuente del ensamblador pero que no generan ninguna instrucción
de máquina, pero proporcionan directivas para que el ensamblador pueda operar con
datos, ramificaciones condicionales, generación de listados y con macros durante el
proceso de ensamble.
Usos en lenguajes de alto nivel (ejemplos)
Turbo pascal
Turbo Pascal es un sistema de desarrollo de software que incluye un compilador y un
entorno de desarrollo integrado (IDE) para el lenguaje de programación Pascal,
desarrollado por Borland y liderado por Philippe Kahn.
Fue lanzado en 1983 para MS-DOS, CP/M, CP/M-86 y, posteriormente, para Microsoft
Windows, fue durante mucho tiempo la versión más extendida del lenguaje Pascal.
Turbo Pascal permite escribir procedimientos y funciones en código ensamblador e
incluirlas como parte de los programas en lenguaje Pascal.
Turbo Pascal cuenta con dos palabras reservadas: Assembler y Asm.
Assembler: Permite indicarle a Turbo Asm: Permite incluir bloques de
Pascal que la rutina o procedimiento que instrucciones en lenguaje ensamblador
se está escribiendo está totalmente en cualquier parte del programa sin
escrita en código ensamblador. necesidad de escribir procedimientos
completos en ensamblador.
Proc_limpia_pantalla
Assembler; Programa hibrido;
Asm Uses
Mov AX,0600h Crt;
Mov BH,18h Var
Mov CX,0000h
N1,N2,Res : integer;
Mov DX,184Fh
Begin
Int 10h
End; 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.
C++
Lenguaje de programación diseñado en 1979 por Bjarne Stroustrup. La intención de su
creación fue extender al lenguaje de programación C y añadir mecanismos que permiten
la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes
orientados a objetos, C++ es un lenguaje híbrido.
Si necesita tener acceso a las variables del ensamblador en el programa C, el nombre de la
variable en el ensamblador debe ser un carácter de subrayado (_) como primer carácter y
usar global para convertirlo en una variable global.
Si necesita llamar al proceso en el ensamblador en el programa C, el nombre del proceso
debe ser el primer carácter y, compilar el proceso correctamente en función del modo
utilizado para la compilación del programa C, el modelo basado en pila o el modelo de
argumento de registro, de modo que los parámetros de llamada se puedan obtener
correctamente.
Inserte ASM ("***") directamente en el programa C e incruste las instrucciones Assembly.
Tenga en cuenta que este uso debe usarse con precaución. Online Assembly proporciona
la capacidad de leer y escribir hardware directamente, por ejemplo, el control de
interrupción de lectura/escritura permite registros, pero el compilador no comprueba ni
analiza el lenguaje ensamblador en línea. insertar el lenguaje ensamblador en línea puede
causar errores graves al cambiar el entorno de ensamblado o cambiar el valor de la
variable C.
Por otro lado, aunque escribimos una gran cantidad de palabras "en línea", pero mire el
código de salida, ¡encontrará que cualquier función miembro en línea que contenga
ensamblaje incrustado no estará en línea!
Las funciones comunes pueden estar en línea. El siguiente es un ejemplo de una
combinación perfecta de C ++ / ASM:
Inline long gettimer (){
Long long time;
_ ASM rdtsc
_ ASM mov dword ptr time, eax
_ ASM mov dword ptr time + 4, EDX
Return time;
}

El comando rdtsc se utiliza para obtener el número de ciclos de reloj desde el inicio de la
CPU. El resultado es de 64 bits. La optimización de la compilación puede ser rápida y
fuerte, pero debe usarse con precaución.
Rust
Lenguaje de programación compilado, de propósito general y multiparadigma que está
siendo desarrollado por Fundación Rust. Es un lenguaje de programación
multiparadigmático que soporta programación funcional pura, por procedimientos,
imperativa y orientada a objetos.
Para manipulaciones de muy bajo nivel y por razones de desempeño, uno podría desear
controlar la CPU de manera directa. Para esto Rust soporta el uso de ensamblador en linea
a través de la macro asm!. La sintaxis es parecida a la de GCC & Clang:
Ejemplos escritos en ensamblador x86/x86-64
asm!(plantilla ensamblador
: operandos de salida
: operandos de entrada
: clobbers
: opciones
); g

Cualquier uso de asm está protegido por puertas de feature (requiere #![feature(asm)] en
el crate) y por supuesto requiere de un bloque unsafe.
Los operandos de salida, operandos de entrada, clobbers y opciones son todos opcionales
pero debes agregar el numero correcto de : en caso de que desees saltarlos.
Los operandos de entrada y salida siguen el mismo formato, Las expresiones de
operandos de salida deben ser valores lvalue mutables, o valores aun no asignados, si se
desea usar operandos reales seria obligatorio colocar llaves { }, Algunas instrucciones
modifican registros los cuales de otra forma hubieran mantenido valores diferentes es
por ello que usamos las lista de clobbers para indicar al compilador a que no asuma que
ningún valor cargado en dichos registros se mantendrá valido.
# #![feature(asm)]
# #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
# fn main() {
let resultado: i32;
unsafe {
asm!("mov eax, 2" : "={eax}"(resultado) : : : "intel")
}
println!("eax es actualmente {}", resultado);
# }
Conclusiones

Resulto intrigante el no encontrar ejemplos relacionados a lenguajes de alto nivel como


Phyton o Java, puesto que en cualquier lado aparecían los ejemplos relacionados al
lenguaje Pascal y al C, mismos que agregando que el Rust es demasiado nuevo en cuanto a
saber de la existencia de él, pues es algo de lo cual no tenia ni idea respecto al tema de la
programación hibrida dado en lenguajes de alto nivel utilizando instrucciones del
ensamblador genero cierta intriga al respecto sobre si es posible llegar a programar de
manera hibrida más de 2 lenguajes, en resumen entendí a mi parecer que es programar
en algún lenguaje de alto nivel desde el cual se “mandan llamar” instrucciones del asm.
Bibliografía
La Programación Hibrida. (2013, 30 mayo). Trabajos - mando006.
https://www.clubensayos.com/Tecnolog%C3%ADa/La-Programaci%C3%B3n-
Hibrida/813411.html
Programación Hibrida. (s. f.).
https://actiweb.one/interfacesperifericos/programacion_hibrida.html
colaboradores de Wikipedia. (2022, 19 agosto). Turbo Pascal. Wikipedia, la enciclopedia
libre. https://es.wikipedia.org/wiki/Turbo_Pascal
Convert C/C ++ and Assembly hybrid programming. (s. f.).
https://topic.alibabacloud.com/a/convert-cc--and-assembly-hybrid-
programming_1_31_31971066.html
colaboradores de Wikipedia. (2022b, noviembre 6). Rust (lenguaje de programación).
Wikipedia, la enciclopedia libre.
https://es.wikipedia.org/wiki/Rust_(lenguaje_de_programaci%C3%B3n)
Narvaez, J. (s. f.). Ensamblador en Linea | El Lenguaje de Programacion Rust.
https://goyox86.gitbooks.io/el-libro-de-rust/content/inline-assembly.html

También podría gustarte