|
Часть 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.
|