Как вычислить дробь с корнем в числителе? - 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
21,23,31,33,34-Expecting scalar type . 35,36 Undefined symbol: st error. 35,36 Warning Argyment needs type override.
Решение задачи: «Как вычислить дробь с корнем в числителе?»
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 ?
Объяснение кода листинга программы
- Выполняется инициализация переменных: — a1 = 1.2 — c1 = 4.9 — d1 = 6.7 — const_23 = 23.0 — const_4 = 4.0
- Вычисляется значение переменной rezult по следующей формуле: rezult = ((2c1-d1)+(a1sqrt(23)))/((a1/4)-1)
- Результат вычислений сохраняется в переменной rezult. В данном коде выполняется вычисление дроби с корнем в числителе.