p+45_sqrt.cpp 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 1 / 1 //=========================================================================== //=========================================================================== // PROGRAMA : p+45_sqrt.cpp // FUNCION : Programa hibrido C++ y Ensamblador (ensamblado en linea) // : que calcula la raiz cuadrada de la suma de cuadrados de // : dos valores pidiendo valores y dando el resultado en // : lenguaje C y haciendo las operaciones en ensamblador. // REALIZADO POR : Prof. Juan Juárez Fuentes ( BASADO EN EL LIBRO DE DETMER ) // COMPILADOR EN EL QUE SE EJECUTO: ESTE PROGRAMA CORRIO BIEN EN TURBO C++ 4.5 y BORLAND C++ 3.1, // : EN DEVC NO CORRIO (hay que adaptarlo). // FECHA : 20100122181242 //=========================================================================== //=========================================================================== #include <iostream.h> #include <conio.h> //=========================================================================== //=========================================================================== int main() { float valor1; float valor2; float raiz; cout << " =======================================================================" << endl; cout << "\t\t\tPROGRAMA QUE CALCULA LA RAIZ CUADRADA"<< endl; cout << "\t\t DEL CUADRADO DE DOS VALORES DE PUNTO FLOTANTE" << endl; cout << " =======================================================================" << endl << endl; cout << "\t\t\t\tPrimer valor? "; cin >> valor1; cout << "\t\t\t\tSegundo valor? "; cin >> valor2; //-----------------------------------------------------------------------__asm{ // En TURBO C++ 4.5 corre asi "__asm{" o se puede bajar la llave. Pero con BORLAND C++ 3.1 sólo se ejecuta asi "__asm{", fld valor1 // valor1 en ST(0), que es el tope de la pila. fld st // valor1 en ST(0) y ST(1), porque el contenido de ST(0) es empujado en la pila. fmul // valor1 * valor1 en ST(0), saca de la pila a ST(0) y ST(1) los multiplica y el reultado lo pone en la pila que es ST(0). fld valor2 // valor2 en ST(0), que es el tope de la pila y (valor1 * valor1 en sT(1)). fld st // valor2 en ST(0) y ST(1), porque el contenido de ST(0) es empujado en la pila. fmul // valor2 * valor2 en ST(0), saca de la pila a ST0 y ST1 los multiplica y el reultado lo pone en la pila que es ST(0). fadd // suma de los cuadrados en ST(0), saca ST(0) y ST(1) de la pila, suma los valores y el resultado se pone en la pila o sea en ST(0). fsqrt // raiz cuadrada de la suma de los cuadrados en ST(0), porque se remplaza el contenido de ST(0) por su raiz cuadrada. fstp raiz // Poner el resultado, porque copia en memoria el contenido de ST(0) que es el tope de la pila y al mismo tiempo se saca de la pila. } //----------------------------------------------------------------------cout << "\n\t\t\t\tEl resultado es: " << raiz << endl ; getch (); return 0; } //=========================================================================== //=========================================================================== //=========================================================================== February 06, 2013 Crimson Editor