ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 16

Глава 13. Сопроцессор 80х87 и эмулятор
Если в вашей программе используются числа с плавающей точкой, Турбо отладчик TDW позволяет вам проверять и изменять состояние арифметического сопроцессора или программного эмулятора (TDW может только проверять состояние эмулятора, но не изменять его). Дл
я отладки программ, которые работают с числами с плавающей точкой, вам не обязательно использовать возможности, описанные в данной главе, однако некоторые трудноуловимые ошибки найти будет легче. 
Примечание: Данная глава предназначена для программистов, которые знакомы с работой арифметического сопроцессора 80х87. 
В этой главе мы обсудим различия между платой сопроцессора 80х87 и программным эмулятором. Мы также опишем окно Numeric Processor (Арифметический сопроцессор) и покажем вам, как можно проверять и модифицировать содержимое регистров с плавающей точкой, би
ты состояния и управления. 
Сопроцессор 80х87 или эмулятор?
Турбо отладчик TDW автоматически распознает, используется ли в вашей программе плата арифметического сопроцессора, или эмулятор, и работает соответствующим образом. 
Заметим, что большинство программ используют либо эмулятор, либо сопроцессор, но не оба этих средства в одной программе. Если вы написали специальный код на Ассемблере, использующий оба средства, Турбо отладчик TDW не сможет показать вам состояние платы 
сопроцессора и будет сообщать только об эмуляторе. 
Окно Numeric Processor
Окно Numeric Soprocessor (Арифметический сопроцессор) можно создать с помощью команды основного меню ViewіNumeric Processor (ОбзоріАрифметический сопроцессор). В строке в верхней части окна выводятся текущий указатель инструкций, указатель данных и код о
перации для инструкции. Указатель данных и указатель инструкций выводятся в виде 20-разрядных физических адресов. Эти адреса можно преобразовать в форму "сегмент:смещение", если использовать первые 4 цифры, как значение сегмента, а последние 4 цифры, как
 значение смещения. 
Например, если в верхней части окна выводится IPTR=5A669, это можно рассматривать, как адрес 5a66:9 (если вы хотите проверить текущие данные и инструкцию в окне CPU (ЦП)). Это окно содержит три области: в левой области (области регистров) выводится содер
жимое регистров с плавающей точкой, в средней области (области управления) показываются значения управляющих флагов, а в правой области (области состояния) показаны флаги состояния. 
         Й[ю]НEmulator IPTR=000000 OPCODE=000 OPTR=00003Н[][]»
         єEmpty ST(0)                            і im=0 і ie=0 є
         єEmpty ST(1)                            і dm=0 і de=0 є
         єEmpty ST(2)                            і zm=0 і ze=0 є
         єEmpty ST(3)                            і om=0 і oe=0 є
         єEmpty ST(4)                            і um=1 і ue=0 є
         єEmpty ST(5)                            і pm=1 і pe=0 є
         єEmpty ST(6)                            іiem=0 і ir=0 є
         єEmpty ST(7)                            і pc=3 і cc=9 є
         є                                       і rc=0 і st=2 є
         є                                       і ic=1 і      є
         ИІ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±ЩНННННННННННННЅ
Рис. 13.1 Окно Numeric Processor
В верхней части окна (первая строка) выводится информация о последней выполненной операции с плавающей точкой. IPTR показывает 20-разрядный физический адрес, из которого была извлечена последняя инструкция с плавающей точкой. OPCODE показывает тип извлеч
енной инструкции. OPTR показывает 20-разрядный адрес в памяти, на который инструкция ссылается (если он имеется). 
Область регистров
80-разрядные регистры с плавающей точкой
В области регистров показан каждый (от ST(0) до ST(7)) из регистров с плавающей точкой и его состояние (validіzeroіspecialі empty - допустимоеінулевоеіспециальноеіпустое). Содержимо выводится в виде 80-разрядных чисел с плавающей точкой. 
Если вы переключили окно Numeric Processor (нажав клавишу F5) или расширили его с помощью команды WindowіSize/Move (ОкноіРазмер/Перемещение), вы также увидите непосредственное содержимое регистров с плавающей точкой, выведенное в виде шестнадцатиричных б
айтовых значений. 
Локальное меню области регистров
Чтобы вывести локальное меню области регистров, нажмите клавиши Alt-F10, или для непосредственного доступа к команде меню используйте клавишу Ctrl вместе с первой буквой имени команды. 
                 ЪДДДДДДДДї
                 і Zero   і   Обнуление
                 і Empty  і   Пусто
                 і Change і   Изменение
                 АДДДДДДДДЩ
Команда Zero
Команда Zero (Обнуление) устанавливает текущий (подсвеченный) регистр в значение 0. 
Команда Empty
Команда Empty (Пусто) присваивает подсвеченному в данный момент регистру пустое значение. Это специальное состояние, показывающее, что регистр не содержит более допустимых данных. 
Команда Change
Команда Change (Изменение) загружает в текущий (подсвеченный) регистр новое значение. Допускается вводить целое значение или значение с плавающей точкой. Введенное вами значение будет преобразовано во временный 80-битовый вещественный формат, используемы
й арифметическим сопроцессором. 
Эту команду можно вызвать, если просто начать печатать для регистра с плавающей точкой новое значение. При этом будет выводиться окно подсказки (как при использовании команды Change). 
Область управления
Биты управления
В следующей таблице приведен список различных флагов управления, выводимых в области управления. 
   ЪДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
   і Название в области     і                     Описание флага  і
   ГДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
   і         im             і Маска недопустимой операции         і
   і         dm             і Маска ненормализованной операции    і
   і         zm             і Маска деления на нуль               і
   і         om             і Маска переполнения                  і
   і         um             і Маска потери значимости             і
   і         pm             і Маска точности                      і
   і         iem            і Маска резрешения прерывания (только і
   і                        і для сопроцессора 8087)              і
   і         pc             і Управление точностью                і
   і         rc             і Управление округлением              і
   і         ic             і Контроль бесконечности              і
   АДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Локальное меню области управления
Для перемещения в область управления нажмите клавишу Tab, затем для получения локального меню нажмите клавиши Alt-F10. (Вы можете также использовать клавишу Ctrl вместе с первой буквой командой, что позволяет получить непосредственный доступ к команде.) 

                                        ЪДДДДДДДДї
                    Переключение        і Toggle і
                                        АДДДДДДДДЩ
Команда Toggle
Команда Toggle (Переключение) позволяет циклически переключать значение текущего (подсвеченного) управляющего флага. Значения большинства флагов могут быть только установлены или сброшены (принимать значения 1 или 0), поэтому данная команда будет переклю
чать флаг в другое значение. Однако некоторые другие флаги могут принимать больше значений. Для таких флагов данная команда будет увеличивать значение флага, пока не будет получено максимальное значение, затем снова установит флаг в значение 0. 
Состояние управляющих флагов можно также переключать, нажимая клавишу Enter. 
Область состояния
Биты состояния
В следующей таблице приведен список различных флагов состояния, выводимых в области состояния. 
     ЪДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДї
     іНазвание в области     і       Описание флага     і
     ГДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
     і        ie             і Недопустимая операция    і
     і        de             і Ненормализованный операнді
     і        ze             і Деление на нуль          і
     і        oe             і Переполнение             і
     і        ue             і Потеря значимости        і
     і        pe             і Точность                 і
     і        ir             і Запрос прерывания        і
     і        cc             і Код состояния            і
     і        st             і Указатель вершины стека  і
     АДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
                Локальное меню области состояния
Для перемещения в область состояния нажмите клавишу Tab, затем для вывода локального меню нажмите клавиши Alt-F10. (Вы можете также использовать клавишу Ctrl вместе с первой буквой команды, что позволяет получить непосредственный доступ к нужной команде.
) 
                                               ЪДДДДДДДДї
                             Переключение      і Toggle і
                                               АДДДДДДДДЩ
Команда Toggle
Команда Toggle (Переключение) позволяет циклически переключать значение текущего (подсвеченного) флага состояния. Значения большинства флагов могут быть только установлены или сброшены (принимать значения 1 или 0), поэтому данная команда будет переключат
ь флаг в другое значение. Однако некоторые другие флаги могут принимать больше значений. Для таких флагов данная команда будет увеличивать значение флага, пока не будет получено максимальное значение, затем снова установит флаг в значение 0. 
Состояние флагов можно также переключать, нажимая клавишу Enter.


Яндекс цитирования