Assembler для начинающих


         

Синус угла - часть 4


            009E  83 3E 0000 R 0D                CMP     NUM_ANGLE, 13
            00A3  77 02                    JA      RETURN_INST
            00A5  EB 82                    JMP     DO_AGAIN
            00A7                     RETURN_INST:
            00A7  CB                       RET
            00A8                     BIG_ANGLE:
            00A8  8D 16 0008 R                   LEA     DX, ERROR_MSG
            00AC  B4 09                    MOV     AH, 9H
            00AE  CD 21                    INT     21H
            00B0  CB                       RET
            00B1                     SIN     ENDP
            00B1                     CODE    ENDS
                                           END     SIN
             Фиг. 7.27 (a) Процедура SIN (продолжение)
            A>SIN
             4.79425539E-001
             8.41470985E-001
             9.97494987E-001
             5.98472144E-001
             1.41120008E-001
            -3.50783228E-001
            -7.56802495E-001
            -9.77530118E-001
            -9.58924275E-001
            -7.05540326E-001
            -2.79415498E-001
             2.15119988E-001
 
             Фиг. 7.27 (b) Вывод процедуры SIN
 
            Фиг. 7.27 Вычисление синуса угла
 
      В первой части программы происходит ее инициализация для работы
    в качестве файла типа .EXE.  Затем сопроцессор 8087 загружает два
    целых числа и делит их, формируя исходный угол.  Это - пример
    использования двух целых чисел для порождения числа с плавающей
    точкой (в данном случае 1/2), что нельзя сделать непосредственно с
    помощью ассемблера.
 
      Как вы помните из тригонометрии, синус - периодическая функция.
    То есть функция дает один и тот же результат в случае исходных
    чисел, различающихся ровно на 2*PI.  Поэтому первой задачей
    подпрограммы SIN является замена исходного угла соответствующим
    значением, лежащим в диапазоне
 
      0 <= X < 2*PI
 
      В команде FPTAN требуется, чтобы угол находился в диапазоне



Содержание  Назад  Вперед