ГЛАВА 5

 Использование Других Команд
   5.1 Команды Вывода и Редактирования
   5.2 Команды Портов ввода/вывода
   5.3 Команды Передачи Управления
   5.4 Команды Режима Отладки
   5.5 Сервисные Команды
   5.6 Специализированные Отладочные Команды
   5.7 Команды работы с Окнами
   5.8 Команды Настройки Отладчика
   5.9 Команды Управления Экраном
   5.10 Команды Работы с Символами и Строками Исходного Текста


   5.1 Команды Вывода и Редактирования

     75

Команды:
 U -- Дизассемблировать инструкции или показать исходный текст
 R -- Показать или изменить регистры
 MAP -- Показать карту памяти системы
 D -- Показать память в самом последнем
                     указанном формате
 DB -- Показать память в формате байта
 DW -- Показать память в формате слова
 DD -- Показать память в формате двойного слова
 E -- Редактировать память в самом последнем
                     указанном формате
 EB -- Редактировать байты памяти
 EW -- Редактировать слова памяти
 ED -- Редактировать двойные слова памяти
 INT? -- Показать последний номер прерывания
 ? Или H -- Показать информацию помощи
 VER -- Показать номер версии Soft-ICE

     76


                    U

U -- Дизассемблирует инструкции или показывает исходный текст

Синтаксис:

    U [адрес] [L[=]длина]

   длина -- Число инструкций
                     для дизассемблера

Комментарии:
Команда U показывает инструкции отлаживаемой программы.

Если длина не определена, по умолчанию принимается восемь строк, если
это возможно, или на одну строку меньше высоты экрана.

Если адрес не определен, команда дизассемблирует инструкции с адреса первого
байта за последним байтом, дизассемблированным предыдущей
командой. Если предыдущей команды дизассемблировать не было, за адрес
по умолчанию принимается текущий CS:IP.

Если видимо окно кода, инструкции выводятся в окне
кода.

Если для диапазона указанного адреса загружен исходный текст, в зависимости
от текущего режима работы с кодом, могут быть выведены исходные строки.

Пример:
    U $-10
   Эта команда дизассемблирует инструкции, начиная
   за 10 (шестнадцатеричное) байтов до текущего адреса.

     77

 U .499

Эта команда выводит текущий файл с исходным текстом, начиная со строки 499.
Окно кода должно быть видимо и находиться в режиме исходного текста.

     78


                       R

R -- Показать или изменить регистры

Синтаксис:

 R название-регистра [ [ = ]значение] ]

 название-регистра -- Любое из следующих:
                   AL, AH, AX, BL, BH,
                   BX, CL, CH, CX, DL,
                   DH, DX, DI, SI, BP,
                   SP, IP, CS, DS, ES, SS
                   Или FL
  значение -- Если название-регистра - любое, кроме
                   FL, значение - шестнадцатеричное значение или
                   выражение. Если название регистра - FL, то
                   значение - серия из одного или более
                   следующие символов флагов, каждый
                   с предшествующим ему знаком плюс или
                   минус :
                      O (флаг Переполнения) (Overflow)
                      D (флаг Направления) (Direction)
                      I (флаг Прерывания) (Interrupt)
                      S (флаг Знака) (Sign)
                      Z (флаг Нуля) (Zero)
                      A (флаг Вспомогательного переноса) (Auxiliary carry)
                      P (флаг Паритета) (Parity)
                      C (флаг Переноса) (Carry)

Комментарии:
Команда R показывает или изменяет регистры

Без параметров выводит значения всех регистров и флагов,
а также инструкцию по адресу текущего CS:IP.

Если название регистра указано без значения, Soft-ICE показывает
текущие значения указанного регистра и

     79

спрашивает у вас новое значение. Если название регистра - FL, установленные
флаги выводятся подсвеченными символами верхнего регистра; сброшенные
флаги выводятся без подсветки в нижнем регистре. Для сохранения
текущего значения регистра, нажмите ВВОД.

Если указаны и название регистра, и значение, содержимое указанного
регистра заменяется указанным значением.

Чтобы изменить значение флага, используйте FL как имя регистра, сопровождаемое
символами флагов, значения которых вы хотите переключить. Для установки флага
поставьте перед символом флага знак плюс. Чтобы сбросить флаг, поставьте перед
символом флага знак минус. Флаги могут быть указаны в любом порядке.

Примеры:
  R AH 5

  Эта команда устанавливает регистр AH равным 5.

  R FL = OZP

  Эта команда переключает значения флагов O, Z и P.

  R FL

  Эта команда выводит текущие значения флагов и
  предоставляет возможность их изменения.

  R FL O +A -C

  Эта команда переключает значение флага O, устанавливает
  флаг A и сбрасывает флаг C.

     80


                    MAP

MAP -- Показать карту памяти системы

Синтаксис:

    MAP

Комментарии:
Команда MAP выводит названия, местоположение и размеры компонент памяти
системы. Размер указывается в параграфах. Один параграф
эквивалентен 10 (шестнадцатеричное) байтам.

Компонент, на который в настоящее время указывает CS:IP, подсвечивается.

Используйте команду MAP когда:
    * Произошел останов и CS:IP в неизвестной
        области памяти.
    * Вы хотите получить контроль над резидентной или системной
        программой. Точка останова на диапазон может быть установлена
        основываясь на адресе начала и размере, отраженных
        командой MAP.
    * Вы подозреваете программу или компонент системы
        в записи поверх кода вне своей области памяти.
        MAP используется, чтобы получить адрес памяти
        области для использования в команде CSIP.
    * Вам необходимо выяснить, какая резидентная программа перехватывает
        определенные векторы прерываний.

     81

Пример:

   MAP

   Вот - пример вывода, произведенного
   командой:
      Начало   Длина
      0000:0000 0040 Таблица Векторов Прерываний
      0040:0000 0030 Переменные ROM BIOS
      0070:0000 00FE Система ввода/вывода
      016E:0000 06B7 DOS
      0842:0000 02CE Таблицы файлов и Буферы DOS
      A000:0000 5E00 Системная шина
      F000:0000 1000 ROM BIOS

   Версии DOS ниже, чем 3.1 выдают адреса программ
   вместо вывода их названий.

     82


            D, DB, DW, DD

D, DB, DW, DD -- Показать память

Синтаксис:

     D [размер] [адрес] [L[ = ]длина]
     размер -- B -- Байт
               W -- Слово
               D -- Двойное Слово

     длина -- Число байтов, которое должно быть
                  выведено.

Комментарии:
Команда D выводит содержимое памяти по указанному адресу.

Содержимое выдается в формате указанного размера. Если размер не
определен, вывод произойдет в последнем используемом формате. Для всех форм
также выдается ASCII представление.

Если адрес не определен, команда выводит память по адресу
начинающемуся с первого байта после последнего показанного байта.

Если длина не определена, по умолчанию принимается восемь строк или меньше
если высота окна меньше.

Если окно данных видимо, данные выводятся в окне данных
и длина игнорируется.

Пример:
  DW DS:00 L=8
    Эта команда показывает в формате слова (WORD) и в ASCII-
    формате значение первых восьми байтов текущего
    сегмента данных.

     83


           E, EB, EW, ED

E, EB, EW, ED -- Редактировать память

Синтаксис:

    E [размер] адрес [список-данных]
    Размер -- B -- Байт
              W -- Слово
              D -- Двойное Слово

    список данных -- список объектов данных указанного размера
                    (Байты, Слова или Двойные Слова) или
                    строк в кавычках, разделенных запятыми
                    или пробелами. Строка может
                    начинаться одинарной или двойной
                    кавычкой.

Комментарии:
Команды E показывают содержимое памяти по указанному адресу и
позволяет вам редактировать значения.

Эта команда показывают содержимое памяти в формате ASCII и в
формате указанного размера.

Редактор памяти создан для быстрой ее модификации. Память можно редактировать
вводя ASCII-символы или вводя значения размером байт, слово или двойное
слово. Если размер не определен, будет принят последний использованный размер.
Вот клавиши редактирования памяти:
      -- Перемещает курсор вверх
      -- Перемещает курсор вниз
      -- Перемещает курсор вправо
      -- Перемещает курсор влево
    ПРОБЕЛ -- Перемещает курсор на следующий элемент

     84

    TAB -- переключает между числовым и
                  ASCII-областями

    ESC или
    ВВОД -- Выход из редактора памяти

После ввода значения обновляются реальные ячейки памяти. Все числовые
значения - шестнадцатеричные числа. Для перехода между ASCII и числовой
областями экрана нажмите клавишу TAB.

Если окно данных видимо, данные редактируются в окне данных,
иначе данные редактируются в окне команд.

Длина данных по умолчанию принимается 8 строк, если в окне команд, или
равной размеру окна данных, если оно видимо.

При отсутствии параметров, курсор перемещается в окно данных, если
оно видимо. Если окно данных не видимо, данные редактируются в окне команд
по последнему отображенному или редактированному адресу.

Примеры:
   EB 1000:0
    Эта команда выводит в формате байта до шести строк,
    содержащих как числовое, так и ASCII
    представление значений данных, начиная с
    ячейки 1000:0000. Вы можете редактировать значения
    отображенных строк.
    EB 8000:0 "Привет",0D
    Эта команда заменяет значения, начинающиеся с ячейки
    8000:0000, строкой "Привет", сопровождаемой знаком
    возврата каретки.

     85


             INT?

INT? -- Выводит номер последнего прерывания

Синтаксис:

   INT?

Комментарии:
Команда INT? отображает адрес и номер последнего происшедшего
прерывания.

Пример:
   INT?
   Вот пример экрана, выданного
   командой INT?:
       Last Interrupt: 16
       At: 0070:0255

   Этот пример показывает, что последним прерыванием, сгенерированным
   системой перед вызовом окна Soft-ICE,
   было прерывание 16 (шестнадцатеричный номер) по адресу
   0070:0255H. Если последнее происшедшее прерывание было
   программным, дизассемблирование кода по адресу
   0070:0255H покажет инструкцию прерывания. Если это
   было аппаратное прерывание, дизассемблирование кода
   покажет команду, которая выполнялась когда
   произошло аппаратное прерывание.

     86


             ? Или H

? Или H --  Выводит справочную информацию

Синтаксис:

    < ? | H > [команда | выражение]

Комментарии:
И команда ? и команда H выводят справочную информацию.

Если параметры не определены, система помощи выдает короткие описания всех
команд и операторов, по одному экрану за раз. Нажмите любую клавишу для
продолжения или нажмите ESC, чтобы выйти из выводимой справки.

Если указана команда, справка выводит более детальную информацию относительно
указанной команды, включая синтаксис команды и пример.

Если указано выражение, выражение вычисляется и результат
выводится в шестнадцатеричном, десятичном и ASCII-представлении.

Примеры:
 ? ALTKEY
    Эта команда отображает информацию о
    команде ALTKEY, включая синтаксис и
    пример.
  H 10 + 14*2
   Эта команда выводит: 0038 00056 "8". Это -
   шестнадцатеричное, десятичное и ASCII-представления
   значения выражения "10 + 14*2".

     87


          VER

VER -- Выводит номер версии Soft-ICE

Синтаксис:

  VER

Пример:
   VER
   Эта команда выводит версию Soft-ICE
   и сообщение об авторских правах Nu-Mega Technologies.


     88


5.2 Команды Портов ввода/вывода

Команды:
   I или IB -- Ввод из байтового порта ввода/вывода
   IW -- Ввод из порта ввода/вывода с размерностью в слово
   O или OB -- Вывод в байтовый порт ввода/вывода
   OW -- Вывод в порт ввода/вывода с размерностью в слово

     89


                    I, IB, IW

I, IB, IW -- Ввод из порта ввода/вывода

Синтаксис:

   I [размерность] порт

   размерность -- B -- Байт
                  W -- Слово

   порт -- байт или слово

Комментарии:
Команды ввода из порта используются для чтения и отображения значений из
аппаратного порта. Ввод может выполняться из портов с размерностью слово или
байт. Если размер не определен, то значение по умолчанию - байт.

Пример:
   I 21
   Эта команда отображает регистр маски первого
   контроллера прерываний.

     90


         O, OB, OW

O, OB, OW, -- Вывод в порт ввода/вывода

Синтаксис:

    O [размерность] порт значение
    размерность -- B -- Байт
                   W -- Слово

    порт -- байт или слово
    значение -- байт для байтового порта или слово
                      для порта размерностью в слово

Комментарии:
Команды вывода в порт используются для записи значения в аппаратный порт.
Вывод может выполняться в порты размерностью байт или слово, если размер не
определен, то значение по умолчанию - байт.

Пример:
   O 21 FF
    Эта команда маскирует все прерывания для первого
    контроллера прерываний.

     91


5.3 Команды Передачи Управления

Команды:
 X       -- Выйти из окна Soft-ICE
 G       -- Перейти по адресу
 T       -- Протрассировать одну команду
 P       -- Программный шаг
 HERE    -- Исполнение программы до строки, в которой находится курсор
 GENINT  -- Вызов прерывания
 EXIT    -- Вызывает выход из текущей программы DOS'а
 BOOT    -- Перезагрузка системы (с сохранением Soft-ICE)
 HBOOT   -- Жесткая перезагрузка системы (общий сброс)

     92


                           X

X -- Выйти из окна Soft-ICE

 Синтаксис:

    X

Комментарии:
Команда X производит выход из окна Soft-ICE и возвращает управление
программе, которая была прервана при вызове Soft-ICE. Окно Soft-ICE
исчезает. Если до этого были установлены точки останова, они станут активными.

Пример:
    X

     93


                           G

G -- Перейти по адресу

Синтаксис:

    G [=адрес-начала] [адрес-останова]

Комментарии:
Команда G вызывает выход из окна Soft-ICE с одноразовым набором точек останова
на выполнение. Кроме того, активизируются все "прилипающие" точки останова.

Если не указан параметр адрес-начала, выполнение начинается с текущего CS:IP.
В противном случае выполнение начинается с адреса-начала. Выполнение
продолжается, пока не достигается адрес-останова, используется комбинация
клавиш для вызова окна или не выполняется "прилипающая" точка останова.

Адрес останова должен указывать на первый байт опкода команды.

Когда достигается указанный адрес-останова, текущий CS:IP будет указывать на
команду, где была установлена точка останова.

Команда G без параметров ведет себя также как команда X.

Обычная точка останова на выполнение использует 1 отладочный регистр 80386,
пока все отладочные регистры не будут распределены для "прилипающих" точек
останова. В этом случае, будет произведен останов в стиле INT 3. В таком
случае команды G и P не будут корректно работать в ПЗУ. При попытке их
использования будет выведено сообщение об ошибке.

Пример:
   G CS:1234
    Эта команда устанавливает временную точку останова на CS:1234

     94


                             T

T -- Протрассировать одну команду

Синтаксис:

    T [=адрес-начала] [счетчик]

Комментарии:
Команда T выполняет одиночный шаг на одну команду, используя флаг
трассировки.

Если параметр адрес-начала не указан, выполнение начинается с текущего
CS:IP. Если адрес-начала - определен, CS:IP изменяется на адрес-начала
для трассировки.

Если указано значение счетчика, Soft-ICE будет считать количество шагов.
Команда TRACE будет выполняться, пока счетчик не будет исчерпан или не
будет нажата клавиша Esc, независимо от достигнутых точек останова.

В режиме работы с исходным текстом команда T переходит на следующее выражение
в исходном тексте. Если текущее выражение - вызов процедуры или функции и есть
исходный текст вызываемой подпрограммы, T входит в нее. Если нет исходного
текста вызываемой процедуры или функции, T перешагивает через подпрограмму.

Пример:
   T = 1284 3
    Эта команда трассирует три инструкции,
    начиная с ячейки памяти 1284.

     95


                            P

P -- Программный шаг

Синтаксис:

   P

Комментарии:
Команда P - логический шаг программы. По текущему CS:IP выполняется одна
команда, если она не является обращением, прерыванием, циклом или командой
повторения работы со строковыми данными. В этих случаях, прежде чем управление
возвращается Soft-ICE'у, выполняется вся подпрограмма или итерация.

Команда P использует одноразовую точку останова на выполнение. Обычная
точка останова на выполнение использует 1 отладочный регистр 80386,
пока все отладочные регистры не будут распределены для "прилипающих" точек
останова. В этом случае, будет произведен останов в стиле INT 3. В таком
случае команды G и P не будут корректно работать в ПЗУ. При попытке их
использования будет выведено сообщение об ошибке.

В режиме работы с исходным текстом команда P переходит на следующее выражение
в исходном тексте. Если текущее выражение - вызов процедуры или функции, P
перешагивает через подпрограмму.

Пример:
    P
    Эта команда выполняет один 'программный шаг'.

     96


                         HERE

HERE -- Исполнение программы до строки, в которой находится курсор

Синтаксис:

  HERE

Комментарии:
Команда HERE выполняется, пока программа не достигает текущей строки курсора.
HERE доступна, только когда курсор находится в окне кода. Если
окно кода не видимо или курсор - не в окне кода, используйте
вместо этого команду G.

Команда HERE вызывает выход из окна Soft-ICE с одноразовым набором точек
останова на выполнение. Кроме того, активизируются все "прилипающие" точки
останова.

Выполнение начинается с текущего CS:IP и продолжается до встречи адреса
текущей позиции курсора в окне кода, используется комбинация клавиш для
вызова окна и выполняется "прилипающая" точка останова.

Обычная точка останова на выполнение использует 1 отладочный регистр 80386,
пока все отладочные регистры не будут распределены для "прилипающих" точек
останова. В этом случае, будет произведен останов в стиле INT 3. В таком
случае команда HERE не будет корректно работать в ОЗУ. При попытке ее
использования будет выведено сообщение об ошибке.

Пример:
 HERE
    Этот пример устанавливает точку останова на выполнение на
    текущую позицию курсора, затем выходит из Soft-ICE и
    начинает выполнение с текущего CS:IP.
Заданная по умолчанию Функциональная клавиша: F7

     97


          GENINT

GENINT -- Вызов прерывания

Синтаксис:

   GENINT INT1 | INT3 | NMI | номер-прерывания

   номер-прерывания -- число в диапазоне 00 - FF

Комментарии:
Команда GENINT вызывает прерывание. Она может использоваться для передачи
управления другому отладчику при использовании Soft-ICE с другим отладчиком.
Она также может использоваться для проверки подпрограмм обработки прерываний.

Команда GENINT эмулирует последовательность обработки аппаратного
прерывания или команды INT. Она сохраняет флаги, регистр CS и регистр
IP, затем изменяет значение регистров CS и IP на значение входа в
таблицу векторов прерываний, в соответствии с указанным
номером прерывания.

Пример:
    GENINT NMI
    Это вызывает немаскируемое прерывание. Оно передаст
    управление обратно CodeView, если Soft-ICE используется как
    вспомогательное средство для CodeView.

     98


            EXIT

EXIT -- Вызывает выход из текущей программы DOS'а

Синтаксис:

   EXIT [R] [D]
    R -- Восстановить таблицу векторов прерываний
    D -- Удалить все точки останова

Комментарии:
Команда EXIT пытается прерывать текущую программу, вызывая функцию  выхода
DOS (INT 21H, функция 4CH). Эта команда будет работать только если DOS
находится в состоянии, когда она способна принять обращение к функции выхода.
Если это обращение произведено из некоторых обработчиков прерываний или в
других случаях, когда DOS не готова, поведение системы будет непредсказуемо.

Эта функция НЕ производит восстановления системных переменных, кроме таблицы
прерываний, при указанной опции R. Это означает что переменные BIOS,
видеорежимы и другие данные системного уровня не восстанавливаются.

Использование опции R вызовет восстановление векторов прерываний к значениям
которые были в последний раз, когда они были сохранены. Soft-ICE сохраняет
векторы прерываний, когда он загружается, когда LDR.EXE загружает программа
и когда используется команда VECS S.

Обратите внимание:
Для перезапуска программы, которая была загружена программой-загрузчиком
Soft-ICE'а (LDR.EXE) сделайте следующее:
     EXIT R
     LDR prog.EXE

Команда EXIT восстановит таблицу прерываний к значениям, которые
содержались в ней до загрузки программы, затем

     99

выйдите к командному процессору. При помощи запуска LDR и указания суффикса
.EXE, программа загружается обратно без перезагрузки символов и исходного
текста. Символы и исходный текст останутся в памяти.

Внимание:
Команда EXIT должна использоваться с осторожностью. Так как Soft-ICE может
быть вызван в любое время, может произойти ситуация, когда DOS не в состоянии
принять обращение к функции выхода. Также, команда EXIT не производит никакого
специфического программного сброса. Например, команда EXIT не восстанавливает
видеорежим. Если ваша программа установила видео BIOS и аппаратные средства в
определенный видеорежим, они останутся в этом режиме после команды EXIT.

Пример:
  EXIT R
    Восстанавливает таблицу прерываниq и выходит из текущей
    программы. Опция R должна использоваться при выходе из
    программы, загруженной программным загрузчиком Soft-ICE'а
    LDR.EXE.

     100


          BOOT

BOOT -- Перезагрузка системы (с сохранением Soft-ICE)

Синтаксис:

  BOOT

Комментарии:
Команда BOOT перезагружает систему и сохраняет Soft-ICE. BOOT требуется для
отладки последовательности начальной загрузки, загружаемых драйверов DOS и
операционных систем отличных от DOS (non-DOS).

BOOT выполняется посредством вызова прерывания 19H ROM BIOS. В некоторых
случаях память может быть разрушена до такой  степени, что прерывание 19 не
будет работать. Тогда вызовите Soft-ICE и используйте команду HBOOT.

Для правильной работы BOOT Soft-ICE должен быть установлен как загружаемый
драйвер в CONFIG.SYS перед всеми другими драйверами устройств. Так Soft-ICE
сможет восстановить первоначальное состояние системы максимально точно.

Пример:
  BOOT
   Эта команда выполняет перезагрузку системы. Soft-ICE
   остается резидентным.

101


         HBOOT

HBOOT -- Жесткая перезагрузка системы (общий сброс)

Синтаксис:

  HBOOT

Комментарии:
Команда HBOOT сбрасывает всю систему. Soft-ICE не сохраняется в
процессе сброса. HBOOT достаточна, если плата адаптера не требует отключения
питания. В этом случае, питание машины нужно отключить и затем восстановить.

Пример:
  HBOOT
   Эта команда производит перезагрузку системы. Soft-ICE
   должен быть заново загружен.

     102


5.4 Команды Режима Отладки

Команды:
   ACTION     -- Устанавливает действие после достижения точки останова
   WARN       -- Устанавливает режим предупреждения повторной входимости
                      DOS/ROM BIOS
   BREAK      -- Прерывает исполнение в любое время
   I3HERE     -- Перенаправить прерывание 3 на Soft-ICE

     103


         ACTION

ACTION -- Устанавливает действие после достижения точки останова

Синтаксис:

   ACTION [INT1 | INT3 | NMI | HERE | int-номер]

   int-номер  -- Любой допустимый номер прерывания (0-FFH).
                    Используйте эту опцию только если пользовательская
                    подпрограмма-обработчик прерывания
                    перехватила этот вектор прерывания (смотрите
                    раздел 11.2).

Комментарии:
Команда ACTION определяет, куда передается управление, когда выполнены условия
точки останова. В большинстве случаев, желательное действие - INT3 или
HERE, INT3 обычно используется, если Soft-ICE используется вместе с главным
отладчиком, HERE используется, когда желательно вернуться в Soft-ICE при
выполнении условий останова, INT1 и NMI - варианты для некоторых отладчиков,
которые не работают с опцией INT3. Например, CODEVEW лучше всего
работает с ACTION установленным в NMI.



Используйте int-номер, если имеется установленная пользовательская процедура
обработки прерывания. Использование int-номера без установленной процедуры
пользователя по обработке прерывания вызовет ошибку. Для получения более
подробной информации, см. раздел 11.2, 'Пользовательские точки останова'.

Если параметры команды ACTION не указаны, отображается текущее
установленное действие.

Заданное по умолчанию действие - HERE.

     104

Пример:
  ACTION HERE
Эта команда указывает, что когда будут выполнены условия точки останова,
управление вернется Soft-ICE'у.

     105


               WARN

WARN -- Устанавливает режим предупреждения повторной входимости DOS/ROM BIOS

Синтаксис:

  WARN [ON | OFF]

Комментарии:
Команда WARN предусмотрена для использования Soft-ICE с отладчиками, которые
используют DOS и ROM BIOS. Много отладчиков используют DOS и ROM BIOS для
вывода на экран и чтения нажатий клавиш. Так как DOS и ROM BIOS не полностью
реентерабельны, эти отладчики не могут корректно работать, если останов
происходит во время выполнения процедур DOS или ROM BIOS.

Если установлен WARN ON и ACTION - не HERE, то управление перейдет к Soft-ICE
до того как действие фактически произойдет. Система отобразит текущий CS:IP
и предоставит вам выбор продолжить или вернуться в Soft-ICE.
Вообще, вы должны выбрать возврат в Soft-ICE для продолжения вашей работы по
отладке. Продолжайте работу с главным отладчиком, только если вы знаете, что
ваш отладчик не вызовет повторного вхождения в DOS или ROM BIOS.

Режим WARN должен быть включен при использовании Soft-ICE с DEBUG, SYMDEB и
CODEVIEW.

Если параметры не указаны, отображается текущее состояние WARN.

Значение по умолчанию - режим WARN OFF.

Пример:
  WARN ON
   Эта команда включает режим предупреждения повторной входимости
   в DOS/ROM BIOS.



     106


                         BREAK

BREAK -- Прерывает исполнение в любое время

Синтаксис:

  BREAK [ON | OFF]

Комментарии:
Команда BREAK позволяет вызывать окно Soft-ICE, когда система остановлена
с заблокированными прерываниями. Режим BREAK может использоваться для всего
сеанса отладки или он может включаться и отключаться, когда это требуется.

Режим BREAK немного снижает эффективность системы. Это снижение
производительности должно оцениваться с точки зрения необходимости выхода из
зависшей программы. Пользователь может хотеть иметь включенный режим BREAK на
все время, даже при снижении эффективности, потому что программа может
зависнуть в любое время.

В отличие от других отладчиков, которые тоже могут быть вызваны в любое время,
Soft-ICE не требует внешнего переключателя. Когда BREAK - включен, окно Soft-
ICE может быть вызвано в любое время при нажатии текущей комбинации клавиш.

Если параметры не указаны, отображается текущее состояние BREAK.

Значение по умолчанию - BREAK OFF.

Пример:
 BREAK ON
    Эта команда включает режим BREAK. Это означает что
    окно Soft-ICE может быть вызвано в любое время,
    даже если прерывания заблокированы.

     107


            I3HERE

I3HERE -- Перенаправить прерывание 3 на Soft-ICE

Синтаксис:

  I3HERE [ON | OFF]

Комментарии:
Команда I3HERE позволяет вам указать, что любое прерывание 3 вызовет
окно Soft-ICE. Эта возможность полезна для остановки вашей программы в
определенных местах.

Чтобы использовать эту возможность, поместите INT 3 в ваш код в месте, где
вы хотите остановиться. Когда произойдет INT 3, оно вызовет окно Soft-ICE.
В этой точке, вы можете использовать команду R IP, чтобы изменить ваш
указатель команд на команду, следующую после INT 3, затем вы можете
продолжить отладку.

Если параметры не указаны, отображается текущее состояние I3HERE.

Значение по умолчанию - режим I3HERE OFF.

Пример:
  I3HERE ON
    Эта команда включает режим I3HERE. Любой INT 3,
    сгенерированный после этого, вызовет окно
    Soft-ICE.

     108


5.5 Сервисные Команды

Команды:
    A    -- Транслировать код
    S    -- Поиск данных
    F    -- Заполнить память данными
    M    -- Переместить данные
    C    -- Сравнить два блока данных

     109


                           A

A -- Транслировать код

Синтаксис:

    A [Адрес]

Комментарии:
Транслятор Soft-ICE позволяет вам транслировать команды непосредственно в
памяти. Транслятор поддерживает базисную систему команд 8086 с
расширениями для реального режима 80186 и 80286. Инструкции математического
сопроцессора и специфические для 80386 команды, регистры и режимы
адресации НЕ могут быть оттранслированы.

Команда A вызывает интерактивный транслятор Soft-ICE. В начале
каждой транслируемой строки отображается ее адрес. После того
как команда ассемблера набрана и нажат ВВОД, команды транслируются
в память по указанному адресу. Команды должны вводиться в стандартном
формате Intel. Для выхода из режима транслятора нажмите ВВОД в
пустой строке.

Если адресный интервал, в который вы транслируете команды, видим
в окне кода, команды будут изменятся интерактивно, по мере трансляции.

Транслятор Soft-ICE'а поддерживает стандартную мнемонику семейства 8086,
однако имеются некоторые специальные добавления:
   * Мнемокод DB используется для указания байтов данных
       непосредственно в памяти. Команда DB
       сопровождается списком байтов и/или строк в кавычках
       разделенных пробелами или запятыми.
   * Мнемокод RETF описывает дальний возврат.
   * WORD PTR и BYTE PTR используется для
       указания размера данных, если не присутствует аргумент-

     110

        регистр, например: MOV BYTE PTR
        ES:[ 1234],1.
    * Используйте, FAR и NEAR для явной трансляции дальних и
        ближних переходов и обращений. Если FAR или NEAR не
        указаны, то все переходы и обращения - ближние.
    * Операнды, описывающие ячейки памяти, должны
        помещаться в квадратные скобки, например: MOV AX,[1234].

Пример:
   A CS:1234
    Эта команда выводит приглашение для ввода команд ассемблера,
    затем транслирует их, начиная со смещения 1234H в
    текущий сегмент кода. Нажмите ВВОД в приглашении
    с адресом после ввода последней команды.


     111


                            S

S -- Поиск данных

Синтаксис:

   S адрес L длина список-данных
   список-данных -- список байтов или строк в кавычках, разделенных
                    запятыми или пробелами. Строка в кавычках
                    может начинаться с одинарной или
                    двойной кавычки.

   длина -- длина в байтах

Комментарии:
Команда S ищет в памяти последовательности байтов или символов,
совпадающих со списком данных. Поиск начинается с указанного адреса и
до смещения, равного указанной длине. Адреса каждого найденного
в диапазоне совпадения выводятся на экран.

Пример:
   S DS:SI+10 L CX 'Привет',12,34
    Эта команда ищет строку 'Привет' сопровождаемую
    байтами 12H и 34H, начиная со смещения SI+10 в
    текущем сегменте данных и заканчивая адресом через CX байт от начала.

     112


                           F

F -- Заполнить память данными

Синтаксис:

   F адрес L длина список-данных
   список-данных -- список байтов или строк в кавычках, разделенных
                    запятыми или пробелами. Строка в кавычках
                    может начинаться с одинарной или
                    двойной кавычки.

   длина -- длина в байтах

Комментарии:
Команда F заполняет память последовательностью байтов или символов,
определенных в списке-данных. Память заполняется, начиная с указанного
адреса и до смещения, равного указанной длине, повторяя список-данных
в случае необходимости.

 Пример:
    F 8000:0 L 100 'Тест'
    Эта команда заполняет память, начиная с 8000:0 на
    длину 100H байтов строкой 'Тест'. Строка 'Тест'
    повторяется, пока не достигнуто необходимое смещение.

     113


                         М

M -- Переместить данные

Синтаксис:

   М адрес-начала L длина конечный-адрес
   длина -- длина в байтах

Комментарии:
Команда M перемещает указанное число байтов из адреса-начала
в памяти в конечный-адрес в памяти.

Пример:
   М 1000:0 L 200 2000:0
   Эта команда перемещает 200H байтов из ячейки
   памяти 1000:0 в ячейку памяти 2000:0.

     114


                          C

C -- Сравнить два блока данных

Синтаксис:

   C адрес1 L длина адрес2
    длина -- длина в байтах

Комментарии:
Команда C сравнивает блок памяти, определенный адресом1 и
длиной с блоком памяти определенным адресом2 и длиной.
Когда байт из первого блока данных не соответствует байту из
второго блока данных, оба байта выводятся на экран вместе с их адресами.

Пример:
   C 5000:100 L 10 6000:100
    Эта команда сравнивает 10H байтов, начинающихся с
    ячейки памяти 5000:100 с 10H байтами, начинающимися
    с ячейки памяти 6000:100.

     115


5.6 Специализированные Отладочные Команды

Команды:
 SHOW     -- Выводит команды из буфера истории исполнения
 TRACE    -- Включает режим эмуляции пошагового исполнения
 XT       -- Одиночный шаг в режиме эмуляции трассировки
 XP       -- Программный шаг в режиме эмуляции трассировки
 XG       -- Переход по адресу в режиме эмуляции трассировки
 XRSET    -- Сброс буфера истории обратной трассировки
 VECS     -- Сохранение/восстановление/сравнение векторов прерываний
 SNAP     -- Запоминает содержимое блока памяти (snap shot)
 EMMMAP   -- Отображают карту распределения EMM

     116


         SHOW

SHOW -- Выводит команды из буфера истории исполнения

Синтаксис:

   SHOW [B | начало]
    B -- Указывает команде SHOW начать
                     вывод с самой старой команды
                     в буфере обратной трассировки.

   начало -- Смещение (в инструкциях) от
                     конца буфера (последней зафиксированной
                     команды) с которого надо начать вывод.

Комментарии:
Команда SHOW отображает команды из буфера истории обратной трассировки.
Если для команд доступен исходный текст, то дисплей находится в смешанном
режиме, в противном случае отображается только код.

SHOW позволяет просматривать буфер обратной трассировки при помощи клавиш
вверх, вниз, PageUp и PaqeDn. Для выхода из SHOW нужно нажать клавишу Esc.

Адресу каждой команды предшествует номер входа в буфер. Этот
номер показывает, как глубоко в буфере находится команда. Чем
больше номер, тем глубже вы в буфере.

Обратите внимание:
До вызова команды SHOW, команды должны регистрироваться при помощи диапазона
обратной трассировки. См. главу 9 для подробной информации о диапазонах.

     117

Подсказки:
Часто полезно иметь видимое окно кода с фактическим кодом
области, отображаемой из буфера обратной трассировки. При сравнении
фактического исполнения команд с кодом, отображаемыми переходами и обращениями
обычно возникает меньше путаницы.

Использование SHOW вместе с командой TRACE позволит вам рассматривать
команды в буфере обратной трассировки с двух различных точек зрения.

Пример:
  SHOW 40
   Этот пример выведет на экран команды из буфера обратной трассировки,
   начиная с 40-ой инструкции от конца буфера.

     118


          TRACE

TRACE -- Включает режим эмуляции пошагового исполнения

Синтаксис:

   TRACE [начало] | [OFF]
   начало -- Смещение (в инструкциях) от
                     конца буфера (последней зафиксированной
                     команды) с которого надо начать эмуляцию.

   OFF -- Выход из режима эмуляции трассировки.

Комментарии:
Команда TRACE позволяет вам повторно "проигрывать" команды из буфера
истории обратной трассировки команд, так же как они выполнялись в первый раз.
Для использования режима эмуляции трассировки вам необходимо иметь видимое
окно кода. После входа в режим эмуляции трассировки используйте команды XT, XP
и XG для трассировки команд из буфера.

Для выхода из режима эмуляции трассировки введите TRACE OFF.

TRACE без параметров сообщает включен режим эмуляции трассировки
или нет.

Обратите внимание:
До вызова команды TRACE, команды должны регистрироваться при помощи диапазона
обратной трассировки. См. главу 9 для подробной информации о диапазонах.

Подсказки:
Режим эмуляции трассировки наиболее полезен, когда видимо окно кода. Часто
полезно использовать TRACE вместе с командой SHOW. Это позволяет

     119

просматривать инструкции в буфере истории обратной трассировки одновременно
в двух различных формах.

Пример:
   TRACE 40
   Этот пример производит эмуляцию трассировки, начиная с 40-ой
   инструкции от последней зарегистрированной команды. Режим
   эмуляции трассировки будет активен, пока не будет
   введено TRACE OFF.

     120


               XT

XT -- Одиночный шаг в режиме эмуляции трассировки

Синтаксис:

   XT [R]
   R -- Одиночный шаг в обратном направлении.

Комментарии:
Команда XT пошагово проходит буфер истории обратной трассировки инструкций.
Эта команда действует подобно команде T для нормальной отладки. Заметьте
что в режиме эмуляции трассировки регистры не изменяются,
за исключением CS и IP.

Команда XT позволяет вам повторно выполнять команды из буфера истории
обратной трассировки.

Обратите внимание:
Для использования XT вы должны быть в режиме эмуляции трассировки. См. главу 9
и команду TRACE из этого раздела для подробной информации о диапазонах
обратной трассировки.

Подсказка:
Если вы используете XT часто, то подобно любой другой команде Soft-ICE она
может быть привязана к функциональной клавише.

Пример:
    XT
    Эта команда проходит одну команду в режиме
    эмуляции трассировки.

     121


                          XP

XP -- Программный шаг в режиме эмуляции трассировки

Синтаксис:

   XP

Комментарии:
Команда XP производит логический программный шаг в буфере истории обратной
трассировки инструкций. Эта команда действует подобно команде P для обычной
отладки. Заметьте, что в режиме эмуляции трассировки регистры не изменяются,
за исключением CS и IP.

Команда XP позволяет вам повторно выполнять команды из буфера истории
обратной трассировки.

Обратите внимание:
Для использования XP вы должны быть в режиме эмуляции трассировки. См. главу 9
и команду TRACE из этого раздела для подробной информации о диапазонах
обратной трассировки.

Подсказка:
Если вы используете XP часто, то подобно любой другой команде Soft-ICE она
может быть привязана к функциональной клавише.

Пример:
    XP
   Эта команда выполняет один программный шаг в режиме
    эмуляции трассировки.

     122


                    XG

XG -- Переход по адресу в режиме эмуляции трассировки

Синтаксис:

    X [R] адрес
    R -- Поиск адреса в обратном направлении.

    адрес -- Адрес, по которому надо перейти в буфере истории
                      обратной трассировки.

Комментарии:
Команда XG перемещает указатель команд на следующее упоминание
указанного адреса в буфере истории обратной трассировки. Если перед
адресом указан R, то указатель команды перемещается на предыдущее
упоминание указанного адреса в буфере обратной трассировки.

Адрес должен указывать на первый байт опкода команды.

XG аналогична команде G при нормальной отладке.

Обратите внимание:
Для использования XG вы должны быть в режиме эмуляции трассировки. См. главу 9
и команду TRACE из этого раздела для подробной информации о диапазонах
обратной трассировки.

Пример:
    XG 273:1030
    Эта команда перемещает указатель команд на
    следующее упоминание команды по адресу 273:1030.

     123


          XRSET

XRSET -- Сброс буфера истории обратной трассировки

Синтаксис:

   XRSET

Комментарии:
Команда XRSET сбрасывает буфер истории обратной трассировки. Эта команда
должна выполняться перед установкой диапазона обратной трассировки, если
в буфере обратной трассировки имеется нежелательная информация о командах.

Пример:
  XRSET
   Эта команда сбрасывает буфер обратной трассировки.


     124


           VECS

VECS -- Сохранение/восстановление/сравнение векторов прерываний

Синтаксис:

   VECS [C|S|R]
        C -- Сравнить текущую таблицу с сохраненной таблицей
        S -- Сохранить текущую таблицу прерываний в буфере
        R -- Восстановить таблицу прерываний из буфера

Комментарии:
Команда VECS позволяет вам сохранять и восстанавливать таблицу прерываний из
внутреннего буфера Soft-ICE. Также фактическая таблица может сравниваться с
сохраненной таблица с отображением различий.


Когда используется опция C, для сравнения текущей таблицы векторов прерываний
с сохраненной копией, вывод производится в следующем формате:

   адрес старый-вектор новый-вектор

Отображаются все измененные векторы.

Таблица векторов прерываний первоначально сохраняется, при загрузке Soft-ICE. Это
Она также автоматически сохраняется при загрузке программы LDR'ом. Хранится
только одна копия таблицы векторов прерываний, т.о. при каждом выполнении
VECS S, предыдущая копия таблицы прерываний перезаписывается.

Если параметры не указаны, на экран выводится вся таблица векторов
прерываний.

     125

Пример:
   VECS C
   Эта команда сравнивает фактическую таблицу векторов
   прерываний с предварительно сохраненной во
  внутреннем буфере векторов Soft-ICE.

     126


                    SNAP

SNAP -- Запоминает содержимое блока памяти (snap shot)

Синтаксис:

    SNAP [C|S|R] адрес1 адрес2
        C -- Сравнить буфер с адресным интервалом
        S -- Сохранить адресный интервал в буфере
        R -- Восстановить адресный интервал из буфера

Комментарии:
Команда SNAP запоминает содержимое блока памяти для последующего сравнения.
Опция S копирует блок памяти в буфер в дополнительной памяти (XMS).
Опция C отображает различия между буфером в дополнительной памяти и
фактической памятью, определенной адресным интервалом. Опция R копирует
буфер в дополнительной памяти в адресный интервал в стандартной памяти.

Когда используется опция C, для сравнения буфера с адресным интервалом,
вывод производится в следующем формате:

   адрес старые-данные новые-данные

Отображаются все измененные байты.

Обычно для опций C и R адрес необязателен. Если адрес не указан,
используется адрес, который был указан в последний раз при использовании
команды SNAP.


Примечания:
Для использования команды SNAP вы должны указать переключатель /TRA XXXX в
строке S-ICE.EXE в CONFIG.SYS.

     127

Команда SNAP сохраняет данные в буфере истории обратной трассировки. Если вы
используете обратную трассировку, у вас будет конфликт со SNAP. В силу своей
специфики, SNAP перезапишет информацию обратной трассировки, если вы выполните
SNAP S, когда история команд находится в буфере обратной трассировки. Наоборот,
если вы сохранили область при помощи SNAP, активация диапазона обратной
трассировки перезапишет буфер SNAP.

Пример:
   SNAP S 2000:0 4000:0
   Эта команда сохраняет блок данных с 2000:0 по
   4000:0 в буфере обратной трассировки Soft-ICE.

     128


        EMMMAP

EMMMAP -- Отображают карту распределения EMM

Синтаксис:

  EMMMAP

Комментарии:
Команда EMMMAP отображает все физические страницы, которые доступны для EMM
памяти и страницы, которые в настоящее время отображены.

Обратите внимание:
Для использования этой функции должна быть активирована возможность Soft-ICE
EMM. См. главу 8 для подробной информации о предоставлении возможности EMM.

Пример:
 EMMMAP
   Этот пример отображает текущее распределение EMM
   и следующей форме.
   Физ. страница | Сег. адрес | Дескриптор/Страница(логическая)
        00       і    D000    і       FFFF
        01       і    D400    і       0001/0000
        02       і    D800    і       0001/0001
        03       і    DC00    і       0001/0002
   В этом примере, физическая страница 0 размещена в D000 и
   не отображается. Физическая страница 1 размещена в D400 и
   имеет дескриптор 1, в нее отображается страница 0. Физическая страница 2
   размещена в D800 и имеет дескриптор 1, в нее отображается страница I.
   Физическая страница 3 размещена в DC00 и имеет дескриптор 1,
   в нее отображается страница 2.

     129



5.7 Команды Работы с окнами

Команды:
   WR     -- Переключает окно регистров
   WC     -- Переключает/устанавливает размер окна кода
   WD     -- Переключает/устанавливает размер окна данных
   EC     -- Войти/выйти из окна кода
   .      -- Найти местоположение текущей команды

   Soft-ICE может выводить окна трех типов:
   регистров, данных и кода. Любое из этих окон может быть
   активизировано или деактивировано в любое время. Окна данных
   и кода могут иметь переменный размер; окно регистров
   фиксировано в размере. Окна всегда остаются в фиксированном
   порядке. Начиная с верхней части экрана порядок следующий :
   окно регистров, окно данных, затем окно кода.

     130


                    WR

 WR -- Переключает окно регистров

Синтаксис:

 WR

Комментарии:
Команда визуализирует окно регистров, если оно в текущий момент невидимо. Если
окно регистров в текущий момент видимо, WR удаляет окно регистров.

Окно регистров отображает набор регистров 8086 и флаги процессора.

Функция, заданная по умолчанию: F2

     131


                          WC

WC -- Переключает/устанавливает размер окна кода

Синтаксис:

   WC [размер-окна]
   размер-окна -- десятичное число между единицей и 21.

Комментарии:
Если размер-окна не указан, эта команда переключает окно кода. Если
оно не было видимо, оно станет видимым, и если оно было видимо, оно
будет удалено.

Если указан размер-окна, окно кода будет изменено или, если оно
не было видимо, оно станет видимым с определенным размером.

Обратите внимание:
Если вы хотите переместить курсор в окно кода, используйте команду EC. См.
описание команды EC для более подробной информации.

Пример:
   WC 12
   Если окно кода не присутствует, то создается окно кода
   высотой 12 строк. Если окно кода в текущий момент - на
   экране, его высота изменяется на 12 строк.

     132


                    WD

 WD -- Переключает/устанавливает размер окна данных

Синтаксис:

     WD [размер-окна]
     размер-окна -- десятичное число между единицей и 21.

Комментарии:
Если размер-окна не указан, эта команда переключает окно данных. Если
оно не было видимо, оно станет видимым и если оно было видимо, оно
будет удалено.

Если указан размер-окна, окно кода будет изменено или, если оно
не было видимо, оно станет видимым с определенным размером.

 Пример:
 WD 1
    Если окно данных не присутствует, то создается окно
    данных высотой в одну строку. Если окно данных в текущий момент - на
    экране, его высота изменяется на одну строку.

     133


                    EC

EC -- Войти/выйти из окна кода

Синтаксис:

    EC

Комментарии:
Команда EC переключает расположение курсора между окном кода и
окном команд. Если курсор был в окне команд, он перемещается в
окно кода и если курсор был в окне кода, он перемещается в
окно команд.

Когда курсор находится в окне кода, становятся доступными несколько опций,
которые намного упрощают отладку. Опции:
    * Точки останова типа point-and-shoot
        Точки останова типа point-and-shoot устанавливаются
        командой BP. Если в команде BPX параметры не указаны,
        в ячейку памяти, на которую указывает курсор в окне
        кода, будет установлена точка останова на выполнение.
        Курсор должен быть в строке, которая
        содержит код (переключите окно кода в смешанный
        режим, если вы не уверены). Заданная по умолчанию
        функциональная клавиша для BPX - F9.

    * Исполнение до строки курсора
        Вы можете устанавливать временную точку останова в месте
        положения курсора выполнять команду HERE. Курсор должен
        находиться в строке, которая содержит код (переключите
        окно кода в смешанный режим, если вы не уверены). Заданная
        по умолчанию функциональная клавиша для HERE - F7.

     134

   * Прокрутка окна кода
       Окно кода может быть пролистано только когда
       курсор находится в окне кода. Клавиши прокрутки
       (стрелка "ВВЕРХ", стрелка "ВНИЗ", PageUp и
       PageDown) переопределяются, когда курсор - в
       окне кода. Когда курсор находится в окне
       кода, клавиши прокрутки делают следующее:
        ВВЕРХ -- Прокрутка окна кода вверх на одну строку
        ВНИЗ -- Прокрутка окна кода вниз на одну строку
        PageUp -- Прокрутка окна кода на один экран
        PageDn -- Прокрутка окна кода один экран

Обратите внимание:
Для того чтобы команда EC работала, Окно кода должно быть видимо.
Заданная по умолчанию функциональная клавиша: F6

     135


      .

. -- Найти местоположение текущей команды

Синтаксис:
 .

Комментарии:
Когда окно кода видимо, команда . делает видимой текущую строку
исходного текста или текущую команду.

     136


5.8 Команды Настройки Отладчика

Команды:
   PAUSE       -- Пауза после каждого экрана
   ALTKEY      -- Устанавливает альтернативную комбинацию клавиш для
                           вызова Soft-ICE
   FKEY        -- Отображает и редактирует назначение функциональных клавиш
   BASE        -- Устанавливает/отображает текущее основание системы счисления
   CTRL-P      -- Выводит сеанс на принтер
   Print-Screen -- Печать содержимого экрана
   PRN         -- Устанавливает порт для вывода на принтер

     137


                    PAUSE

PAUSE -- Пауза после каждого экрана

Синтаксис:

   PAUSE [ON | OFF]

Комментарии:
PAUSE управляет паузами экрана в конце каждой страницы. Если PAUSE включен, вы
должны нажать любую клавишу прежде, чем информация в окне будет прокручена.
Подсказка отображается в строке состояния в нижней части окна.

Если параметры не указаны, отображается текущее состояние PAUSE.

Значение по умолчанию - PAUSE ON.

Пример:
   PAUSE ON
   Эта команда указывает, что последующие команды,
   отображающие информацию в окне, будут ожидать, пока вы
   не нажмете клавишу, до прокрутки в окне новой информации.

     138


                    ALTKEY

ALTKEY -- Устанавливает альтернативную комбинацию клавиш для вызова Soft-ICE

Синтаксис:

     ALTKEY [ALTсимвол] | [CTRLсимвол] | [SYSREQ]
     символ -- любой символ (A - Z)

Комментарии:
Команда ALTKEY позволяет изменять комбинацию клавиш для вызова Soft-ICE.
Комбинация клавиш изменяется на CTRL + символ, ALT + символ или клавишу SysRq.

Иногда вы можете использовать программу, которая конфликтует с комбинацией
клавиш CTRL D, вызывающей окно Soft-ICE. Один из способов обойти эту возможную
проблему - использование команды ALTKEY для изменения комбинации клавиш.
Другой способ - добавить клавишу SHIFT к текущей комбинации. Soft-ICE
не отвечает на эту комбинацию клавиш и позволяет ей вызвать вашу программу.
Например, если резидентная программа, которую вы используете, вызывается
комбинацией клавиш CTRL D, попробуйте использовать комбинацию CTRL SHIFT D для
вызова вашей резидентной программы. На некоторых клавиатурах, для генерации
системного запроса вы должны одновременно нажать клавиши ALT и prtsc. Надо
действовать с осторожностью, чтобы случайно не был распечатан экран.

Если параметры не указаны, отображается текущее состояние комбинации клавиш.

Заданная по умолчанию комбинация клавиш - CTRL D.

     139

 Пример:
 ALTKEY ALT Z
   Эта команда указывает, что комбинация клавиш
   ALT Z будет теперь использоваться для вызова
   окна Soft-ICE.

     140


             FKEY

FKEY -- Отображает и редактирует назначение функциональных клавиш

Синтаксис:

   FKEY [название-функциональной-клавиши строка]
   название-функциональной-клавиши -- F1, F2 ... F12

   строка -- Строка состоит из любых допустимых для Soft-ICE
                    команд и специальных символов
                    ^ (каретка) и ; (точка с запятой). Знак ^,
                    помещается в строку, чтобы сделать
                    команду невидимой. Знак ; помещается в
                    строку, чтобы обозначить возврат каретки.

Комментарии:
Команда FKEY используется в командной строке для назначения функциональной
клавише строки команд. Функциональной клавише может быть назначена любая
строка команд, которая может быть напечатана в Soft-ICE.

Если параметры не указаны, отображаются текущие назначения функциональных
клавиш.

Для отмены назначения определенной функциональной клавиши, используйте команду
FKEY с параметрами: название-функциональной-клавиши с пустой строкой.

Функциональные клавиши могут также быть объявлены заранее в файле определений
S-ICE.DAT. Для подробной информации об объявления функциональных клавиш в
файле определений, обратитесь к разделу 6.4.

Использование символов возврата каретки в строке назначения функциональной
клавиши позволяет назначить функциональной клавише ряд команд. Возврат каретки
обозначается символом ; (точка с запятой).

     141

Если Вы помещаете знак ^ (shift 6) перед определением функциональной клавиши,
последующая команда будет невидима. Команда будет функционировать как обычно,
но вся информация, отображаемая в окне команд (включая сообщения об ошибках)
будет подавляться. Невидимый режим полезен, когда команда изменяет информацию
в окне (кода, регистров или данных) но вы не хотите помех в окне команд.

Когда функциональная клавиша сделана невидимой при помощи знака ^, она может
использоваться во время ввода других команд без воздействия на их выполнение.
Например, если вы используете заданное по умолчанию назначение для F2, вы
можете переключать окно регистров клавишей F2, даже если вы частично ввели
вашу следующую команду.

Обратите внимание:
У Soft-ICE теперь есть файл определений - S-ICE.DAT. Вы можете поместить
назначения функциональных клавиш в этот файл и функциональные клавиши будут
автоматически назначены, при загрузке Soft-ICE. Вот синтаксис для назначения
функциональных клавиш в файле конфигурации:

    название-функциональной-клавиши = "строка"

При назначении функциональной клавише строки команд в S-ICE.DAT, строка
должна быть заключена в двойные кавычки.

Примеры командной строки:
   FKEY F2 ^WR;
    Этот пример назначит команду переключения окна
    регистров клавише F2. Знак ^ делает функцию
    невидимой и знак ; завершает функцию возвратом
    каретки. Клавиша F2 активизирует или деактивирует
    окно регистров и даже может быть вызвана при вводе
    другой команды.

     142

    FKEY F1 "G CS:120; R; G CS:"
    Этот пример показывает, что одной функциональной клавише может
    быть назначено несколько команд и что могут быть назначены
    частичные команды для их завершения пользователем.
    После того, как эта команда введена, нажатие клавиши F1
    вызовет выполнение программы до достижения
    ячейки CS:120, вывод на экран регистров, затем начало
    выполнения команды G для ее завершения пользователем.

    FKEY F1 WD 3;D DS:100;
    Этот пример назначит ряд команд
    клавише F1. Функция видима и заканчивается
    возвратом каретки. Клавиша F1 изменит высоту окна
    данных на три строки и установит начало дампа в
    DS:100.
 Пример S-ICE.DAT:
    F1 = "WR;WD 2;WC 10;"
    Если эта строка помещена в S-ICE.DAT, при загрузке
    Soft-ICE эта будет строка назначена клавише F1. Нажатие
    F1 при работе в Soft-ICE переключит окно регистров,
    создаст окно данных высотой 2 строки и окно кода
    высотой 10. Для подробной информации относительно назначения
    определений функциональным клавишам в S-ICE.DAT, обратитесь
    к главе 6.

     143


           BASE

BASE -- Устанавливает/отображает текущее основание системы счисления

Синтаксис:

   BASE [10 | 16]

Комментарии:
Команда BASE устанавливает основание системы счисления в 10 или 16. Основание
10 ограничено в использовании в узком окне из-за ограничений ширины окна.
Также ограничивается количество информации, отображаемой в некоторых командах
в режиме полной ширины экрана.

Когда текущее основание системы счисления - 10, все числа и адреса, вводимые
и отображаемые Soft-ICE десятичными. Когда основание системы -
16, все числа и адреса, вводимых в Soft-ICE являются шестнадцатеричными,
за исключением:
    * Номеров строк исходного текста
    * Координаты экрана и размеры в команде WIN

Эти исключения всегда вводятся и отображаются как десятичные числа.

Заданное по умолчанию основание системы счисления - 16.

Пример:
   BASE 16
    Этот пример устанавливает текущее основание системы счисления в 16.

     144


                       CTRL-P

CTRL-P --- Выводит сеанс на принтер

Синтаксис:

  CTRL-P

Комментарии:
Когда нажаты клавиши CTRL и P, вся последующая информация, отображаемая в
окне команд, также посылается на принтер. Для отмены вывода сеанса на
принтер, повторно нажмите клавиши CTRL и P.

Когда вы посылаете много информации на принтер, используя CTRL-P, вы
может пожелать отменить команду PAUSE и позволить информации пролистываться
в окне без нажатия клавиши.

     145


             Print-Screen

Print-Screen - Печать содержимого экрана

Синтаксис:

   Print-Screen

Комментарии:
Нажатие клавиши print-screen производит дамп экрана на принтер. Вся
информация с экрана посылается на принтер.

Если вы хотите распечатать карту памяти или информацию помощи, обычно намного
быстрее использовать CTRL-P, чем Print-Screen. Это потому что Print-Screen
печатает все символы на экране, включая рамки.

     146


                       PRN

PRN --- Устанавливает порт для вывода на принтер

Синтаксис:

  PRN [LPTx | COMx]
  x -- десятичное число между 1 и 4.

Комментарии:
Команда PRN позволяет вам переслать вывод от команд CTRL-P и
Print-Screen в другой порт принтера.

Если параметры не указаны, PRN отображает текущий порт, назначенный
для принтера.

Пример:
  PRN COM 1
   Эта команда вызывает перевод вывода от команд
   CTRL-P и Print-Screen в порт COM 1.

     147


5.9 Команды Управления Экраном

Команды:
 FLASH         -- Восстанавливает экран при выполнении команд P и T
 FLICK         -- Снижение нежелательного мерцания экрана ("снега")
 WATCHV        -- Включает отслеживание видеорежимов
 RS            -- Восстанавливает экран программы
 CLS           -- Очищает окно
 ALTSCR        -- Изменяет экран на альтернативный
 WIN           -- Изменяет размер окна Soft-ICE

     148


                  FLASH

FLASH -- Восстанавливает экран при выполнении команд P и T

Синтаксис:

  FLASH [ON | OFF]

Комментарии:
Команда FLASH позволяет вам указывать, будет ли экран восстанавливаться
в течение любых команд трассировки или программных шагов. Если вы укажете, что
экран должен восстанавливаться, он восстанавливается за краткий период времени
пока выполняется команда P или T. Эта возможность необходима для отладки
участков кода, осуществляющих доступ к видеопамяти.

Если команда P выполняется для обращения или прерывания, экран всегда
будет восстанавливаться, потому что вызываемая подпрограмма может записывать
на экран.

Если параметры не указаны, отображается текущее состояние FLASH.

Значение по умолчанию - FLASH OFF.

Пример:
  FLASH ON
   Эта команда включает режим FLASH. Экран будет
   восстанавливаться в течение любых последующих команд P или T.


     149


           FLICK

FLICK -- Снижение нежелательного мерцания экрана ("снега")

Синтаксис:

   FLICK [ON | OFF]

Комментарии:
Некоторые типы видеоплат требуют ожидания горизонтального или вертикального
обратного хода перед выводом символов. Если запись в видеопамять сделана
произвольно, при отображении символов появится мерцание. Если
при использовании окна Soft-ICE на вашем экране происходит мерцание, вы
должны включить FLICK.


На некоторых платах EGA при выходе из Soft-ICE цвета будут восстановлены
некорректно. Это - проблема виртуализации видео EGA. Порт 3DA является
видеопортом для двух целей. Первая - опрос старыми программами CGA 3DA для
hsync и vsync. Это позволяет им избежать "снега" при выводе на некоторых
старых платах с контроллером CGA. Вторая - сброс регистра-защелки палитры на
платах EGA. В Soft-ICE есть алгоритм, позволяющий избежать необходимости
постоянно опрашивать этот порт, которая замедлила бы старые программы,
которые предназначены для CGA. Однако возможно случайное возникновение
обстоятельств, когда этот алгоритм не сработает. Если вы используете Soft-
ICE на экране EGA и вы заметили, что цвета восстанавливаются
некорректно, включите FLICK и Soft-ICE будет опрашивать порт 3DA, разрешая
проблему.

Когда включен режим FLICK, обновление экрана будет замедлено.

Если параметр не указаны, отображается текущее состояние FLICK.

Значение по умолчанию - FLICK OFF.

     150


Пример:
  FLICK ON
  Эта команда включает режим FLICK. Это заставляет
  Soft-ICE ожидать горизонтального или вертикального обратного хода
  перед выводом символов.

     151


        WATCHV

WATCHV -- Включает отслеживание видеорежимов

Синтаксис:

  WATCHV [ON | OFF]

Комментарии:
Команда WATCHV позволяет вам указать, как Soft-ICE должен отслеживать
видеопорты. Обычно, Soft-ICE отслеживает видео порты только после выполнения
команды INT 10, которая переключает адаптер в графический видеорежим.
Некоторые программы не используют INT 10 для переключения режимов. В этих
случаях, если WATCHV выключен, у Soft-ICE могут быть проблемы с корректным
сохранением и восстановлением экрана. Включение WATCHV заставит Soft-ICE
постоянно отслеживать видео порты.

Включите WATCHV, если вы заметите, что Soft-ICE некорректно обрабатывает ваш
экран, или если некорректно восстанавливается курсор. Активизация WATCHV
может воздействовать на эффективность в некоторых видеорежимах.

Если параметры не указаны, отображается текущее состояние WATCHV.

Значение по умолчанию - WATCHV OFF.


Пример:
   WATCHV ON
   Эта команда включает режим WATCHV. Это заставит
   Soft-ICE отслеживать дополнительные видео порты в
   целях виртуализации.

     152


                         RS

RS -- Восстанавливает экран программы

Синтаксис:

    RS

Комментарии:
Команда RS позволяет вам временно восстанавливать экран программы.
Окно Soft-ICE исчезает, пока не будет нажата любая клавиша.

Эта возможность полезна при отладке графических программ, часто модифицирующих
экран. При вызове Soft-ICE, он возвращается в текстовый режим.
Использование команды RS временно восстанавливает графический экран.

Пример:
    RS

     153


            CLS

CLS -- Очищает окно

Синтаксис:

  CLS

Комментарии:
Команда CLS очищает окно Soft-ICE и перемещает подсказку и
курсор в левый верхний угол окна.

Пример:
  CLS

     154


                  ALTSCR

ALTSCR -- Изменяет экран на альтернативный

Синтаксис:

  ALTSCR [ON | OFF]


Комментарии:
Команда ALTSCR позволяет вам переназначить вывод Soft-ICE из вашего экрана,
заданного по умолчанию, на альтернативный экран. Эта возможность полезна,
например, когда вы хотите отлаживать графическую программу, без необходимости
переключения между окном Soft-ICE и графическим экраном.

ALTSCR требует от системы двух подсоединенных мониторов. Альтернативный
монитор должен быть в текстовом режиме, который является заданным по умолчанию
для мониторов.

Значение по умолчанию - ALTSCR OFF.

Пример:
   ALTSCR ON
   Эта команда переназначает экранный вывод на альтернативный монитор.

     155


               WIN

WIN -- Изменяет размер окна Soft-ICE

Синтаксис:

   WIN [N | W] [строка-начала длина [столбец-начала]]
   N -- Когда задан N, окно будет
                  установлено в узкий режим: 46
                  символов.

   W -- Когда задан W, окно будет
                  установлено в полноэкранный режим.

   строка-начала -- Число от 0 до 17 указывающий строку
                  где начинается отображение окна.

   длина -- Число от 8 до 25 указывающее, желаемую
                  высоту окна в строках.

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

Комментарии:
Команда WIN позволяет вам изменять ширину и высоту окна
Soft-ICE на экране.

Если параметры не указаны, эта команда переключает окно между
широким и узким режимом вывода на экран.

Если в команде WIN указан только параметр N или W,
размер окна будет изменен на запрошенную ширину при текущей высоте.

     156

Если число строк плюс начальный номер строки больше чем 25,
окно растягивается до нижней части экрана.

Значение по умолчанию - узкий режим WIN.

Примеры:
   WIN N 4 9 30
   Эта команда заставляет окно выводиться со
   строки 4 и столбца 30 и быть 9 строк высоты и 46
   символов ширины.
   WIN
   Эта команда переключает ширину окна из
   текущего состояния (широкое или узкое) в противоположное
   состояние.

   WIN W 10 8
   Эта команда заставляет окно начинаться в
   строке 10, быть 8 строк высоты и иметь ширину
   экрана.

     157


5.10 Команды Работы с Символами и Строками Исходного Текста

 Команды:
   SYM        -- Вывести/установить символ
   SYMLOC     -- Переместить базу символа
   SRC        -- Переключает между исходным текстом, смешанным режимом и кодом
   FILE       -- Изменить/вывести текущий исходный текст
   SS         -- Найти строку в текущем файле с исходным текстом

     158


                         SYM

SYM -- Вывести/установить символ

Синтаксис:

   SYM [имя-символа [значение]]
   имя-символа -- Допустимое имя символа. Имя символа
                   может заканчиваться знаком * (звездочкой).
                   Это позволяет искать, если известна только
                   первая часть имени символа.
                   Знак , (запятая) может использоваться
                   как знак-маска вместо
                   знака в имени символа.

    значение -- Это - значение типа СЛОВО, которое используется если вы
                   хотите присвоить символу определенное значение.

Комментарии:
Команда SYM позволяет отображать и устанавливать символы. Если SYM
введена без параметров, отображаются все символы. Значение каждого
символа отображается рядом с именем символа.

Если имя символа указано без значения, то отображаются имя символа
и его значение. Если имя символа не было найдено, ничего не выводится.

Команда SYM часто полезна для нахождения имени символа, когда помните
только часть имени. Для поиска символов доступны два метода поиска по
маске. Если имя символа заканчивается знаком *, то выводятся все символы,
которые совпадают с фактическими буквами, указанными до знака *,
независимо от завершающих букв. Если знак , используется вместо
определенной буквы в имени символа, то этот знак является символом-
маской.

Если указано значение, всем символам, соответствующим имени-символа,
присваивается указанное значение. Все символы имеют значения типа СЛОВО.


     159

Примеры:
   SYM FOO*
   Отображаются все символы, которые начинаются с FOO.
   SYM FOO* 6000
   Всем символам, которые начинаются с FOO, присваивается значение
   6000.

     160


          SYMLOC

SYMLOC -- Переместить базу символа

Синтаксис:

   SYMLOC адрес-сегмента

Комментарии:
Команда SYMLOC перемещает сегментные компоненты всех символов
относительно указанного адреса-сегмента. Эта функция необходима при
отладке загружаемых драйверов устройств или других программ, которые не могут
быть непосредственно загружены LDR.EXE.

При настройке для загружаемого драйвера устройства, используйте значение базы
адреса драйвера, найденного в команде MAP. При настройке для
.EXE-программы, значение должно быть на 10H больше чем найденная база в
команде MAP. При настройке для .COM-программы, используйте адрес базового
сегмента, найденного в команде MAP.

Команда MAP отобразит, по крайней мере, два входа для каждой программы.
Первый - обычно среда, а второй - обычно
сама программа. Базовый адрес программы - значение перемещения.

Пример:
    SYMLOC 1244 + 10
    Это переместит все сегменты в таблице идентификаторов
    относительно 1244. + 10 используется, чтобы переместить TSR
    бывший первоначально .EXE-файлом. Если это - .COM-файл
    + 10 не обязательно.

     161


           SRC

SRC -- Переключает между исходным текстом, смешанным режимом и кодом

Синтаксис:

    SRC [?]

Комментарии:
Команда SRC переключает между режимом исходного текста, смешанным режимом и
режимом кода в окне кода.

Если введено SRC ?, отображается текущее состояние.

Пример:
   SRC
   Эта команда изменяет текущий режим окна кода.
   Если режим был режимом исходного текста, он становится смешанным.
   Если режим был смешанным, он становится режимом кода. Если режим
   был режимом кода, он становится режимом исходного текста.

Функциональная клавиша по умолчанию: F3

     162


                           FILE

FILE -- Изменить/вывести текущий исходный текст

Синтаксис:

   FILE [имя файла]

Комментарии:
Если имя файла указано, этот файл становится текущим файлом и
начало файла выводится в окне кода. Если имя не указано, выводится
имя текущего файла (если он есть) с исходным текстом.

Команда FILE часто полезна при установке точки останова в строке, которая
не ассоциирована ни с одним публичным символом. Используйте FILE, для вызова
желаемого файла в окно кода, используйте команду SS для поиска определенной
строки, переместите в нее курсор и введите BPX для установки точки останова.

Обратите внимание:
Для команды FILE доступны только файлы с исходным текстом, загруженные в
дополнительную память (XMS) программой LDR.EXE.

Пример:
   FILE MAIN.C
   Если MAIN.C был загружен LDR.EXE, эта
   команда выводит его в окно кода, начиная со
   строки 1.

     163


                           SS

SS -- Найти строку в текущем файле с исходным текстом

Синтаксис:

    SS [номер-строки] ['строка']
    номер-строки -- десятичное число

    строка -- символьная строка, заключенная в кавычки.
                     Кавычки могут быть как одиночными так
                     и двойными.

Комментарии:
Команда SS ищет в текущем файле с исходным текстом указанную
символьную подстроку. Если имеется соответствие, строка, в которой была
найдена подстрока будет выведена как верхняя строка в окне кода.

Поиск начинается с указанного номера строки. Если номер строки не
указан, поиск начинается с верхней строки, отображаемой в окне кода.

Если параметры не указаны, продолжается поиск предыдущей
указанной строки.

Обратите внимание:
Окно кода должно быть видимо и быть в режиме исходного текста до использования
команды SS.

Пример:
    SS 1 'if (i = = 3)'
    В текущем файле с исходным текстом ищется, начиная со строки 1,
    подстрока 'if (i = = 3)'. Строка, содержащая следующее
    совпадение с подстрокой, становится верхней отображаемой строкой
    в окне кода.

     164


~~\ Перевел Сергей Середа, 1998, Кишинев 24-71-96, /~~
~~\ e-mail: serge_sereda@hotmail.com /~~


[   ВЕРНУТЬСЯ К ОГЛАВЛЕНИЮ   ]