Методические указания по лабораторным работам по курсу «Аппаратные средства компьютерных систем», страница 15

Неточный результат — истинный результат не может быть точно представлен в заданном формате, результат округляется. Обработка продолжается.

На рисунке 2.5 представлен фрагмент программы, производящей суммирование положительных значений tg(X), при X = 1…25. Сумма заносится в Sum в длинном вещественном формате.

       FINIT         ;Вычислить значения

       FLDPI          ;р/2 и р/4

       MOV   WORD PTR [COUNT],2

       FILD  DWORD PTR [COUNT]

       FDIV

       FST   QWORD PTR [PI2]

       FILD  DWORD PTR [COUNT]

       FDIV

       FSTP  QWORD PTR [PI4]

       MOV   CX,25

       MOV   WORD PTR [COUNT],0

RETRY: INC   WORD PTR [COUNT] ;Увеличить Х

       CALL  TANGENS ;Вычислить тангенс

       FLDZ          ;Результат < 0?

       FCOMP

       FSTSW STATUS

       FWAIT

       MOV   AH,BYTE PTR [STATUS+1]

       SAHF

       JNB   NOADD   ;Да

       FLD   QWORD PTR [SUM] ;Наращивание суммы

       FADD

       FST   QWORD PTR [SUM]

NOADD: FINIT

       LOOP  RETRY

  . . .

TANGENS PROC NEAR

       PUSH  CX

       FILD  DWORD PTR [COUNT]  ;Включить Х в стек

       FLDPI         ;Включить р в стек

       FXCH          ;Обменять Х и р

       FTST          ;Проверить знак Х

       XOR   BX,BX   ;Флаг обратной величины

       XOR   CX,CX   ;Флаг изменения знака

       FSTSW STATUS  ;Извлечь SW

       FWAIT

       MOV   AH,BYTE PTR [STATUS+1] ;Перенести SW в р-р флагов

       SAHF

       JAE   NORM_1             ;Х > 0

       FCHS          ;Изменить знак

       NOT   CX

NORM_1:              ;Приведение Х в диапазон [0...р]

       FPREM         ;Вычислить остаток R от

       FSTSW STATUS  ;деления Х на р

       FWAIT

       MOV   AH,BYTE PTR [STATUS + 1]

       SAHF

       JP NORM_1

NORM_2:              ;Приведение Х в диапазон [0...р/2]

       FLD   QWORD PTR [PI2] ;Включить р/2 в стек

       FSTP  ST(2)   ;R ® ST(0), р ® ST(1)

       FCOM          ;Сравнить R с р/2