Logo Studenta

Actividad_11_SernaSerna - Jose SernaS

¡Estudia con miles de materiales!

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]

Otros materiales