Найти целое значение аргумента, при котором значение выражения удовлетворяет условию - Assembler

Узнай цену своей работы

Формулировка задачи:

Добрый! Есть задача:Найти целое значение аргумента, при котором функция Y = (5,6^x) / (3 * x^2) превысит 200 Код я написала, вычисление работает, но не работает переход по условию. Мне все время выдается Х=1. Помогите разобраться, что я не так написала:
#include "stdafx.h"
#include <iostream>
using namespace std;
 
void main ()        
{
double A=5.6;       // описание операндов в памяти
long B=3, C=200, X=0;

__asm
{       
       finit       ; очистка регистров сопроцессора
       fld1        ; стек 1, регистр для вычисления степенной функц.
   m1: inc X       ; наращивание аргумента
       fld A       ; загрузка в ST(0) 5,6
       fmulp ST(1),ST ; вычисление степенной функции  5,6^x
       fidiv B
       fidiv X
       fidiv X
    
       fcom C         ; сравнение Y с 200         ?????????????? вот здесь начинаются проблемы!!!!!!
       fstsw AX       ; сохранение регистра состояния  SW (FPU) в регистре  AX (CPU) ???????????
       sahf           ;сохранение старшего байта АХ в рег. флагов  ???????????????
       jc   m1        ; переход, если сумма меньше 200   ?????????????????
}           
    
          cout<<"X="<<X<< endl; 
          system("pause");
}
Никто не поможет?

Решение задачи: «Найти целое значение аргумента, при котором значение выражения удовлетворяет условию»

textual
Листинг программы
.data
const200 dq 200.0
const3 dq 3.0
const5_6 dq 5.6
temp dq 1.0
x dd 1
.code
       ....
    fninit
;Y = (5,6^x) / (3 * x^2) превысит 200
    fld const200 ; st(0)=200
@@: fild x          ; st(0)=x  st(1)=200
    fmul st,st    ; st(0)=x*x  st(1)=200
    fmul const3 ; st(0)=3*x*x  st(1)=200 
    fld temp     ; st(0)=temp st(1)=3*x*x  st(2)=200
    fmul const5_6; st(0)=temp*5,6 st(1)=3*x*x  st(2)=200
    fst temp      ;temp=temp*5,6
    fdivrp st(1),st ; st(0)=(5,6^x)/(3*x*x)  st(1)=200
    fcomip st,st(1); st(0) > 200 ?
    ja exit
    inc x
    jmp @b
exit:  ....

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы