0 / 0 / 0
Регистрация: 24.10.2010
Сообщений: 16
1

Сопроцессор: вычисление гиперболического тангенса

05.11.2010, 19:43. Показов 3201. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите пожалуйста разобраться с передачей результатов из ассемблера в сишник.
в ассемблере вычисляю гиперболический тангенс.данные source передаются из c++ а вернуть надо в result. в с++ функция asmth(&source,&result).
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
;.model small
;e2x-1/e2x+1
 
                .386
_TEXT           segment use32 para public 'CODE'
                public  _asmth
                public  __CItanh
source equ qword ptr [ebp+8]
result equ qword ptr [ebp+12]
 
_asmth          proc    near
                assume  cs:_TEXT
                push    ebp
                mov     ebp,esp
                fld     qword ptr [ebp+8]       ; загрузка в стек
                fld     st                      ; дублируем
                fadd                            ; 2*x
                fldl2e                          ; log по основан 2 от (e)
                fmulp   st(1),st                ; x * log base 2(e)
                fst     st(1)                   ; copy
                frndint                         ; округлен до целого
                fsub    st(1),st                ; вычитание
                fxch                            ; обмен st, st(1)
                f2xm1                           ; вычисление 2 в степени (x - 1)
                fld1                            ; загрузка единицы
                fadd                            ; сложение;2 to the x
                fscale                          ; Scale by power of 2
                fstp    st(1)                   ; Set new stack top and pop
                fld1                            ; загрузка единицы
                fadd                            ; вычисление exp(2*x)+1
                fld1                            ; загрузка единицы
                fld1                            ; загрузка единицы
                fadd                            ; Set divisor to 2
                fdivr                           ; Compute 2/(exp(2*x)+1)
                fld1                            ; загрузка единицы
                fsubr                           ; вычислен th
        ;fstp qword ptr [ebp+12];result
                pop     ebp                     ; Restore register bp
                ret
_asmth          endp
 
__CItanh        proc    near
                assume  cs:_TEXT
                sub     esp,8                   ; Allocate stack space for x
                fstp    qword ptr [esp]         ; Copy x onto stack
                call    _asmth                  ; Call tanh
                add     esp,8                   ; Remove x from stack
                ret
__CItanh        endp
 
_TEXT           ends                            ;End of segment
                end                             ;End of module
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <math.h>
#include <conio.h>
 
extern "C"
{
    void asmth(float *source,float *result);
}
int main()
{
    float source=0;
    float result=0;
    printf("Vvedite x:");
    scanf("%f", &source);
    printf("C++ Tanh=%f\n",tanh(source));
    asmth(&source,&result);
    printf("AsmTh = %f\n", result);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2010, 19:43
Ответы с готовыми решениями:

Реализовать вычисление гиперболического тангенса с помощью fpu
Здравствуйте мне необходимо реализовать вычисление гиперболического тангенса с помощью fpu. Нашел в...

Сопроцессор. Вычисление показательной функции.
Здравствуйте, у меня вопрос. Как с использованием функций сопроцессора (среда MASM, семейство x86))...

Функция гиперболического тангенса tanh(x)
Всем добрый день! Если взять два числа A и B и сложить их, то процессор проделает одну операцию...

Вычисление гиперболического синуса
Здравствуйте, помогите решить 1 и 2 задачу с помощью процедур.

8
0 / 0 / 0
Регистрация: 24.10.2010
Сообщений: 16
08.11.2010, 00:46  [ТС] 2
собственно разобрался..если надо кому скину без ошибок код..
0
0 / 0 / 0
Регистрация: 20.02.2017
Сообщений: 5
14.03.2017, 19:14 3
Цитата Сообщение от vantusb Посмотреть сообщение
если надо кому скину без ошибок код..
Очень надо)
Хотя спустя 7 лет ответа я, наверное, не дождусь(
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
14.03.2017, 21:13 4
Цитата Сообщение от X_A_A Посмотреть сообщение
Хотя спустя 7 лет ответа я, наверное, не дождусь(
Создай тему, выложи свои наработки, идеи, помогут. Или в плюсах гугли.
0
Модератор
Эксперт по электронике
8340 / 4234 / 1605
Регистрация: 01.02.2015
Сообщений: 13,185
Записей в блоге: 5
14.03.2017, 21:18 5
мановар,
Но ведь понятно, что у него ничего нет. А из плюсов переносят сюда.

Основной политикой форума является "можешь помочь - помогай", поэтому чуть позже удалю ваше и моё сообщения.
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
14.03.2017, 21:54 6
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
можешь помочь - помогай
А чем помочь то ??? Я просто не понимаю. Я готов помочь, но эти задания меня ставят не то что в тупик, а в прямой ступор. ТС сам не знает что хочет, а я тем более.
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
А из плюсов переносят сюда.
Не знаю что у Вас кто и чего переносит
Перенос элементов из одного массива в другой (ассемблерная вставка)
Помогайте разъяснять, я в этом не мастер.
0
Модератор
Эксперт по электронике
8340 / 4234 / 1605
Регистрация: 01.02.2015
Сообщений: 13,185
Записей в блоге: 5
14.03.2017, 22:18 7
Думаю, что у обоих пользователей одинаковая задача - многофайловая компиляция. Один из файлов - исходник на ассемблере.
Можно предположить, что приведённый код верен, но есть ошибки в оформлении кода .model small и в соглашении о вызовах - результат должен возвращаться в стеке сопроцессора.

Вопросы про асм вставки в С/С++ часто публикуют именно в разделе ассемблера. Поэтому я несколько преувеличил про перенос тем.

Добавлено через 2 минуты
Чем помочь - в данном случае опубликовать изменённый исходник.

Добавлено через 9 минут
Прошу прощения. У меня закончился длинный день. Уже не очень отчётливо воспринимаю мир.
0
0 / 0 / 0
Регистрация: 20.02.2017
Сообщений: 5
14.03.2017, 23:01 8
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Но ведь понятно, что у него ничего нет.
Скажу честно, Вы правы. Дело в том, что ассемблер мне не нужен, ковыряться в нем я пыталась и писать код самостоятельно - 2 недели убитого времени впустую. Помочь мне некому, ибо преподавание никакое - на отвали, а инфы не особо много внятной даже в инете, желание самостоятельно разбираться отпало напрочь.

У меня попалось задание один в один с данным, а именно:
"Разработать подпрограмму соответствующую стандарту связей языка Си с двумя аргументами (source,result), которая вычисляет (с использованием сопроцессора) гиперболический тангенс"
Поэтому какой смысл создавать новую тему. Просто надеялась на чудо, ведь тому кто разобрался, кинуть код или указать на ошибки одна минута.
0
0 / 0 / 0
Регистрация: 24.10.2010
Сообщений: 16
15.03.2017, 10:53  [ТС] 9
блин кто вспомнил эту тему.7 лет прошло.я уже с этим сто лет не связывался.если не забуду дома в архивах поищу остатки былых времен.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2017, 10:53
Помогаю со студенческими работами здесь

Вычисление гиперболического синуса
Помогите пожалуйста, абсолютно не могу понять..

Вычисление тангенса
HELP! Не могу разобраться с процедурами. Написал процедуру для вычисления тангенса. при вызове...

Вычисление гиперболического косинуса через ряды
Здравствуйте! Помогите написать код для вычисления гиперболического косинуса через ряды с указанной...

Обчисление суммы гиперболического синуса и гиперболического косинуса ((shA+сhB) в квадрате)
Помогите написать программу в С++ для обчисления сумы гиперболического синуса и гиперболического...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru