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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2011, 08:44   #1
Ислам
Форумчанин
 
Регистрация: 22.02.2011
Сообщений: 106
По умолчанию Ассемблеровская всавка!

Цитата:
x4=(x2+x3)/2;
y4=(y2+y3)/2;
x5=(x1+x4*lam)/(lam+1);
y5=(y1+y4*lam)/(lam+1);
Как это будет на ассемблере выглядеть!?
Ислам вне форума Ответить с цитированием
Старый 14.04.2011, 09:00   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Ислам
зависит от размера переменных (byte, word, dword и т.д.) для байта
Код:
mov al,x2
add al,x3
sar al,1
mov x4,al;x4=(x2+x3)/2;
аналогично ;y4=(y2+y3)/2;
mov al,x4
imul lam
add al,x1
adc ah,0
mov bl,lam
inc bl
idiv bl
mov x5,al;x5=(x1+x4*lam)/(lam+1);
аналогично;y5=(y1+y4*lam)/(lam+1);
Mikl___ вне форума Ответить с цитированием
Старый 14.04.2011, 09:22   #3
Ислам
Форумчанин
 
Регистрация: 22.02.2011
Сообщений: 106
По умолчанию

Нам задали на АСМ'е написать...

Цитата:
****************fld x2
****************fiadd x3
****************fstp q
****************fdiv 2
****************fstp q // Нашли точку "x4"
Вот в таком варианте...! Для вещественных чисел ( с плавающей запятой )

Последний раз редактировалось Ислам; 14.04.2011 в 09:28.
Ислам вне форума Ответить с цитированием
Старый 14.04.2011, 09:43   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Ислам
и где в сообщении #1 говорится про вещественные числа?
конструкции fdiv 2 не может быть по определению -- FPU работает только с числами находящимися в переменных (x1, x2 и т.д.), либо в стеке FPU (st(0), st(1), ..., st(7))
Mikl___ вне форума Ответить с цитированием
Старый 14.04.2011, 09:48   #5
Ислам
Форумчанин
 
Регистрация: 22.02.2011
Сообщений: 106
По умолчанию

А как мне записать x/2 , например!?

Про вещ-ные извините, забыл упомянуть(
Ислам вне форума Ответить с цитированием
Старый 14.04.2011, 09:48   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Код:
finit
fld x2; st(0):=x2
fadd x3; st(0):=x2+x3
fdiv two; two=2.0 st(0):=st(0)/two
fstp x4;x4:=(x2+x3)/2
fld x4;st(0):=x4
fmul lam; st(0):=x4*lam
fadd x1; st(0):=x4*lam+x1
fld1 ;st(0):=1 st(1):=x4*lam+x1
fadd lam; st(0):=lam+1 st(1):=x4*lam+x1
fdivr st(1); st(0):=st(1)/st(0)
fstp x5;x5=(x1+x4*lam)/(lam+1)

Последний раз редактировалось Mikl___; 14.04.2011 в 09:55.
Mikl___ вне форума Ответить с цитированием
Старый 14.04.2011, 09:58   #7
Ислам
Форумчанин
 
Регистрация: 22.02.2011
Сообщений: 106
По умолчанию

Компилятор выдает ошибки
Цитата:
0ха0: этот символ не возможно использовать в идентификаторе и обнаружено opcode
Ислам вне форума Ответить с цитированием
Старый 14.04.2011, 10:01   #8
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Ислам
Ты реально веришь что я экстрасенс?
Какой компилятор? На какую строку ссылается? Там должно быть описание ошибки -- читай учебник или лезь в ГУГЛ
Mikl___ вне форума Ответить с цитированием
Старый 14.04.2011, 10:05   #9
Ислам
Форумчанин
 
Регистрация: 22.02.2011
Сообщений: 106
По умолчанию

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<locale.h>
int main()
{
setlocale(LC_ALL,"Russian");
float x1,y1,x2,y2,x3,y3;
float x4,y4,x5,y5;
int lam=2, p=2, o=1;
float v,s;
printf("Введите координаты точек треугольника [x1;y1] [x2;y2] [x3;y3]\n");
scanf("%f%f%f%f%f%f",&x1,&y1,&x2,&y 2,&x3,&y3);
x4=(x2+x3)/2;
y4=(y2+y3)/2;
x5=(x1+x4*lam)/(lam+1);
y5=(y1+y4*lam)/(lam+1);
printf("\n >>>На СИ<<<\n [%f;%f]",x5,y5);
_asm
{
finit
Цитата:
fld x2
fadd x3
fstp q

fld q
fdiv p
fstp z //x4=(x2+x3)/2

fld y2
fadd y3
fstp w

fld w
fdiv p
fstp c //y4=(y2+y3)/2

fld lam
fmul z
fiadd x1
fstp m //(x1+x4*lam)

fld lam
fadd o
fst n // lam+1

fld m
fdiv n
fstp v //x5=(x1+x4*lam)/(lam+1)

fld lam
fmul y4
fstp a

fld a
fadd y1
fstp b //y1+y4*lam

fld b
fdiv n
fstp s //y5=(y1+y4*lam)/(lam+1)
}
printf(">>>На ассемблере [%f;%f]",v,s);
getch();
return 0;
}

Вот то, что написал я! Ругается на выделенное...
Компилятор Visual Studio 2010...
Ислам вне форума Ответить с цитированием
Старый 14.04.2011, 10:11   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Ислам
скорее всего он ругается на fld lam так как int lam=2, p=2, o=1 то должно быть fild lam и p опиши как float p=2.0
и fiadd x1 замени на fadd x1
команды fidiv и fdiv fild и fld fiadd и fadd разные, fidiv, fild, fiadd предназначены для работы с целыми, а fdiv, fld, fadd с вещественными

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблеровская вставка в СИ Ислам Помощь студентам 2 24.02.2011 10:02
Вставка ассемблеровская в си! Ислам Помощь студентам 2 22.02.2011 16:31
Всавка NULL - проблема Yuran БД в Delphi 3 22.09.2010 18:20
Всавка записей в БД Классного журнала artemavd БД в Delphi 6 20.08.2009 15:33
Всавка из TImage в Excel или Word nevo Компоненты Delphi 6 09.10.2008 12:01