Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 135 136 137 138 139 140 141  142 143 144 145 146 147 148 ... 198
         FIST     ¦      ¦       ¦        ¦        ¦       ¦
         адресат  ¦ Да   ¦ Да    ¦  Да    ¦        ¦       ¦ Нет
         FBLD     ¦      ¦       ¦        ¦        ¦       ¦
         источник ¦      ¦       ¦        ¦  Да    ¦       ¦ Нет
         FBSTP    ¦      ¦       ¦        ¦        ¦       ¦
         адресат  ¦      ¦       ¦        ¦  Да    ¦       ¦ Нет
         ДДДДДДДДДБДДДДДДБДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДБДДДДДДДДДДДДД
             Некоторые сомнения возникают по поводу того,  как NPX обраща-
         ется к своим операндам.  Небольшой пример поможет развеять туман,
         поэтому  давайте посмотрим на работу трех кодов операций NPX.

         FLD     ; Загрузить 1-ый аргумент из памяти
         FLD     ; Загрузить 2-ой  аргумент  из  памяти
         FADD    ;  кодируется  как FADD ST(1),ST
         FSTP  ; сохранить результат в памяти

                                      - 10-13 -

             Эта операция использует FLD для считывания двух операндов па-
         мяти в стек регистра NPX,  складывает их, применяя "классическую"
         форму FADD,  и затем сохраняет результат с помощью FSTP. Помните,
         что в то время как основные арифметические команды  (FADD,  FSUB,
         FMUL и FDIV) кодируются сами по себе,  MASM генерирует классичес-
         кую операцию снятия со стека,  используя вершину стека  ST, в ка-
         честве источника и следующий элемент стека ST(1) в качестве адре-
         сата.
             Работа четырех  предыдущих  команд представлена графически на
         рисунке 10-7.  Мы разделили две части команды FADD таким образом,
         чтобы  Вы  могли  лучше видеть эффекты снятия со стека.  Гладя на
         операцию,  Вы можете увидеть,  что  NPX  концептуально  завершает
         арифметическую  ее  часть  -  сохраняя результата в ST(1) - затем
         снимает со стека,  перенося результат в  вершину  стека,  ST  или
         ST(0).
                                      Одна и та же команда
                                     ЪДДДДДДДДДДДДДДДДДДДДДДД¬
                                         FADDP       FADDP    FSTP сохра-
              FLD помещает в стек:      (ST(1)=   выталкивает няет и вы-
                 Mem-1       Mem-21   Mem-1 + Mem-2   Mem-2  талкивает SUM
              ЪДДДДДДДДДД¬ЪДДДДДДДДДД¬ЪДДДДДДДДДД¬ЪДДДДДДДДДД¬ЪДДДДДДДДДД¬
         ST(0)¦   Mem-1  ¦¦  Mem-2   ¦¦  Mem-2   ¦¦  SUM     ¦¦Предыдущее¦
              ГДДДДДДДДДДґГДДДДДДДДДДґГДДДДДДДДДДґГДДДДДДДДДДґГДДДДДДДДДДґ
         ST(1)¦Предыдуще妦  Mem-1   ¦¦  SUM     ¦¦Предыдуще妦          ¦
              ГДДДДДДДДДДґГДДДДДДДДДДґГДДДДДДДДДДґГДДДДДДДДДДґГДДДДДДДДДДґ
         ST(2)¦          ¦¦Предыдуще妦Предыдуще妦          ¦¦          ¦
              АДДДДДДДДДДЩАДДДДДДДДДДЩАДДДДДДДДДДЩАДДДДДДДДДДЩАДДДДДДДДДДЩ

                       Рис.10-7. Пример работы со стеком NPX
             В конце  нашего  примера  стек  принимает свой первоначальный
         вид.  Так ли это? Да, это так, если в стеке было место для допол-
         нительных аргументов. Однако, если в нем не было достаточно места
         для размещения новых данных,  NPX объявляет о недопустимой ситуа-
         ции в работе ввиду переполнения стека.  (Мы рассмотрим чрезвычай-
         ные ситуации в дальнейшем.) Следовательно, до того, как мы сможем
         выполнить даже нашу очень простую задачу,  необходимо убедиться в
         том, что NPX может принимать данные. Для достижения этого сущест-
         вует два способа.


                               Команды FINIT и FFREE

             Простейшим способом подготовки NPX к работе является  исполь-
         зование команды FINIT.  Это первая команда,  которую нужно напра-
         вить NPX всякий раз как только начинает выполняться  новая  прог-
         рамма.  FINIT  инициализирует  NPX  таким  образом,  как  если бы
         произошел сброс всей системы, что означает очистку всех регистров
         и ситуаций, а также обеспечивает свободное место для работы прог-
         раммиста.
             Другую возможность убедиться в том, что NPX освободил регист-
         ры, предоставляет команда FFREE. Она отмечает необходимый регистр
         как пустой и позволяет программисту использовать его для последу-
         ющих вычислений. Обратите внимание, что нет необходимости очищать
         регистры на вершине стека.  Если нижняя часть стека, ST(7), имеет
         достаточно свободного места,  верхние регистры при добавлении но-
         вого значения опустятся вниз.

                                      - 10-14 -


                                  Управление NPX

             Помимо восьми регистров данных NPX имеет  четыре  других  ре-
         гистра,  доступных программисту.  Из рисунка 10-1 видно,  что это
         слово состояния,  слово управления, а также указатели операндов и
         команд.  NPX также имеет регистр,  называемый словом признака, но
         он используется только внутри NPX.  (Слово признака отмечает  ре-
         гистры как пустые, нулевые и не-число.) Два указателя, операнда и
         команды  полезны только в процессе внешней обработки особой ситу-
         ации,  которую  мы рассмотрим далее.  Остались слова управления и
         состояния.  Для эффективного использования NPX нам необходимо по-
         нять работу этих регистров.

                               Слово управления NPX

             Сначала мы рассмотрим регистр слова управления.  Это 16-бито-
         вое слово определяет то,  как NPX трактует различные ситуационные
        ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДД¬
        ¦ 15¦ 14¦ 13¦ 12¦ 11¦ 10¦  9¦  8¦  7¦  6¦  5¦  4¦  3¦  2¦  1¦  0¦
        ГДДДБДДДБДДД†ДДД†ДДДБДДД†ДДДБДДД†ДДД†ДДД†ДДД†ДДД†ДДД†ДДД†ДДД†ДДДґ
        ¦           ¦   ¦       ¦       ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
        ¦           ¦ IC¦   RC  ¦   PC  ¦IEM¦   ¦ PM¦ UM¦ OM¦ ZM¦ DM¦ IM¦
        АДДДБДДДБДДДБДДДБДДДДДДДБДДДДДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДЩ
        АДДДДДДДДДДДЩ ¦ АДДДДДДДБДДДДДДДЩ ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
      зарезервировано ¦     ¦       ¦     ¦   ¦   ¦   ¦   ¦   ¦   ¦   
                      ¦     ¦       ¦     ¦   ¦   ¦   ¦   ¦   ¦   ¦Неверная
      УправлениеЪДДДДДЩ     АДДД¬   ¦     ¦   ¦   ¦   ¦   ¦   ¦   операция
  бесконечностью               ¦   ¦     ¦   ¦   ¦   ¦   ¦   ¦Ненормализо-
        ЪДДДДДДДДДДДДДДДДДДДДД¬ ¦   ¦     ¦   ¦   ¦   ¦   ¦   ¦ванный опе-
        ¦0 = Сходящаяся       ¦ ¦   ¦     ¦   ¦   ¦   ¦   ¦         ранд
        ¦  Ъ бесконеч.¬       ¦ ¦   ¦     ¦   ¦   ¦   ¦    Деление на ноль
        ¦  ¦          ¦       ¦ ¦   ¦     ¦   ¦   ¦    Переполнение
        ¦- ¦          ¦ +     ¦ ¦   ¦     ¦   ¦     Потеря значимости
        ¦  АДДД 0 ДДДДЩ       ¦ ¦   ¦     ¦      Точность         Маска
        ¦1 = Расходящаяся     ¦ ¦   ¦     ¦Зарезервирован      разрешения
        ¦                     ¦ ¦   ¦     ¦                    прерывания
        ¦-беск.<-- 0 -->+беск.¦ ¦   ¦     ¦  ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
        АДДДДДДДДДДДДДДДДДДДДДЩ ¦   ¦     АДД¦0= Разрешить                ¦
                                ¦   ¦        ¦1= Запретить (замаскировано)¦
                                ¦   ¦        АДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
      Управление   ЪДДДДДДДДДДДДЩ   АДДДДДДДДДДДД¬ Управление
      округлением                                точностью
        ЪДДДДДДДДДДДДДДДДДДДДД¬      ЪДДДДДДДДДДДДДДДДДДДДДДДД¬
        ¦00=(x+1)<---0.5--->x ¦      ¦            ЪДДДДДДДДДД¬¦
        ¦01=     ---> 0 --->  ¦      ¦00=         ¦ 24 бита  ¦¦
        ¦10=     <--- 0 <---  ¦      ¦            АДДДДДДДДДДЩ¦
        ¦11=     ---> 0 <---  ¦      ¦       ЪДДДДДДДДДДДДДДД¬¦
        АДДДДДДДДДДДДДДДДДДДДДЩ      ¦10=    ¦    53 бита    ¦¦
                                     ¦       АДДДДДДДДДДДДДДДЩ¦
                                     ¦    ЪДДДДДДДДДДДДДДДДДД¬¦
                                     ¦11= ¦    64 бита       ¦¦
                                     ¦    АДДДДДДДДДДДДДДДДДДЩ¦
                                     АДДДДДДДДДДДДДДДДДДДДДДДДЩ
             Рис.10-8. Слово управления и его влияние на операции NPX

                                      - 10-15 -
         условия и то, как он видит используемую систему счисления. На ри-
         сунке  10-8  продемонстрирована работа слова управления,  а также
         различные поля и их воздействия. В основном, слово управления со-
         держит три поля управления и семь флагов для использования с осо-
         быми ситуациями.
             На данном этапе мы хотим использовать как можно больше встро-
         енных средств NPX. Часть этого означает то, что мы хотим восполь-
         зоваться встроенными возможностями обработки особых ситуаций NPX.
         Вы  видите,  что  NPX  само по себе может следить за большинством
         возникающих ошибок,  исправлять число или возвращать  специальное
         значение, называемое не-число.  Так как обрабатывать эти прерыва-
         ния вручную сложно, мы предоставим NPX делать это за нас. Мы про-
         делаем это посредством маскировки особой ситуации, что выполняет-
         ся установкой масок ситуаций в слове управления. Все маски особых
         ситуаций вместе с главной маской разрешения прерываний содержатся
         в младшем байте слова управления.
             Установка NPX в режим использования своих внутренних обработ-
         чиков ошибок выполняется установкой младшего байта в BF (шестнад-
         цатиричное)  с  применением  команды  загрузки  слова  управления
         FLDCW.  Мы просто определяем слово в памяти главного центрального
         процессора с помощью младшего байта,  имеющего значение BF (шест-
         надцатиричное). Затем мы загружаем его следующим образом:
             .
             .
             .
           cw87    dw    03BFh    ; значение слова управления NPX
                   .
                   .
                   .
                  FLDCW  cw87     ; загрузить слово управления NPX
                   .
                   .
                   .
             Зачем мы применили значение 3 для старшего байта слова управ-
         ления?  Старший байт содержит три поля для определения используе-
         мой NPX модели числа.  Эти три поля  также  показаны  на  рисунке
         10-8.  Сравнив диаграмму с нашим значением 3,  Вы увидите, что мы
         выбрали 64-битовую точность,  округление до ближайшего  целого  и
         сходящуюся бесконечность.  Эти значения единственные, рекомендуе-
         мые фирмой Intel, а также единственные, которые NPX использует по
         умолчанию.  Если  Вы хотите изменить эти установки,  рисунок 10-8
         подскажет, какие значения можно применять.


                                Слово состояния NPX

             Слово состояния NPX содержит четыре типа информации:  (1) ин-
         дикатор занятости; (2) указатель вершины стека; (3) коды условий,
         отражающие результаты выполнения команд FCOM,  FTST и FXAM; и (4)
         индикаторы особых ситуаций, сигнализирующие о возможности появле-
         ния ошибки.  Рисунок 10-9 демонстрирует положения различных инди-
         каторов внутри слова состояния.

                                     - 10-16 -
       ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДД¬
       ¦ 15¦ 14¦ 13¦ 12¦ 11¦ 10¦  9¦  8¦  7¦  6¦  5¦  4¦  3¦  2¦  1¦  0¦
       ГДДД†ДДД†ДДДБДДДБДДД†ДДД†ДДД†ДДД†ДДД†ДДД†ДДД†ДДД†ДДД†ДДД†ДДД†ДДДґ
       ¦   ¦   ¦           ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
       ¦ B ¦ C3¦     ST    ¦ C2¦ C1¦ C0¦ IR¦   ¦ PE¦ UE¦ OE¦ ZE¦ DE¦ IE¦
       АДДДБДДДБДДДДДДДДДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДЩ
         ¦   ¦ АДДДДДДДДДДДБДДДДДДДДДДДЩ ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
         ¦   АДДДДДДДДДДДДДДДДДДД¦       ¦   ¦   ¦   ¦   ¦   ¦   ¦   
Предыдущая страница Следующая страница
1 ... 135 136 137 138 139 140 141  142 143 144 145 146 147 148 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама