Exsec(exsecans) - assembler

Odpowiedz Nowy wątek
2017-01-09 11:33
yol
0

Witajcie,

Czy mógłby ktoś mi pomóc w nastepującej sprawie:
Poniżej mam projekt w języku assembler x86, który oblicza sec(x), gdzie x jest argumentem podanym przez użytkownika, podobnie jak dokładność obliczenia.

Czy jest możliwość przerobienia tego projektu na poniższy? Wiem, że to jest po prostu inna funkcja. Niemniej nie wiem jak się do tego zabrać?
Czy mógłby ktoś mi pomóc?

Napisz program, który oblicza exsec(x), (exsecans), gdzie x jest argumentem podanym przez użytkownika, podobnie jak dokładność obliczenia.

Oraz kod:


#include <stdio.h>

float secans(float x)
{ 
    _asm
  {
      fld dword ptr[x]  //wrzucenie na stos (load) wartosci float x - ST(0)
      push 180      // wrzucenie wartosci calkowitej 180 na stos
      fidiv dword ptr[esp]  //dzielenie ze znakiem float ST(0) przez 180
      fldpi  //wrzucenie na stos liczby pi ST(0)  x->ST(1)
      fmul   //mnozenie float tworzy wart w radianach
      add esp, 4  //wyrzuca ze stosu 180
      fcos    //ST(0)=cos(x)
      push 1  //wrzuca integer 1 na stos
      fidivr dword ptr[esp]   //dzielenie odwrotne - integer/ST(0)
      add esp, 4  //wyrzucenie 1
      fstp dword ptr[x] //wyrzucenie wartosci cos(x) ze stosu do x
  }
  return x;
 }

int main(){
  float x;
  int exp;
  float wynik;
  printf("Program obliczy secans podanej wartosci w stopniach: ");
  scanf("%f", &x);
  printf("Z podana dokladnoscia (0-18): ");
  scanf("%d", &exp);
  wynik = secans(x);
  switch (exp)
  {
    case 0:
      printf("Wynik: %.0f", wynik );
      break;
    case 1:
      printf("Wynik: %.1f", wynik );
      break;
    case 2:
      printf("Wynik: %.2f", wynik );
      break;
    case 3:
      printf("Wynik: %.3f", wynik );
      break;
    case 4:
      printf("Wynik: %.4f", wynik );
      break;
    case 5:
      printf("Wynik: %.5f", wynik );
      break;
    case 6:
      printf("Wynik: %.6f", wynik );
      break;
    case 7:
      printf("Wynik: %.7f", wynik );
      break;
    case 8:
      printf("Wynik: %.8f", wynik );
      break;
    case 9:
      printf("Wynik: %.9f", wynik );
      break;
    case 10:
      printf("Wynik: %.10f", wynik );
      break;
    case 11:
      printf("Wynik: %.11f", wynik );
      break;
    case 12:
      printf("Wynik: %.12f", wynik );
      break;
    case 13:
      printf("Wynik: %.13f", wynik );
      break;
    case 14:
      printf("Wynik: %.14f", wynik );
      break;
    case 15:
      printf("Wynik: %.15f", wynik );
      break;
    case 16:
      printf("Wynik: %.16f", wynik );
      break;
    case 17:
      printf("Wynik: %.17f", wynik );
      break;
    case 18:
      printf("Wynik: %.18f", wynik );
      break;
    default:
      printf("Wynik: %.4f", wynik );
      break;
  }
  getch();
    return 0;
}
edytowany 2x, ostatnio: yol, 2017-01-09 11:36

Pozostało 580 znaków

2017-01-09 11:43
0

Serio? :( exsec(fi) to po prostu sec(fi) - 1 więc najzwyczajniej w świecie odejmij sobie 1 od wyniku.


Non nascuntur sed fiunt christiani :)
Nie masz kłopotów? Kup komputer...

[Na pw przyjmuje tylko zlecenia. Masz problem? Pisz na forum, nie do mnie]

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych 0, gości 1, botów: 0