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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2019, 17:24   #1
ImmortalisNox
Пользователь
 
Регистрация: 05.11.2017
Сообщений: 18
По умолчанию С-АSM, изменить ассемблерную часть для работы с массивом типа double

Здравствуйте, программа должна высчитывать кусочную функцию, что она и делает, но массив должен быть типа double и я не знаю как нужно изменить ассемблерный листинг, чтобы она считала корректно

Код:
.386
.model flat, c
.data
  const_1  dd  1.0
  const_3  dd  3.0
  const_4  dd  4.0
  const_24  dd  24.0
  const_28  dd  28.0
.code
calc PROC
  push ebp
  mov ebp, esp
  finit
  fld dword ptr[ebp+12]
  fcomp dword ptr[ebp+8]
  fstsw ax
  sahf
  jae else1 ; c<=d

 
  fld dword ptr[ebp+16]
  fsub dword ptr[ebp+8]
  fld const_1
  fpatan
  fmul dword ptr[ebp+12]
  fadd const_28
  fld dword ptr[ebp+8]
  fmul const_4
  fdiv dword ptr[ebp+16]
  fadd const_1
  fdiv 
  jmp exit
 
  else1:
    fld dword ptr[ebp+8]
  fmul dword ptr[ebp+12]
  fsub const_24
  fadd dword ptr[ebp+16]
  fld dword ptr[ebp+12]
  fldlg2
  fld const_3
  fmul dword ptr[ebp+8]
  fyl2x
  
  fsub 
  fdiv

  exit: pop ebp
  ret
calc ENDP
END

#include <stdio.h>
#include<math.h>

extern "C" float calc(float, float, float);

int main()
{
  float c = 0, d = 0;
  float a[8] = { 5.3,7.0,-1.8,3.0,43.12,2.0,5.8,12.0 };
  float X = 0;
  int const_1 = 1;
  int const_3 = 3;
  int const_4 = 4;
  int const_24 = 24;
  int const_28 = 28;
  printf("Enter numbers:\n");
  printf("C = ");
  scanf_s("%f", &c);
  printf("D = ");
  scanf_s("%f", &d);
  for (int i = 0; i < 8; i++)
  {
    X = calc(c, d, a[i]);
    printf("Result for i = %d : X = %f\n", i, X);
  }
  printf("\n");
  float   x = 0;
  for (int i = 0; i < 8; i++) //проверка результата
  {
    if (c > d)
      x = ((atan(a[i] - c)*d + const_28) / (const_4*c / a[i] + const_1));
    else
      x = (c*d - const_24 + a[i]) / (d - log10(const_3*c));
    printf("Verfying result for i = %d : X = %f\n", i, x);
  }
  return 0;
}
ImmortalisNox вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Погрешность типа double OmegaBerkut C# (си шарп) 3 11.11.2015 20:12
TMaskEdit типа Double kashirin.p Общие вопросы Delphi 0 17.04.2012 17:23
Проблема с выводом типа double ArmanPrestige Общие вопросы C/C++ 3 20.02.2012 03:58
Отбросить дробную часть от числа типа double не выходит! Си apraxie Помощь студентам 3 17.12.2011 00:18
in Формула типа String out результат типа Double Gypsy Общие вопросы Delphi 3 16.04.2010 10:21