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



         

Десять в степени X - часть 4


    будет положительным числом, что также требуется для команды F2XM1.
 
      Обратите внимание на использование команды FWAIT после команды
    FNSTCW.  Ожидать окончания выполнения умножения перед записью
    управляющего слова не надо, так как умножение не меняет код в
    управляющем слове.  Но перед чтением управляющего слова из главной
    памяти и модификацией его нужна гарантия, что сопроцессор 8087 уже
    завершил запись.  Значит, нужно выполнить команду ожидания FWAIT
    перед чтением.
 
      После установки способа округления команда FRNDINT округляет
    показатель степени E до целого значения.  Так как мы также
    запомнили и исходное значение E в стеке, можно вычесть целую часть
    из E и получить дробную часть показателя степени.  То есть теперь E
    = I + F, и можно записать
 
      2**E = 2**I*2**F
 
      Но перед тем обратим внимание на одну маленькую деталь.
    Дробная часть F может оказаться значением большим 1/2, и поэтому не
    может быть аргументом команды F2XM1.  Сейчас мы используем число
    -1, ранее помещенное в стек, чтобы разделить F на 2, получив при
    этом F/2.  Чтобы это сделать, воспользуемся командой FSCALE, так
    как эта команда умножает содержимое ST0 на 2 в степени,
    содержащейся в ST1.  Поскольку в элементе ST1 содержится -1,
    результирующим эффектом будет умножение на 1/2.  Теперь можно
    утверждать, что содержимое регистра ST0 меньше 1/2.
 
      Далее команда F2XM1 возводит 2 в степень F/2, а -1 в стеке
    помогает ликвидировать -1, порождаемую в результате работы команды
    F2XM1.  Обратное вычитание с извлечением из стека избавляется и от
    -1 в стеке.  Затем 2F/2 умножается само на себя, в элементе ST0
    получается число 2F.  Так как целая часть показателя степени теперь
    переместилась в элементе ST1, команда FSCALE умножает 2I на число
    2F, которое уже находится в элементе ST0, давая искомый результат.
    Команда FCOMP удаляет из стека число I перед возвратом из
    подпрограммы.



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