Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
57 / 18 / 1
Регистрация: 14.05.2012
Сообщений: 134
1

Встраиваем *.asm в код на Си

15.12.2013, 12:04. Показов 662. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Есть такая беда. Нужно написать подпрограмму, которая считает sin( разложением в ряд Тейлора ). Подпрограмма эта должна находиться в отдельном файле. С этим все ок, все компилируется и линкуется.
sin.asm
Assembler
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
.686
.MODEL FLAT,C
.STACK
 
.data
    fact DWORD  1
    sign WORD   1
    res  QWORD  ?
    x    QWORD  ?
    i    DWORD  1
    
    
.code
sin PROC x0:QWORD,n:DWORD
    finit           ;инициализируем переменные
 
    fldz
    fadd x0
    fst res
    fstp x
    
    mov ecx,n
    dec ecx
 
    top:
        fld x       ;x=x0*x0
        fmul x0
        fmul x0
        fstp x      ;стек пуст
 
        fild i      ;в стек i
        fimul i      ;i*i
 
        push eax
        mov eax,4
        push eax
        fimul dword ptr [esp]      ;i*i*4
        pop eax
 
        fild i
        mov eax,2
        push eax
        fimul dword ptr [esp]      ;i*2
        pop eax
        pop eax
        faddp st(1),st(0)   ;i*i*4+i*2
        fimul fact
        fstp fact   ;стек пуст
       
        fild sign
        fchs   
        fmul x      ;x*sign
        fdiv fact   ;x*x/fact
        fadd res    ;res=res+x*x/fact
        fstp res    ;стек пуст
 
        inc i       ;i=i+1
        
        loop top
        
        fld res
        ret
sin ENDP
 
END
Я так понял что команда ret вытолкнет в стек st(0) ?
В отладчике OllyDbg значения полученные значения для синуса вроде похожи)))
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# include <stdio.h>
# include <conio.h>
 
extern "C"
{
    double sin( double, int );
}
 
int main()
{
    double s = sin( 0.5, 5 );
    printf( "%f", s );
    _getch();
    return 0;
}
Собственно проблема.
При запуске программы возникает ошибка "main.exe вызвал срабатывание точки останова."
Скажите, с чем это может быть связанно, и как это исправить? Всем спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2013, 12:04
Ответы с готовыми решениями:

встраиваем произвольные данные во flash
Доброго времени суток ! прочитал в топиках статью: http://we.iosyitistromyss.ru/CADSoft/ko ......

Встраиваем интерфейс в сторонее приложение
Добрый вечер. Попрошу можете дать полную документацию по встраиванию интерфейса в стороннее...

Переписать C++ код на ASM
Здравствуйте. Есть код бегущей строки на С++. Помогите, пожалуйста, переписать на ассемблер, если...

Вытащить asm код
Как вытащить asm code (BIN) из mz exe в частности из этого .

2
193 / 188 / 18
Регистрация: 06.10.2013
Сообщений: 357
15.12.2013, 12:40 2
Smetanka, попробуйте передавать в ассемблерную функцию не сам double s, а указатель на него. И функцию в соответствии с этим измените, конечно. Команда ret возвращает исполнение кода на следующую после call инструкцию.
1
57 / 18 / 1
Регистрация: 14.05.2012
Сообщений: 134
15.12.2013, 14:08  [ТС] 3
Not at all!, спасибо) проблема как всегда была между монитором и креслом). Я еще линковал *.asm файлы, которые были так скажем испорчены)
0
15.12.2013, 14:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2013, 14:08
Помогаю со студенческими работами здесь

Заменять ли C++ код на asm вставку?
Функция ищет подстроку в строке bool Find(string on, string text) { for (int i = 0, finded =...

Перевод asm кода в машинный код
Задача: записать в память процесса определенный asm код... Нашел информацию о том как записать...

Преобразовать процедуру на псевдокоде в код на ASM
обратиться за помощью к ассемблеру для преобразования следующую процедуру в псевдокоде или С....

Прочитать буфер клавиатуры asm вставкой в код с++
Всем доброго времени суток! По заданию, мне необходимо написать небольшую программу, которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru