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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2010, 17:36   #1
yukas
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 10
По умолчанию Не могу вернуть float из процедуры на ассемблере в си

Программа компиируется, но вылетает в процессе
Код на Си:
Цитата:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include "mylib.h"

extern "C" float sum(int);

void main()
{
float s;
int n;
clrscr();
n=atoi_s_proverkoi("Vvedite kolicestvo: ",1,10);
s=sum(n);
printf("Summa= %f",s);
getch();
}
Код на Ассемлере:

Цитата:
.model small
.stack 256
.data
summa dd 0.0
three dd 3.0
kol dw ?
a dd ?
b dd ?
.code
PUBLIC _sum
_sum proc c near n:word
.386
finit
mov dx,n
inc dx
mov kol,dx
mov cx,1

L:
cmp cx,kol
jne L0
jmp L1

L0:
xor dx,dx
mov ax,cx
mov bx,2
div bx
cmp dx,0
jne Necetnoe

Cetnoe:

mov ax,cx
cwde
mov a,eax

fld three
fld a
fdiv st(0),st(1)
fst a

mov ax,cx
cwde
mov b,eax

fld b
fmul st(0),st(0)
fst b
fld b
fmul st(0),st(0)
fst b


Necetnoe:

mov ax,cx
cwde
mov a,eax

mov ax,cx
cwde
mov b,eax

fld b
fmul st(0),st(0)
fst b

Next:

fld b
fld a
fsub st(0),st(1)
fst a
fld a
fabs
fst a
fld a
fmul st(0),st(0)
fst a

fld a
fld summa
fadd st(0),st(1)
fst summa
inc cx
jmp L

L1:

mov eax,summa
mov edx,summa
mov cx,16
shr edx,cl

_sum endp

end

Причем, если в ассемблере убрать весь основной код, оставив лишь переменную сумма как равную нулю, все равно вылеает(по идее тогда хотя бы ноль должна вернуть, т.е. делаю вывод, что не в сегменте кода дело)
Помогите пожалуйста, очень нужно! И может, если получится, посмотрите нет ли ошибок в ассемблерском коде(я с фпу впервые работаю), там должна вчисляться сумма выражения (a-b)^2, i изменяется от 1 до n, а=(i,если i нечетное,i/3-иначе),b=(i^2,если i-нечетное,i^3-иначе)
yukas вне форума Ответить с цитированием
Старый 13.05.2010, 17:46   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вещественные числа нужно возвращать в элемент st(0) стека сопроцессора
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.05.2010, 18:13   #3
yukas
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 10
По умолчанию

Попробовал, ваш вариант возврата- проблема та же...-(
yukas вне форума Ответить с цитированием
Старый 13.05.2010, 19:12   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ошибка то какая?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.05.2010, 19:57   #5
yukas
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 10
По умолчанию

выкидывает из программы
yukas вне форума Ответить с цитированием
Старый 13.05.2010, 20:51   #6
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

у Вас ничего и не возвращается вы сохраняете результат в локальную переменную
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 13.05.2010, 21:13   #7
yukas
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 10
По умолчанию

я сохраняю в регистрах ах: dx- от туда будет браться значение, разве я не прав?
yukas вне форума Ответить с цитированием
Старый 13.05.2010, 21:14   #8
yukas
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 10
По умолчанию

а если и толкать в стек сумму, то ошибка всё та же...
yukas вне форума Ответить с цитированием
Старый 13.05.2010, 23:25   #9
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

опишите подробнее в чем работайте, как делаете сборку программы
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 14.05.2010, 04:08   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

yukas Не могу вернуть float из процедуры на ассемблере в си
yukas я сохраняю в регистрах ах: dx- от туда будет браться значение, разве я не прав?
Пепел Феникса вещественные числа нужно возвращать черз st(0)
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FLOAT TO TRING И STRING TO FLOAT!! MelKiY_bad C++ Builder 6 07.05.2010 14:31
Очень нужна помощь по Turbo Pascal...Не могу составить програму,по теме:"Процедуры и файлы"...( Zara Помощь студентам 2 02.12.2008 18:23
Что такое прототипы процедуры в ассемблере ? Technokiller Помощь студентам 2 06.06.2008 15:30