Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2010, 23:30   #1
Влодимир
 
Регистрация: 23.03.2010
Сообщений: 3
Хорошо Вставка ассемблера в Си

Люди помогите, не шарю вообще в Ассемблере.
Нужно вставить в программу на си ассемблерную вставку (только формулы на ассемблере)

В море плавают 2 яхты с высотой мачты h=15 м. (цифра условная). На каком максимальном расстоянии эти яхты могут заметить друг друга при идеальных условиях?
Экваториальный радиус = 6378,16 км


#include "stdafx.h"
#include "iostream"
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <math.h>

int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"Rus");
float R, h, с, l, ras;
R=6378,16;
h=15;
printf("радиус земли(км) =", R);
printf(“высота мачты(м) =”,h);

c=h+R; // это убрать и
l=sqrt((R+h)*(R+h)-R*R); // вставить
ras=l*2.0; // ассемблерный код


printf("Яхты заметят друг друга на расстоянии =", ras);
getch();
return 0;
}
помогите плиз!!!!!!!
Влодимир вне форума Ответить с цитированием
Старый 20.05.2010, 05:45   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Влодимир
В нулевом приближении Землю можно считать шаром со средним радиусом 6371,3 км, он есть в любом справочнике, поэтому вопрос о радиусе Земли отпадает. Твою формулу по расчету растояния ras=2.0*sqrt((R+h)*(R+h)-R*R) можно упростить
ras=2.0*sqrt((2R+h)*h)=2.0*sqrt((12 742,6+h)*h), принемая во внимание малость мачты относительно радиуса Земли (высота мачты по-любому меньше 1 километра) h*h можно не учитывать получаем ras=2.0*sqrt(12742,6*h)=sqrt(4*1274 2,6*h)=sqrt(50970,4*h)
теперь тело ассемблерной вставки
Код:
	finit; инициализирую FPU
	fld h;загружаю высоту мачты в км, например 0.015
	fmul R;умножаю h на 50970.4 (радиус земли умноженный на 8)
	fsqrt;sqrt(R*h)
	fist res;выгружаю целое число - округленный к ближайшему целому результат в км

Последний раз редактировалось Mikl___; 20.05.2010 в 07:07.
Mikl___ вне форума Ответить с цитированием
Старый 20.05.2010, 16:07   #3
Влодимир
 
Регистрация: 23.03.2010
Сообщений: 3
По умолчанию

Тоесть так


#include "stdafx.h"
#include "iostream"
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <math.h>

int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"Rus");
float R, h, ras;
R=6378,16;
h=0,015;
printf("радиус земли(км) =", R);
printf(“высота мачты(м) =”,h);

_asm
{
finit
fld h
fmul R
fsqrt
fist ras

}
printf("Яхты заметят друг друга на расстоянии =", ras);
getch();
return 0;
}
Влодимир вне форума Ответить с цитированием
Старый 21.05.2010, 03:44   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Влодимир
Внимательнее читай сообщение.
1) R должно быть 50970.4 (радиус земли 6371,3 умноженный на 8)
printf("радиус земли(км) =", R/8);
2) Если ras определено как вещественное число
float R, h, ras;
тогда нужна команда fst ras
иначе ras должно быть определено как целое число
float R, h; int ras;
тогда fist ras

Последний раз редактировалось Mikl___; 21.05.2010 в 10:29.
Mikl___ вне форума Ответить с цитированием
Старый 21.05.2010, 21:41   #5
Влодимир
 
Регистрация: 23.03.2010
Сообщений: 3
По умолчанию

спасибо большое!! разобрался
Влодимир вне форума Ответить с цитированием
Старый 17.02.2011, 18:24   #6
Stas1919
Новичок
Джуниор
 
Регистрация: 17.02.2011
Сообщений: 1
По умолчанию

У тебя получилась это программа?
у меня практически такая же, можешь написать конечный код который у тебя получился, пожалуста))
Stas1919 вне форума Ответить с цитированием
Старый 18.02.2011, 05:05   #7
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Stas1919
Думаешь, что через полгода Влодимир появится, чтобы ответить на твой вопрос?

Последний раз редактировалось Mikl___; 18.02.2011 в 09:36.
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ИСПОЛЬЗОВАНИЕ АССЕМБЛЕРА В ДЕЛФИ! IIIeneJI Помощь студентам 2 09.02.2010 17:12
Вызвать функцию ассемблера из С++ Dima88 Помощь студентам 3 11.12.2009 00:54
вставки из ассемблера макс07 Общие вопросы C/C++ 7 13.05.2008 19:19
Сравнение Си и Ассемблера... Sota Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 25.07.2007 16:15