Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Centro Universitario de Ciencias Exactas e Ingenierías Ingeniería en computación Traductores de lenguajes 1 Sección D05 José Luis Serna Serna Código: 218292327 Actividad 11, 2020A, Implementar un programa mixto C & ensamblador 20/Abril/2020 Objetivo. Implementar un programa mixto C & ensamblador, agregar una función más. Código fuente. #include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> //FUNCION QUE YA VENIA EN EL PROGRAMA QUE NOS ENVIO int gcd( int $a, int $b ) { int $result; __asm__ __volatile__( "movl %1, %%eax;" "movl %2, %%ebx;" "CONTD: cmpl $0, %%ebx;" "je DONE;" "xorl %%edx, %%edx;" "idivl %%ebx;" "movl %%ebx, %%eax;" "movl %%edx, %%ebx;" "jmp CONTD;" "DONE: movl %%eax, %0;" : "=g" ( $result ) : "g" ( $a ), "g" ( $b ) ); return $result ; } //FUNCION AGREGADA AL PROGRAMA PARA LA ACTIVIDAD 11 DE TRADUCTORES DE LENGUAJES //FUNCION PARA SACAR EL VOLUMEN DE UN PARALELEPIPEDO int volumen( int $a, int $b, int $c) { int $result; __asm__ __volatile__( "movl %1, %%eax;" //MUEVO EL VALOR DE LA PRIMERA VARIABLE A AX "movl %2, %%ebx;" //MUEVO EL VALOR DE LA SEGUNDA VARIABLE A BX "imul %%ebx,%%eax;" //HACE LA MULTIPLICACION (AREA DE LA BASE)Y SE GUARDA EN AX "movl %3, %%ebx;" //MUEVO LA TERCERA VARIABLE A BX (VALOR DE LA ALTURA) "imul %%ebx,%%eax;" //HACE LA MULTIPLICACION Y OBTIENE EL VOLUMEN DEL PARALELPIPEDO(QUEDA EN AX) "movl %%eax, %0;" : "=g" ( $result ) : "g" ( $a ), "g" ( $b ), "g" ( $c ) ); return $result ;//REGRESA EL RESULTADO } int main(int argc, char** argv) { int a,b,c; //DECLARO MIS VARIABLES ENTERAS printf("resultado = %d\n", gcd(10,0)); //OBTENGO LOS VALORES printf("\nIngresa el lado A de la base:"); scanf("%d", &a); printf("\nIngresa el lado B de la base:"); scanf("%d", &b); printf("\nIngresa la altura:"); scanf("%d", &c); //LLAMO MI FUNCION E IMPRIMO EL RESULTADO printf( "\t\t\n El Volumen del Paralelepipedo es: %d Unidades Cubicas\n",volumen(a,b,c) ); return 0; } Capturas de pantalla de la ejecución. El programa se ejecuta y entra al menú, realiza la primera función que ya estaba en el programa y después pide al usuario los valores para que se ejecute la función que hice con C & ensamblador y calcular el volumen del paralelepípedo. Conclusiones. En esta actividad aprendí como se puede combinar el lenguaje ensamblador con el lenguaje C, aprendí como se utilizan las distintas sintaxis para el IDE que estemos utilizando, en mi caso utilicé CodeBlocks, es muy interesante combinar estos lenguajes, ya que el lenguaje C es más entendible y practico, pero a su vez trabaja a bajo nivel, esto facilita el uso del lenguaje ensamblador para trabajar “directamente” en registros. Es especifico aprendí que se escriben diferente las instrucciones a como las utilizamos en EMU8086, como por ejemplo mov se escribe movl, mul se escribe imul, add se escribe addl, etc., entre otros cambios específicos en la sintaxis, solo es cuestión de estudiarlos y tenerlos presentes. Referencias bibliográficas. [1] José Juan. Meza Espinosa. Ensamblador y C. [PDF] [2] José Juan. Meza Espinosa. C_ASM. [PDF]
Compartir