|
Методические указания по Организации ЭВМ и систем
Лабораторная работа 9.
Пример решения:
{Лабораторная работа №9. Выполнила: Товбис Е.М., гр.22-6 18.11.00
Задание: Е(sinXi)+sinx+tgx, i=1..5}
{$N+}
uses crt;
var x,y1,result:single;
i:integer;
xi:array[1..5] of single;
procedure sinus(x1:single); assembler; {Процедура вычисления синуса }
asm {по формуле: tgx/(v(tgx*tgx+1))}
fld x1 {Помещаем в стек х1}
fptan {вычисляем тангенс, причем значение тангенса
записывается в st(1),а в st(0) помещается 1}
fld st(1) {помещаем в st(0) значение тангенса}
fmul st(0),st(0) {(tgx)^2}
faddp {по умолчанию складываем значения
st(0) и st(1) с выталкиванием из стека}
fsqrt {вычисляем квадратный корень}
fdivp st(1),st(0) {делим содержимое st(1) на содержимое st(0) с выталкиванием
из стека и результат помещаем в st(1)}
fstp y1 {результат выталкиваем из стека в у1}
end;
begin
clrscr;
writeln('Input x');
readln(x);
writeln('Input Xi');
for i:=1 to 5 do
readln(xi[i]);
sinus(x);
result:=y1;
for i:=1 to 5 do
begin
sinus(xi[i]);
result:=result+y1;
end;
asm
fld x
fptan
fstp y1
fstp y1
end;
result:=result+y1;
writeln('y=',result:0:3);
readln;
end.
|