Как вычислить дробь с корнем в числителе? - Assembler

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

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

% TITLE <<5_1-FPU>>
; y=(2*c-d+sqrt23*a)/(a/4-1)
.model small
.8087
.stack 100h
.data
a1             dd   ?
c1             dd   ?
d1             dd   ?
const1    dd    2
const2    dd    23
const3    dd    4
const4    dd    1
rezult       dd    ?
.code
start :
variant1 proc
mov  ax, @data
mov  dx,ax
finit
fld const3    (a1/4)
fld   a1
fild const4    (a1/4-1)
fld    a1
fdiv  st(0),st(0)
fsub  st(0),st(1)
fld  a1
fild  const2    
fsqrt
fild  c1
fild  const1            (2*c1)
fild  d1
fmul     st(0),st(1)    (2*c1)  
fsubr   st(0),st(1)   (2*c1-d1)
fiadd    st(0),st(2)   (2*c1-d1)+(sqrt23*a1)
fidiv     st(0),st(3)   (2*c1-d1)  +(sqrt23*a1)/((a1/4)-1)  
fstp   rezult
mov ax,4C00h
int 21h
variant1 endp
end start
Здравствуйте! Расписала свою задачу вроде правильно, а почему то tasm.exe ругается и выдает 7 ошибок в таких строках
21,23,31,33,34-Expecting scalar  type .
                    35,36  Undefined symbol: st error.
                    35,36 Warning Argyment needs type override.
Может виндовс 7 тормозить работу ассемблера.

Решение задачи: «Как вычислить дробь с корнем в числителе?»

textual
Листинг программы
.code
        finit
    fld   a1
    fdiv const_4   ; (a1/4)
    fld1
    fsubp st(1),st  ;  (a1/4-1)
    fld const_23
    fsqrt             ;sqrt(23)
    fmul    a1       ;a1*sqrt(23)
    fld  c1
    fadd st,st     ;  (2*c1)
    fsub d1        ;(2*c1-d1)
    faddp st(1),st ;(2*c1-d1)+(a1*sqrt(23))
    fdiv st,st(1)  ;((2*c1-d1)+(a1*sqrt(23))/((a1/4)-1)  
    fstp   rezult
.data
a1             dd   1.2
c1             dd   4.9
d1             dd   6.7
const_23  dd    23.0
const_4   dd    4.0
rezult       dd    ?

Объяснение кода листинга программы

  1. Выполняется инициализация переменных: — a1 = 1.2 — c1 = 4.9 — d1 = 6.7 — const_23 = 23.0 — const_4 = 4.0
  2. Вычисляется значение переменной rezult по следующей формуле: rezult = ((2c1-d1)+(a1sqrt(23)))/((a1/4)-1)
  3. Результат вычислений сохраняется в переменной rezult. В данном коде выполняется вычисление дроби с корнем в числителе.

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

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