ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 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. |