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



Symdeb: символьный отладчик
                           4.1. Общие сведения.
               
               
               
               При  помощи  символьного  отладчика  SYMDEB могут быть
         выполнены следующие функции:
               1. Просмотр и исполнение кода программы.
               2. Внесение в тело  программы  точек  выхода,  которые
                  останавливают исполнение программы.
               3. Проверка и изменение в памяти значений переменных.
               4. Ассемблирование и реассемблирование кода.
               5. Отладка  программ,  использующих  соглашения языков
                  MICROSOFT  об  эмуляции  арифметики   с   плавающей
                  точкой.  
               
               Имеется   возможность   временного   выхода  в  DOS  с
         последующим возвратом в SYMDEB и сохранением его состояния.
               SYMDEB имеет несколько  способов  адресации  данных  и
         инструкций  в памяти. К различным фрагментам программы можно
         получить доступ через адреса, глобальные символы или  номера
         строк,  что  упрощает  размещение  и  отладку  специфических
         участков кода.
               Программы на языках C, PASCAL  и  FORTRAN  могут  быть
         отлажены  как  на  уровне  исходных  файлов, так и на уровне
         исполнительного  кода.  При   этом   пользователю   доступны
         исходные предложения, реассемблированный машинный код или их
         комбинация в зависимости от режима работы SYMDEB.
               
               
               
               
               
                     4.2. Подготовка символьной отладки.
               
               
               
               Сущность символьной отладки заключается в том,  что  в
         процессе  отладки программы имеется возможность ссылаться на
         элементы  исходной  программы  (очевидно,  что   для   этого
         исходный файл должен быть доступен SYMDEB). 
               SYMDEB  является сильным отладочным средством даже без
         своих  возможностей  символьной  отладки, однако, при этом в
         значительной степени теряется наглядность работы, что  часто
         существенно  усложняет  отладку.  С  другой стороны, заметно

                                     - 26 -
         
         
         упрощается  процесс  подготовки  к  отладке,  особенно   для
         программ на языке ассемблера. 
               Для  символьной  отладки  при помощи SYMDEB необходимо
         предварительно  сформировать  специальный  символьный  файл,
         куда    должна   быть   занесена   информация,   позволяющая
         "привязать" элементы исходной программы (переменные,  метки,
         номера   строк   и  т.п.)  к  относительным  адресам  внутри
         программных сегментов на уровне исполнительного кода.
               Необходимо  помнить,  что  все  имена,  участвующие  в
         символьной   отладке,  должны   быть  объявлены  (средствами
         конкретного  языка)  как  общие, т.е. должны быть доступными
         программе LINK при согласовании внешних ссылок. 
               
               
               
               
               
               
               4.2.1. Исходная информация для символьной отладки. 
               
               
               
               Этапы  формирования  символьного   файла   существенно
         зависят от того,  каким транслятором обрабатывалась исходная
         программа.  Дело  в  том,  что  некоторые   компиляторы   не
         обеспечивают  информацию  о номерах строк исходного файла, и
         для такой программы допустима лишь  ограниченная  символьная
         отладка  (без  адресации  по номерам строк). Кроме того, при
         работе с макроассемблерами имеется целый ряд характерных для
         языков  типа  ассемблера  особенностей,  вносящих  в процесс
         отладки  определенную  специфику.  Сущность  этой  специфики
         станет понятной при ознакомлении с командами SYMDEB.
               По  указанным  причинам при работе с SYMDEB и особенно
         при подготовке символьной отладки следует всегда  учитывать,
         каким компилятором обрабатывалась исходная программа.
               SYMDEB совместим со следующими компиляторами:
               - MICROSOFT FORTRAN версии 3.0 и выше
               - MICROSOFT PASCAL версии 3.0 и выше
               - MICROSOFT C версии 2.0 и выше
               - MICROSOFT макроассемблер версии 1.0 и выше
               - MICROSOFT BASIC COMPILER версии 1.0 и выше
               - MICROSOFT BUSINESS BASIC COMPILER версии 1.0 и выше
               - IBM PC FORTRAN версии 2.0 и выше
               - IBM PC PASCAL версии 2.0 и выше
               - IBM PC макроассемблер версии 1.0 и выше
               - IBM PC BASIC COMPILER версии 1.0 и выше
               
               Из  них лишь следующие компиляторы поддерживают работу
         SYMDEB на уровне номеров строк исходного файла:
               - MICROSOFT FORTRAN версии 3.0 и выше
               - MICROSOFT PASCAL версии 3.0 и выше
               - MICROSOFT C версии 2.0 и выше
               - IBM PC FORTRAN версии 2.0 и выше
               - IBM PC PASCAL версии 2.0 и выше
               

                                     - 27 -
         
         
               Конечной целью подготовки символьной отладки  является
         создание    символьного    файла.   В   общем   случае   это
         осуществляется    путем    обработки    исходной   программы
         соответствующим    компилятором    и   программой   LINK   и
         формирования  на  основе  полученной  информации  собственно
         символьного файла при помощи программы MAPSYM (эта программа
         описана в п.4.2.2).
               Для   создания   символьного   файла   при   работе  с
         макроассемблерами необходимо выполнить следующие шаги:
               1. Символы,   которые   будут   использованы   SYMDEB,
                  объявить  как общие. Среди этих символов могут быть
                  имена процедур, переменных и меток. Имена сегментов
                  и  групп  не  могут  быть  объявлены общими, но они
                  автоматически включаются LINK в  MAP-файл  и  могут
                  быть  использованы  при отладке. Пользователь может
                  объявить фиктивные метки, которые  в  программе  не
                  используются,  но могут пригодиться при расстановке
                  точек выхода.
               2. Ассемблировать исходный файл макроассемблером.
               3. Обработать  полученный  объектный  файл  программой
                  LINK с опцией /MAP и получить EXE- и MAP-файлы.
               4. Использовать MAPSYM для создания символьного файла.
                  
               Для  создания  символьного  файла при работе с другими
         совместимыми с SYMDEB компиляторами (кроме макроассемблеров)
         необходимо выполнить следующие шаги:
               1. Компилировать исходный файл. При этом для упрощения
                  отладки  желательно  не  использовать  имеющиеся  в
                  компиляторе средства оптимизации. При необходимости
                  (и  возможности)  следует  обеспечить   наличие   в
                  объектном файле информации о номерах строк исходной
                  программы.
               2. Полученный  объектный  файл  обработать  программой
                  LINK  с  опциями /MAP и, если нужно, /LINENUMBERS и
                  получить EXE- и MAP-файлы.
               3. Использовать MAPSYM для создания символьного файла. 
               4. Запустить SYMDEB для символьной отладки (п.4.3.1).
               5. Использовать  команду  SYMDEB  Go  (G) для  запуска
                  тестируемой  программы  с  первой   процедуры   или
                  функции.  Это обеспечивается специальной программой
                  запуска  из  библиотеки  программ  данного   языка.
                  Обычно   пользователю  не  нужна  трассировка  этой
                  программы, и он желает начинать отладку  с  момента
                  начала работы своей программы. В C-программе первая
                  выполняемая   функция   всегда   называется   _main
                  (компилятор   C   добавляет   символ   _   к  имени
                  процедуры main),  в  FORTRAN-программе  -  main,  в
                  PASCAL-программе  -  первая  процедура  в  исходном
                  файле).
                  
                  
                  
                  
                  
                  

                                     - 28 -
         
         
               
                  
            4.2.2. Формирование символьного файла при помощи MAPSYM.
                  
                  
                  
               
                  
                Программа  MAPSYM  предназначена  для  преобразования
         информации  из  MAP-файла,  сформированного  LINK,  в форму,
         понятную SYMDEB. Создаваемый символьный файл может содержать
         до 10000 символов для каждого сегмента и столько  сегментов,
         сколько допустимо с точки зрения машинной памяти.
                Запуск   MAPSYM  обеспечивается  введением  следующей
         командной строки:
               
         MAPSYM [/L | -L]<имя MAP-файла>
               
               Имя MAP-файла может содержать спецификацию пути поиска
         в структуре оглавления, если это необходимо. Если не указано
         расширение имени, предполагается MAP.
               Задание  единственной  опции  /L  (или  -L)  позволяет
         получить на экране дисплея информацию о преобразовании, куда
         входят  имена  определенных  в программе групп, адрес начала
         программы,  число  сегментов  и  число  символов  в   каждом
         сегменте.
               Символьный  файл  имеет  базовое  имя,  совпадающее  с
         базовым   именем   MAP-файла,  и  расширение  SYM  и  всегда
         создается в текущем подоглавлении.
               
               
               
               
               
               
               
                            4.3. Запуск SYMDEB.
               
               
               
               Запуск   SYMDEB   обеспечивается  введением  следующей
         командной строки:
               
         SYMDEB [<опции>][<символьные файлы>][<исполнительный файл>]
         [<аргументы>]
               
               Опции SYMDEB описаны в п.4.4.
               В  некоторых  случаях  (например,  при   использовании
         оверлея  или  при  работе  с драйверами) может потребоваться
         несколько символьных файлов.  Все  они  в  командной  строке
         должны  быть специфицированы до имени исполнительного файла,
         т.к.  имена,  стоящие  после  имени  исполнительного   файла
         считаются аргументами.
               Исполнительным  файлом   может   быть   двоичный   или
         EXE-файл, содержащий тестируемую программу. SYMDEB загружает

                                     - 29 -
         
         
         этот файл в память. 
               Аргументы,  если  они  указаны,  передаются  SYMDEB  в
         заголовок   тестируемой   программы   в  точности,  как  они
         специфицированы, и могут быть использованы  этой  программой
         как параметры.
               Стартовав,  SYMDEB  выдает  сообщение об этом и символ
         - , после которого можно вводить команды SYMDEB.
               
               
               
               
               
               
               
                 4.3.1. Запуск SYMDEB для символьной отладки.
               
               
               
               При  использовании  символьной  отладки  в   командной
         строке  запуска SYMDEB должен быть специфицирован символьный
         файл.
               При загрузке нескольких символьных файлов сразу  будет
         открыт только один из них. Если  один  из  специфицированных
         символьных  файлов  имеет базовое имя, совпадающее с базовым
         именем исполнительного файла, открывается именно  он,  иначе
         будет открыт первый из указанных символьных файлов. Во время
         сеанса SYMDEB для  открытия  конкретного  файла  может  быть
         использована  команда  XO.  Так  как одновременно может быть
         открыт только один  символьный  файл,  предыдущий  файл  при
         выполнении команды XO закрывается. 
               Исполнительный  файл  может  быть  специфицирован  при
         загрузке  символов.  Символы  могут   быть   загружены   без
         исполнительного  файла  (это может потребоваться для отладки
         резидентной  программы).  Если  возникнет  необходимость   в
         загрузке исполнительного файла позже в текущем сеансе, могут
         быть использованы команды N или L.
               Не  следует  переименовывать  символьные  файлы,  т.к.
         тогда при загрузке они будут иметь неверные адреса.
               
               
               
               
               
               4.3.2. Запуск SYMDEB только с исполнительным файлом.

               
               
               Если пользователь не нуждается в символьном файле  или
         не  имеет  исходного  файла  программы,  в  командной строке
         запуска SYMDEB он может опустить имя символьного файла.
               SYMDEB будет загружать исполнительные  файлы,  имеющие
         расширения имен EXE, BIN, HEX или COM.
               Всякий  раз  при загрузке исполнительного файла SYMDEB
         формирует  256-байтный  заголовок  в   сегменте   памяти   с
         наименьшим  возможным  адресом  и  копирует содержимое файла

                                     - 30 -
         
         
         непосредственно  после  заголовка.  SYMDEB  помещает  размер
         программы  в  байтах  в пару регистров BX:CX и устанавливает
         значения  всех  остальных   регистров   в   соответствии   с
         содержимым файла. 
               Для  EXE-  и  HEX-файлов  заголовок при загрузке будет
         разорван на части. Поэтому размер программы в этом случае не
         соответствует  размеру файла, как это имеет место для COM- и
         BIN-файлов.
               
               
               
               
                      4.3.3. Запуск SYMDEB без файлов.
               
               
               
               Если в  командной  строке  запуска  не  указаны  имена
         файлов,  SYMDEB  создает  заголовок  программы, но ничего не
         загружает.  Для  продолжения   работы   пользователь   может
         использовать   команды   ассемблирования   (A),  ввода  (E),
         установки имени (N) или загрузки (L).
               При запуске без файлов SYMDEB  перед  началом  отладки
         очищает  флаги,  в  регистр  IP  загружает  значение  0100h,
         устанавливает регистры сегментов на "дно" свободной памяти и
         обнуляет остальные регистры.
               
               
               
               
               
                            4.4. Опции SYMDEB.
               
               
               Опции  SYMDEB обозначаются предшествующими символами /
         или  -  и могут кодироваться как заглавными, так и строчными
         буквами. В командной строке запуска SYMDEB они располагаются
         перед именем исполнительного файла. 
               Имена файлов,  содержащие  символ   - ,  во  избежении
         путаницы дожны быть изменены.
               Описание опций SYMDEB приведено ниже.
               
         /IBM (или I) - Установить совместимость с IBM. При работе на
                        не  IBM-машине  эта опция позволяет учитывать
                        некоторые    особенности    аппаратуры    IBM
                        (контроллер  прерываний  8259,  дисплей IBM и
                        другие  особенности  BIOS).  При  работе   на
                        IBM-машине   эти   особенности   распознаются
                        автоматически.
                        
         /K           - Разрешение интерактивного  выхода  по  ключу.
                        При  задании  этой  опции клавиша SCROLL-LOCK
                        (BREAK) программируется таким образом, что ее
                        нажатие  останавливает  исполнение программы.
                        Это может понадобиться, например, для  выхода

                                     - 31 -
         
         
                        из  бесконечного  цикла.  Интерактивный  ключ
                        работает примерно также, как ключ  прерывания
                        от  аппаратуры, но менее надежно. В некоторых
                        ситуациях  (например,   когда   замаскированы
                        прерывания) он не срабатывает. Если программа
                        ожидает ввода, предпочтительней  использовать
                        CONTROL-C,  чем  BREAK.  В IBM PC AT в тех же
                        целях, но  даже  без  опции  /K,  может  быть
                        использован ключ SYS REQ.
                        
         /N           - Разрешение     выхода    по    немаскируемому
                        прерыванию.  Для  работы   с   немаскируемыми
                        прерываниями  вычислительная  система  должна
                        иметь соответствующее аппаратное обеспечение.
                        Опцию  /N  можно  использовать  со следующими
                        продуктами:
                          - специальная утилита отладки фирмы IBM
                          - зонд математического обеспечения фирмы
                            ATRON
                        При использовании опции /N  SYMDEB  требуется
                        аппаратура,  поставляемая с этими продуктами.
                        Дополнительного  математического  обеспечения
                        не  требуется.  При  использовании  одного из
                        этих продуктов в системе,  отличной  от  IBM,
                        для  обеспечения  выхода  нужно  использовать
                        опцию /N.  Но  эту  опцию  нельзя  кодировать
                        при  работе  на IBM PC. Использование системы
                        выхода    по    немаскируемому     прерыванию
                        предпочтительней   интерактивного  выхода  по
                        ключу,   т.к.   не   зависит   от   состояний
                        прерываний и других условий.
                        
         /S           - Разрешение  смены экрана. Эта опция позволяет
                        разделить экраны: один для отладчика,  другой
                        -  для  отлаживаемой  программы.  Это удобно,
                        например, при отладке  графических  программ,
                        но требует дополнительно 32К памяти. Опция /S
                        работает только на  IBM-машинах  и  некоторых
                        совместимых с ними компьютерах. При работе на
                        совместимых компьютерах в этом случае  должна
                        быть  специфицирована  также  и  опция  /IBM.
                        Опция  /S  не  может  быть   использована   с
                        графикой, требующей более 32К памяти.
                        
         /"команды"   - Выполнить серию команд SYMDEB. Команды должны
                        разделяться символом  ;  и  выполняются после
                        загрузки  файлов,  но  перед  их исполнением.
                        Этой  опцией  могут  быть,  например,  заданы
                        команды,  выполняемые в начале каждого сеанса
                        SYMDEB.
                        
                        
                        
                        
                        

                                     - 32 -
         
         
               
               
               
                        
                               4.5. Команды SYMDEB.
                        
               
                        
                        
               При помощи команд SYMDEB реализуется алгоритм отладки,
         а также обеспечивается выполнение основных функций SYMDEB. 
               Команды  SYMDEB  вводятся  в  диалоговом  режиме после
         приглашающего  символа  -  .  Группа   команд   может   быть
         выполнена до начала отладки как показано в п.4.4.
               Введенную  команду  SYMDEB  можно  отменить   нажатием
         клавиш  CONTROL-C  или  задержать нажатием клавиш CONTROL-S.
         Если отлаживаемая программа обратилась к вводу/выводу, этими
         клавишами  можно отменить или задержать введенную команду G.
         Если программа не обратилась к вводу/выводу,  остановить  ее
         выполнение  можно  только  соответствующими  клавишами, если
         были заданы опции /K или /N (п.4.4).
               Некоторые команды имеют параметры, которыми могут быть
         числа, символы или выражения.  Параметры, если их несколько,
         разделяются   запятыми.   Между   именем  команды  и  первым
         параметром пробела не требуется, исключая те случаи, где это
         оговорено особо.
               Ниже приведено описание способов кодирования различных
         типов параметров в командах SYMDEB.
               1.  Символы  могут  представлять  регистр,  абсолютное
         значение,  адрес сегмента или смещение сегмента и состоят из
         одного или более символов, включая  _ , ? , @ и  $ .  Первым
         символом   должна   быть  буква.  Все  символы  должны  быть
         определены в символьном  файле.  SYMDEB  не  чувствителен  к
         смене  регистра. При совпадении символов с именами регистров
         последние имеют больший приоритет.
               2. Числа представляются в виде:
                    <число>Y - двоичное
                    <число>O - 8-ричное
                    <число>Q - 8-ричное
                    <число>T - десятичное
                    <число>H - 16-ричное
         Допустимо  кодирование  ключевых  символов Y, O, Q, T и H на
         регистре строчных букв. При распознавании чисел максимальный
         приоритет имеют 16-ричные числа.
               3. Адреса представляются в виде:
                    <сегмент>:<смещение>
         <Сегмент> и <смещение> могут быть числами (представимыми как
         16-разрядные),  именами  регистров  или  символами.   Многие
         команды имеют умалчиваемые имена регистров (DS или CS).
               4. В качестве смещения могут быть указаны границы:
                    <начальный адрес> <конечный адрес>
         Если   <конечный   адрес>  опущен,  предполагается  значение
         <начальный адрес>+128.
               5. В качестве смещения может быть задан счетчик:
                    <начальный адрес> L <число объектов>

                                     - 33 -
         
         
         Размер объекта (байт, слово, инструкция и т.д.) определяется
         использующей эту конструкцию командой.
               6.   Номер   линии   представляет   собой   комбинацию
         десятичных  чисел,  имен  файлов  и  символов,  определяющих
         уникальную  линию  исходного  текста  программы. Номер линии
         может быть задан в трех различных формах:
                    .+<число> | - <число>
                    .[<имя файла>:]<число>
                    .<символ>[+<число> | -<число>]
         Первая форма определяет  смещение  (в  линиях)  относительно
         текущей  линии  исходного  текста.  Вторая  форма отображает
         абсолютный номер линии в файле с указанным именем. Если  имя
         файла  опущено,  предполагается  текущий  файл, определяемый
         текущими значениями регистров  CS  и  IP.  В  третьей  форме
         <символ>  может  быть инструкцией или меткой процедуры. Если
         задано  <число>,   оно   является   смещением   (в   линиях)
         искомой   линии   относительно   линии,   идентифицированной
         указанным символом.
               7. Строки являются набором значений  в  коде  ASCII  и
         могут быть заданы в двух форматах:
                    \&'<символы>'
                    "<символы>"
         Если  в  строке  присутствуют  символы  ' или " , их следует
         кодировать дважды.
               8. Выражение представляет собой комбинацию  параметров
         и операторов, которая преобразуется в 8-, 16- или 32-битовое
         значение.  Могут  использоваться  скобки.  Унарные  адресные
         операторы подразумевают регистр DS как умалчиваемую адресную
         базу (сегмент). 
               Ниже приведены унарные операторы (в  порядке  убывания
         приоритетов):
                    +
                    -
                    NOT   - дополнение операнда до 1
                    SEG   - адрес сегмента операнда
                    OFF   - смещение операнда
                    BY    - младший байт из указанного адреса
                    WO    - младшее слово из указанного адреса
                    DW    - двойное слово из указанного адреса
                    POI   - указатель из указанного адреса (как DW)
                    PORT  - 1 байт из указанного порта
                    WPORT - слово из указанного порта
               Ниже  приведены бинарные операторы (в порядке убывания
         приоритетов):
                    *
                    /   - деление нацело
                    MOD - modulus
                    :   - переключение сегмента
                    +
                    -
                    AND - побитовое И
                    XOR - побитовое исключающее ИЛИ
                    OR  - побитовое И
               
               

                                     - 34 -
         
         
               
               
               
               
               
                       4.5.1. Команда ассемблирования.
               
               
               
               Синтаксис:
               
               A[<адрес>]
               
               Команда    ассемблирует    мнемонические    инструкции
         семейства  процессоров 8086 (8086, 8087, 8088, 80186, 80287,
         80286  -  незащищенные)  и  помещает   полученный   код   по
         указанному  адресу.  Если  адрес  не указан, он определяется
         содержимым регистров CS и IP.
               При введении  команды  A  выдается  текущий  адрес,  и
         SYMDEB  ожидает  введения  новых  инструкций,  которые могут
         кодироваться   строчными   или   заглавными   буквами    или
         вперемешку. Инструкции ассемблируются по одной.
               Ввод каждой  инструкции  отмечается  нажатием  клавиши
         ENTER.  SYMDEB ассемблирует  последнюю  введенную инструкцию
         и выдает новый адрес.  Конец  ввода  инструкций обозначается
         нажатием ENTER без вводимых символов.
               Если  введенная  инструкция  содержит  ошибку, об этом
         выдается сообщение, и текущий адрес не изменяется.
               При   использовании  команды  A  необходимо  соблюдать
         следующие правила:
               1. Дальний возврат обеспечивается мнемоникой RETF.
               2. Инструкции обработки строк  должны  явно  указывать
         длину строки. Рекомендуется использовать MOVSB и MOVSW.
               3. SYMDEB    автоматически    ассемблирует   короткие,
         внутренние и  дальние  скачки  и  вызовы  в  зависимости  от
         местоположения  целевого  адреса. Это правило можно отменить
         кодированием префиксов NEAR (допустимо сокращение NE) и FAR,
         например:
                    JMP NEAR 502
                    JMP FAR 50A
               4. SYMDEB  не может определить,  ссылаются ли операнды
         на слово или на байт памяти. Поэтому тип данных должен  быть
         явно  указан  префиксами  WORD (допустимо сокращение WO) PTR
         или BYTE (BY) PTR, например:
                    MOV WORD PTR [bp],1
                    MOV BY PTR [si-1],symbol
               5. SYMDEB не может определить, ссылается ли операнд на
         область  памяти  или  это  непосредственный операнд. По этой
         причине ссылка на область памяти  должна  быть  заключена  в
         одинарные квадратные скобки.
               6. Для директив  DB и DW ассемблируются байт или слово
         непосредственно в памяти.
               7. SYMDEB поддерживает все формы  косвенно-регистровой
         адресации, например:
                    ADD bx,34[bp+2].[si-1]

                                     - 35 -
         
         
                    pop [bp+di]
                    push [SI]
               8. Распознаются   все  синонимы   кодов   (для  команд
         перехода). Результатом работы  команды  реассемблирования  U
         являются также синонимы.
               9.  Не  следует  ассемблировать и исполнять инструкции
         процессоров 8087 и 80287, если система не обеспечена  такими
         сопроцессорами.  Например,  использование  в  такой ситуации
         инструкции WAIT пожет "повесить" систему.
               
               
               
               
               
               
                           4.5.2. Точки выхода.
               
               
               
               SYMDEB предоставляет пользователю возможность вставить
         в  тело тестируемой программы набор точек выхода, достижение
         которых при  исполнении  кода,  вызовет  прекращение  работы
         программы,  выдачу на дисплей текущего состояния всех флагов
         и регистров в формате  команды  R  (п.4.5.22)  и  возврат  в
         SYMDEB. 
               Ниже описаны команды манипуляции с точками выхода.
               
               
               1. Установка точки выхода. Синтаксис:
               
               BP [<число>]<адрес>[<счетчик пропусков>]["<команды>"]

               Точка  выхода  вставляется по указанному адресу. Точки
         выхода, вставляемые  по  команде  BP,  в  отличие  от  точек
         выхода, создаваемых командой G, остаются в теле программы (в
         памяти, разумеется)  до  тех  пор,  пока  не  будут  удалены
         командой BC.
               SYMDEB  позволяет  устанавливать  до 10 точек выхода с
         номерами от 0 до 9. Если специфицировано <число>, оно задает
         номер  вставляемой точки, в противном случае подразумевается
         первая доступная точка. 
               <Адрес> может  определять  начало  некоторой  реальной
         инструкции. 
               <Счетчик    пропусков>    задает    число   "холостых"
         выполнений точки выхода,  когда ее действие игнорируется, до
         первого  ее  срабатывания.  Счетчик  хранится как 16-битовое
         число.
               <Команды>  SYMDEB   будут   выполняться   при   каждом
         срабатывании   точки   выхода.  Друг  от  друга  они  должны
         отделяться символом  ; .
               
               
               2. Изъятие точек выхода. Синтаксис:
               
               BC <список> | *

                                     - 36 -
         
         
               
               <Список> представляет собой  последовательность  целых
         чисел  без  знака  в  пределах  от  0  до  9. Точки выхода с
         номерами  из  этого  списка  удаляются  из  программы.  Если
         специфицировано  * , удаляются все точки.
               
               
               3. Блокировка точек выхода. Синтаксис:
               
               BD <список> | *
               
               Команда   выполняет   функции,   аналогичные  функциям
         команды BC, но точки не удаляются из программы,  а  временно
         блокируются до выполнения соответствующей команды BE.
               
               
               4. Разблокировка точек выхода. Синтаксис:
               
               BE <список> | *
               
               Команда BE противоположна по функциям команде BD.
               
               
               5. Выдача списка точек выхода. Синтаксис:
               
               BL
               
               По   этой   команде   выдается  информация  о  текущем
         расположении созданных командой BP точках выхода, включающая
         номер  точки,  статус  блокировки,  адрес,  число оставшихся
         пропусков, в скобках - исходное значение счетчика пропусков,
         а  также  номер  линии  исходного  текста, если такие номера
         используются. 
               Статус блокировки может принимать следующие  значения:
         e  для  разблокированной  точки, d для заблокированной точки
         или  v  для  виртуальной  точки.  Точка   выхода   считается
         виртуальной,  если  она  была  вставлена  в файл в то время,
         когда он еще не был загружен.
               
               
               
               
               
               
               
                            4.5.3. Комментарии.
               
               
               
               Синтаксис:
               
               * <комментарий>
               
               Текст комментария выводится на дисплей.
               

                                     - 37 -
         
         
               
               
               
               
               
                           4.5.4. Команда сравнения.
               
               
               Синтаксис:
               
               C <границы> <адрес>
               
               По этой команде  байты  памяти  в  указанных  границах
         сравниваются   с  соответствующими  им  байтами,  начиная  с
         указанного адреса. 
               Если все байты совпадают,  SYMDEB  опять  выдает  свой
         приглашающий   символ.  В  противном  случае  предварительно
         выдаются все пары несовпадающих байтов.
               
               
               
               
               
                          4.5.5. Команда "выдать".
               
               
               Синтаксис:
               
               ?<выражение>
               
               Значение специфицированного  выражения  вычисляется  и
         выдается   на   консоль  в  различных  форматах.  Выдаваемая
         информация  включает  в  себя   полный   адрес,   16-битовое
         16-ричное  значение,  полное  32-битовое 16-ричное значение,
         десятичное значение в скобках и значение  строки  в  двойных
         кавычках.  Символы  строки  представляются  точками, если их
         значение меньше 32 (20h) или больше 126 (7Eh). 
               Выражение  может  быть  комбинацией  чисел,  символов,
         адресов и операторов.
               
               
               
               
               
                            4.5.6. Команды дампа.
               
               
               Следующие   команды   SYMDEB  обеспечивают  выдачу  на
         консоль дампа оперативной памяти:
               
               
               1. Дамп памяти по адресу или в границах. Синтаксис:
               
               D [<адрес> | <границы>]
               

                                     - 38 -
         
         
               Формат   дампа   определяется   предыдущей   введенной
         командой  дампа.  Если же это первая вводимая команда дампа,
         предполагается формат команды DB.
               Команда D выдает одну или более линий в зависимости от
         того,  <адрес>  или  <границы>  указаны. Выдается по меньшей
         мере одно значение. Если специфицированы <границы>, выдаются
         все значения в них. Если операнд опущен, выдается содержимое
         памяти,   начинающейся   сразу   после   области,   выданной
         предыдущей  командой  дампа.  Если  раньше  дампирования  не
         производилось, используется содержимое регистра IP, а если и
         этот  регистр  не  был  определен,  используется  содержимое
         регистра DS.
               
               
               2.  Дамп памяти по адресу или в границах в коде ASCII.
         Синтаксис:
               
               DA [<адрес> | <границы>]
               
               Выдается одна или более линий в зависимости  от  того,
         <адрес>  или  <границы>  указаны.  Может  быть  выдано до 48
         символов в линию. Символы, не имеющие аналогов в коде ASCII,
         т.е. со значением, большим 7Eh или меньшим 20h, обозначаются
         точками. 
               Если  специфицирован  <адрес>,   выдается   содержимое
         памяти  до  ближайшего  нулевого  байта или 128 байтов. Если
         параметр опущен, выдаются значения всех  байтов,  начиная  с
         непосредственно  следующего  за выданным предыдущей командой
         дампа, до ближайшего  нулевого  или  128  байтов.  Если  при
         задании  границ  использовано  L,  выдается  указанное число
         байтов. 
               
               
               3. Дамп памяти по байтам. Синтаксис:
               
               DB [<адрес> | <границы>]
               
               Выдается комбинированный  (16-ричный  и  символьный  в
         коде  ASCII)  дамп памяти, начиная с указанного адреса или в
         указанных границах. Если указан  <адрес>  выдаются  значения
         128 байтов.
               
               
               4. Дамп памяти по словам. Синтаксис:
               
               DW [<адрес> | <границы>]
               
               Аналогично   DB,   но  при  указании  адреса  выдается
         содержимое 64 слов памяти.
               
               
               5. Дамп памяти по двойным словам. Синтаксис:
               
               DD [<адрес> | <границы>]
               

                                     - 39 -
         
         
               Аналогично  DB,  но  при  указании   адреса   выдается
         содержимое 32 двойных слов памяти.
               
               
               6. Дамп коротких десятичных чисел. Синтаксис:
               
               DS [<адрес> | <границы>]
               
               Выдается   комбинированный   (16-ричный   и   в  форме
         коротких, 4-байтных десятичных  чисел  с  плавающей  точкой)
         дамп  памяти,  начиная  с указанного адреса, или в указанных
         границах. 
               Выдается одна или более линий в зависимости  от  того,
         <адрес> или <границы> указаны. 
               Выдается    по   меньшей   мере   одно   число.   Если
         специфицированы границы, выдаются все числа в их пределах.
               
               
               7. Дамп длинных десятичных чисел. Синтаксис:
               
               DL [<адрес> | <границы>]
               
               Команда аналогична DS,  но  оперирует  с  длинными  (8
         байтов) десятичными числами.
               
               
               8. Дамп 10-байтных десятичных чисел. Синтаксис:
               
               DT [<адрес> | <границы>]
             
               Команда  аналогична  DS,  но  оперирует  с 10-байтными
         десятичными числами. 
               
               
               
               
               
                      4.5.7. Команды ввода с клавиатуры.
               
               
               При помощи команд ввода с клавиатуры данные могут быть
         введены непосредственно в память. 
               Описание команд ввода с клавиатуры приведено ниже.
               
               
               1. Ввод значений. Синтаксис:
               
               E <адрес> [<список>]
               
               Одно  или  более значений вводятся в память, начиная с
         указанного   адреса.   Размер    значений    устанавливается
         предыдущей  командой  ввода с клавиатуры, а если ее не было,
         предполагается EB.
               Если  элемент   списка   задан   некорректно,   список
         игнорируется. 

                                     - 40 -
         
         
               Если  список  опущен,  SYMDEB  запрашивает  значения в
         диалоговом режиме с указанием текущего адреса. Конец  списка
         в  этом  случае  обозначается  нажатием  клавиши  ENTER  без
         указания значения.
               
               
               
               2. Ввод байтов. Синтаксис:
               
               EB <адрес> [<список>]
               
               Одно или более чисел, занимающих 1  байт,  вводятся  в
         память, начиная с указанного адреса. 
               Если  список  опущен,  SYMDEB  запрашивает  значения в
         диалоговом режиме с  указанием  текущего  адреса.  При  этом
         имеется   возможность   заменить  или  пропустить  значение,
         вернуться к предыдущему значению, выйти из команды.
               Для замены числа следует записать новое значение после
         текущего.
               Для пропуска числа необходимо нажать SPACE.
               Для возврата к предыдущему числу следует ввести  - .
               Для выхода из команды служит клавиша ENTER.
               
               
               3. Ввод байтов. Синтаксис:
               
               EA <адрес> [<список>]
               
               Аналогично EB.
               
               
               4. Ввод слов. Синтаксис:
               
               EW <адрес> [<значение>]
               
               Указанное  значение в формате слова  вводится в память
         по  указанному  адресу.  После  ввода   SYMDEB   запрашивает
         значение   следующих  4  байтов.  Конец  ввода  обозначается
         нажатием клавиши ENTER без указания значения.
               
               
               5. Ввод двойных слов. Синтаксис:
               
               ED <адрес> [<значение>]
               
               Указанное значение в формате двойного слова вводится в
         память по указанному адресу. Двойное  слово  кодируется  как
         пара  слов,  разделенных  символом  :  .  После ввода SYMDEB
         запрашивает  значение  следующих  8  байтов.   Конец   ввода
         обозначается нажатием клавиши ENTER без указания значения.
               
               
               6. Ввод коротких десятичных чисел. Синтаксис:
               
               ES <адрес> [<значение>]

                                     - 41 -
         
         
               
               Указанное  значение  в  формате  короткого  (4  байта)
         десятичного числа с плавающей точкой вводится  в  память  по
         указанному  адресу.  После ввода SYMDEB запрашивает значение
         следующих  4  байтов.  Конец  ввода  обозначается   нажатием
         клавиши ENTER без указания значения.
               
               
               7. Ввод длинных десятичных чисел. Синтаксис:
               
               EL <адрес> [<значение>]
               
               Команда  аналогична  ES,  но  оперирует  с длинными (8
         байтов) десятичными числами,  которые  представляются  парой
         чисел, разделенных символом  : .
               
               
               8. Ввод 10-байтных десятичных чисел. Синтаксис:
               
               ET <адрес> [<значение>]
               
               Команда  аналогична  EL,  но  оперирует  с 10-байтными
         десятичными числами.
               
               
               
               
               
               
                       4.5.8. Просмотр символьного плана.
               
               
               Синтаксис:
               
               X [*]
               X? [<имя плана>!][<имя сегмента>:][<символ>]
               
               SYMDEB создает символьный план для каждого символьного
         файла, специфицированного в командной строке запуска SYMDEB.
               Форма команды X обеспечивает выдачу имен и загрузочных
         адресов сегментов и  символов  текущего  символьного  плана.
         Если  специфицировано  *  ,  выдаются  имена  и  адреса всех
         загруженных в данный момент символьных планов.
               Форма команды X? обеспечивает выдачу одного или  более
         символов  в  символьном  плане. Если указано имя символьного
         плана, выдается информация об этом плане  (<имя  символьного
         плана>  должно  представлять  имя соответствующего файла без
         расширения).  Если  задано  имя  сегмента,  выдаются  имя  и
         загрузочный   адрес   этого  сегмента.  Если  специфицирован
         символ, выдаются адрес сегмента и  смещение  этого  символа.
         Для  того,  чтобы  получить информацию о нескольких символах
         или  сегментах,   следует   задавать   частичные   имена   с
         использованием символа  * .
               
               

                                     - 42 -
         
         
               
               
               
                        4.5.9. Команда "наполнения".
               
               
               Синтаксис:
               
               F <границы> <список>
               
               Память  в  указанных границах "наполняется" значениями
         из указанного списка. Если границы определяют больше памяти,
         чем  может  занять  список,  список  начинает обрабатываться
         сначала. Если  же длиннее  список,  его  не  помещающийся  в
         границы остаток игнорируется.
               
               
               
               
               
                         4.5.10. Команда Go.
               
               
               Синтаксис:
               
               G [=<адрес начала программы>][<адреса точек выхода>]
               
               По   команде  G  управление  передается  программе  по
         указанному адресу начала. Выполнение продолжается  до  конца
         программы  или до достижения точек выхода, если они указаны.
         Программа останавливается также на точках выхода,  внесенных
         командой BP.  
               Если   адрес   начала   программы  опущен,  управление
         передается по адресу, определяемому содержимым регистров  CS
         и IP. 
               Для   передачи   управления   программе   используется
         инструкция IRET. При  этом  SYMDEB  соответствующим  образом
         устанавливает  указатель стека пользователя и заносит в этот
         стек флаги и регистры CS и IP. Следует  иметь  в  виду,  что
         если   стек  пользователя  не  содержит  хотя  бы  6  байтов
         доступной памяти,  выполнение  команды  G  может  "повесить"
         систему. 
               Все  значения  без предшествующего  =  рассматриваются
         как адреса точек  выхода.  Допустимо  задание  до  10  точек
         выхода. Их адреса должны указывать на начало инструкции.
               Для   создания   точки   выхода   SYMDEB   по  каждому
         специфицированному адресу помещает  инстукцию  INT  с  кодом
         прерывания  204  (0CCh).  При выходе из программы в одной из
         этих  точек  все  внесенные  инструкции  INT  удаляются   из
         программы.  Однако,  если  выполнение  продолжается до конца
         программы или будет прекращено  каким-либо  другим  образом,
         SYMDEB  не  удаляет  внесенные  им инструкции. В этом случае
         до следующего  запуска  нужно  перезагрузить  программу  при
         помощи команд N и L.
               Когда  выполнение  программы  достигает  точки выхода,

                                     - 43 -
         
         
         SYMDEB выдает на дисплей текущее содержимое всех регистров и
         флагов  в  формате  команды R, а также следующую инструкцию.
         Выполнение программы прекращается.
               Если выполнение достигло логического конца  программы,
         SYMDEB  выдает  сообщение  Program terminated normally, и на
         экран выдается текущее содержимое регистров и флагов.
               
               
               
               
               
                    4.5.11. Справка о командах SYMDEB.

               
               Синтаксис:
               
               ?
               
               На дисплей выдается список команд SYMDEB.
               
               
               
               
               
                          4.5.12. HEX-команда.

               
               Синтаксис:
               
               H <значение 1> <значение 2>
               
               Выполняются   операции   <значение 1>+<значение 2>   и
         <значение 1>-<значение 2>,  и результаты выдаются на экран в
         виде 16-ричных чисел.
               
               
               
               
               
               
                        4.5.13. Команда ввода из порта.
               
               
               Синтаксис:
               
               I <номер порта>
               
               Из порта с указанным номером  (представимым  16-битным
         числом) считывается и выдается на экран 1 байт данных.
               
               
               
               
               
               

                                     - 44 -
         
         
                        4.5.14. Команда загрузки файла.

               
               Синтаксис:
               
               L [<адрес> [<драйв> <запись> <счетчик>]]
               
               Команда  L  обеспечивает  считывание  файла  с диска и
         запись его в память.
               Если опущены все параметры команды, загружается файл с
         именем,  ранее  определенным   командой   N   или   заданным
         аргументом  при запуске SYMDEB. Если имя не было определено,
         SYMDEB считывает его из  области  памяти  по  адресу  DS:5C.
         Эта  область представляет собой управляющий блок, содержащий
         имя определенного по команде N файла или аргумент запуска.
               Пара    регистров   BX:CX   должна   содержать   число
         загружаемых байтов. 
               В памяти файл размещается, начиная с указанного адреса
         или, если он опущен, с адреса CS:100. 
               Если специфицированы все  4  параметра  команды  L,  в
         память  по  указанному   адресу   загружается   определяемое
         счетчиком  количество  логических  записей, расположенных на
         указанном драйве.  <Запись>  определяет  первую  считываемую
         запись  и  может представляться 16-ричным числом, содержащим
         от  1  до  4  16-ричных   цифр.   <Счетчик>   представляется
         аналогично.  <Драйв>  может быть задан числом 0, 1, 2 или 3,
         определяющим  логический  адрес  драйва  A,  B,  C   или   D
         соответственно.
               Если имя файла имеет расширение EXE, его длина и адрес
         загрузки  берется  из заголовка файла, а параметры <адрес> и
         <счетчик> команды L, если они указаны, игнорируются. 
               Если имя файла имеет расширение  HEX,  адрес  загрузки
         определяется  суммой  указанного  в заголовке файла адреса и
         параметра <адрес> команды L или, если этот параметр  опущен,
         только адресом загрузки из заголовка.
               
               
               
               
               
                         4.5.15. Команда перемещения.
               
               
               Синтаксис:
               
               M <границы> <адрес>
               
               Блок  памяти  в  указанных  границах  перемещается  по
         заданному адресу.
               Перемещение произойдет нормально, даже если исходный и
         принимающий  блоки  перекрываются.  Принимающий  блок всегда
         является точной копией исходного. При перекрытии  содержимое
         исходного блока может измениться.
               Для  предотвращения  потери  данных команда M побайтно
         копирует данные, начиная со старших адресов исходного блока,

                                     - 45 -
         
         
         если  адрес  его  начала  меньше  адреса начала принимающего
         блока.  В противном случае копирование производится, начиная
         с младших адресов исходного блока.
               
               
               
               
               
                        4.5.16 Команда установки имени.

               
               Синтаксис:
               
               N [<имя файла>] [<аргументы>]
               
               Устанавливается имя файла для последующего  выполнения
         команд  L  и  W  или  аргументы  для последующего исполнения
         программы.
               Аргументы,  если  они  заданы,   копируются,   включая
         пробелы,  в  область  памяти  по  адресу  DS:81.  Длина поля
         параметров запоминается в байте памяти по адресу DS:80. 
               Если первые  2  аргумента являются именами файлов,  по 
         адресам DS:5C и DS:6C  создаются  блоки  управления  файлами
         (FCB), куда по соответствующим форматам и копируются имена. 
               Команда  N  трактует  <имя  файла>  как тоже аргумент,
         записывая его в память по адресу DS:81  и  создавая  FCB  по
         адресу  DS:5C.  Поэтому  необходимо  помнить,  что установка
         нового значения имени файла  изменяет  предыдущие  аргументы
         программы.
               
               
               
               
               
               
                 4.5.17. Команда открытия символьного плана.

               
               Синтаксис:
               
               XO [<имя плана>!][<имя сегмента>]
               
               Команда  XO  устанавливает  активным  символьный  план
         и/или сегмент.
               Имя символьного плана, если оно указано,  должно  быть
         именем   (без  расширения)  специфицированного  при  запуске
         SYMDEB символьного файла. 
               Имя сегмента,  если оно указано,  должно  быть  именем
         сегмента  в специфицированном символьном плане. Все сегменты
         в открытом плане доступны, но открывается первый сегмент. 
               
               
               
               
               

                                     - 46 -
         
         
               
               
                       4.5.18. Команда вывода в порт.

               
               Синтаксис:
               
               O <номер порта> <1-байтовое 16-ричное значение>
               
               Указанное  значение  направляется  в  порт  с   данным
         номером.  Номер  порта  должен  быть  представим  16-битовым
         значением.
               
               
               
               
               
                           4.5.19. P-трассировка.

               
               Синтаксис:
               
               P [=<адрес>] [<счетчик>]
               
               Команда P выполняет задаваемую  адресом  инструкцию  и
         затем   выдает  на  дисплей  в  формате  команды  R  текущее
         содержимое всех регистров и флагов. 
               Если <адрес> опущен, выполняется инструкция по адресу,
         определяемому регистрами CS и IP.
               Счетчик,    если   он   присутствует,   задает   число
         инструкций, которые  будут  выполнены  до  останова.  Выдача
         регистров  и  флагов  при  этом  будет  осуществляться после
         выполнения каждой инструкции до начала выполнения следующей. 
               P-трассировка  подобна  T-трассировке (п.4.5.30) с той
         лишь разницей,  что  P-трассировка прекращается после вызова
         процедуры  или  прерывания  в  то  время,  как T-трассировка
         отслеживает и такие ситуации. 
               Формат  и  объем  выдаваемой  информации   существенно
         зависит  от режима, установленного командой S (подробнее см.
         п.4.5.25). 
               
               
               
               
               
                      4.5.20. Команда выхода из SYMDEB.

               
               Синтаксис:
               
               Q
               
               По этой команде SYMDEB заканчивает свою работу.
               
               

                                     - 47 -
         
         
               
               
               
                  4.5.21. Команды переназначения ввода/вывода.

               
               Синтаксис:
               
               <  <имя устройства>
               >  <имя устройства>
               =  <имя устройства>
               {  <имя устройства>
               }  <имя устройства>
               ~  <имя устройства>
               
               Команды  переназначения блокируют последующие операции
         ввода/вывода  и  направляют  их  на   работу   с   указанным
         устройством.   Это   может   понадобиться,  например,  когда
         отлаживаемая программа  выводит  графическую  информацию  на
         консоль, используемую и SYMDEB.
               Команда > переключает весь последующий вывод SYMDEB, а
         команда <  -  весь  последующий  ввод  SYMDEB  на  указанное
         устройство. Команда = включает в себя обе эти функции.
               Команда    {   переключает   весь   последующий   ввод
         отлаживаемой программы, а команда } - весь последующий вывод
         отлаживаемой  программы  на  указанное устройство. Команда ~
         включает в себя обе эти фукции.
               В   качестве   имени  устройства  может  быть  указано
         принятое в DOS имя устройства или имя файла. 
               Если в качестве имени устройства задано COM1 или COM2,
         это  накладывает  дополнительные ограничения на конфигурацию
         системы.  В частности, в этом случае становятся недоступными
         и игнорируются комбинации клавиш CONTROL-C и CONTROL-S.
               
               
               
               
               
                       4.5.22. Выдача регистров.
               
               
               Синтаксис:
               
               R [<имя регистра>[[=]<значение>]]
               
               Команда   R  выдает  на  дисплей содержимое  регистров
         процессора и позволяет загружать их требумыми значениями.
               Еслм  имя  регистра  опущено,  выдаются  все  регистры
         и флаги.
               Кроме того, выдается инструкция, на которую  указывают
         регистры CS и IP, и может быть сделана попытка выполнить ее. 
         При  этом  SYMDEB  вычисляет   операнды   инструкции.   Если
         инструкцией является вызов DOS, будет показан номер функции.
         Если регистры CS и IP установлены не  на  инструкцию,  а  на
         позицию в памяти, будет выдан адресующий ее символ. 

                                     - 48 -
         
         
               Если   указано   имя   регистра,   SYMDEB  выдает  его
         содержимое и запрашивает новое значение (ответ заключается в
         наборе требуемых  символов  и  нажатии  клавиши ENTER). Если
         заданы и имя регистра,  и  значение,  производится  загрузка
         регистра. 
               Могут  быть указаны следующие имена регистров: AX, BX,
         CX, DX, SP, BP, SI, DI, CS, DS, SS,  ES,  IP,  PC (IP)  и  F
         (флаги). 
               Установка   значений  флагов  осуществляется следующим
         образом. При спецификации F в команде  R  состояние  каждого
         флага  выдается  в виде двухсимвольного кода, как показано в
         таблице 4.1. Список  значений  заканчивается  символом  -  ,
         после    которого   можно   в   этом   же   коде   в   любой
         последовательности ввести новые значения  выбранных  флагов.
         Значения  остальных флагов не изменятся. каждый флаг в одном
         списке может быть  специфицирован  только  один  раз.  Конец
         списка обозначается нажатием клавиши ENTER.
               
               
               
               
                      Таблица 4.1. Коды значений флагов.
         ____________________________________________________________
         |                |                    |                    |
         |     Флаг       |         1          |         0          |
         |________________|____________________|____________________|
         |                |                    |                    |
         |  Переполнение  |        OV          |        NV          |
         |________________|____________________|____________________|
         |                |                    |                    |
         |   Направление  |   DN (уменьшение)  |   UP (увеличение)  |
         |________________|____________________|____________________|
         |                |                    |                    |
         |   Прерывания   |     EI (запрет)    |   DI (разрешение)  |
         |________________|____________________|____________________|
         |                |                    |                    |
         |     Знак       |      NG (минус)    |      PL (плюс)     |
         |________________|____________________|____________________|
         |                |                    |                    |
         |     Нуль       |        ZR          |        NZ          |
         |________________|____________________|____________________|
         |                |                    |                    |
         |  Вспомогатель- |        AC          |        NA          |
         |   ный перенос  |                    |                    |
         |________________|____________________|____________________|
         |                |                    |                    |
         |     Паритет    |    PE (четность)   |   PO (нечетность)  |
         |________________|____________________|____________________|
         |                |                    |                    |
         |     Перенос    |        CY          |        NC          |
         |________________|____________________|____________________|
               
               
               
               Флаги   модифицируются   последовательно   по  одному.

                                     - 49 -
         
         
         Поэтому при ошибочном кодировании возникнет ситуация,  когда
         часть флагов (до ошибочного символа) изменила свои значения,
         а часть, начиная с ошибочного символа, - нет.
               Формат  и  объем  выдаваемой  информации   существенно
         зависит  от режима, установленного командой S (подробнее см.
         п.4.5.25). 
               
               
               
               
               
                           4.5.23. Смена экрана.

               
               Синтаксис:
               
               \
               
               Эта команда позволяет переключиться с  экрана  отладки
         на экран отлаживаемой программы,  что  бывает  нужно,  когда
         программа,    например,   выводит   на   экран   графическую
         информацию.  
               Возврат на экран SYMDEB осуществляется нажатием  любой
         клавиши.
               При  работе  на  IBM-машине  для использования команды
         смены экрана необходимо задание опции SYMDEB /S. При  работе
         на  машине, совместимой с IBM, необходимо также задать опцию
         /I.
               
               
               
               
                        4.5.24. Команда поиска.
               
               
               Синтаксис:
               
               S <границы> <список>
               
               В области памяти с указанными границами осуществляется
         поиск  заданных в списке 1-байтных  значений с индикацией на
         экране   результатов   поиска.   Элементы   списка    должны
         разделяться запятыми.
               
               
               
               
               
                  4.5.25.Команда установки режима индикации.

               
               Синтаксис:
               
               S-|+|&
               

                                     - 50 -
         
         
               Команда  S  устанавливает  режим  выдачи  на  дисплей,
         которому SYMEB будет в дальнейшем придерживаться. 
               По  команде  S+  SYMDEB  будет   выдавать   на   экран
         информацию  в  терминах  линий  исходного  текста программы.
         Команда S- устанавливает  режим  выдачи  реассемблированного
         кода  программы.  Команда  S&  обеспечивает обе эти функции.
         Первоначальным умалчиваемым режимом является S&.
               Команда S имеет смысл лишь при работе с программами на
         языке    высокого    уровня.   Для   ассемблерных   программ
         автоматически устанавливается режим S-. 
               Если  символьный  план  не  открыт  или   не  содержит
         информацию  о  линиях  исходной программы, SYMDEB игнорирует
         все последующие запросы на выдачу исходных линий.  В  режиме
         S&  SYMDEB  выдает исходную линию, содержащую инструкцию, на
         которую указывает пара регистров CS и IP. 
               Команда S  оказывает  влияние  на  работу  последующих
         команд реассемблирования U (п.4.5.31). 
               Команда S влияет также на работу команд R, T  и  P.  В
         режиме  S+  эти  команды  выдают за раз одну исходную линию,
         которая может соответствовать нескольким  реассемблированным
         инструкциям.  В режиме S- выдается только реассемблированный
         код. В режиме S& выдаются реассемблированный  код  и  номера
         линий. 
               Исходные линии выдаются в виде:
         <номер линии>:<исходный текст>
               Исходные     линии     при     выдаче     предшествуют
         реассемблированным инструкциям. 
               Всякий раз,  когда  SYMDEB  первый  раз  обращается  к
         исходному тексту, он ищет в текущем подоглавлении файл с тем
         же  базовым  именем,  что и соответствующий символьный файл.
         При  неудачном  поиске  SYMDEB  выдает  на консоль запрос об
         имени исходного файла. Если в ответ на  него  нажать клавишу
         ENTER, не  указав  имени,  SYMDEB  подавит  выдачу  исходных
         линий,  вместо  которых  тогда  будут выдаваться имя плана и
         номер линии. Эту процедуру нужно производить  при  работе  с
         программами,  сформированными  ранними  версиями  (до  3.31)
         компиляторов FORTRAN и PASCAL.
               
               
               
               
               
                      4.5.26. Временный выход в DOS.
               
               
               Синтаксис:
               
               ![<команда DOS>]
               
               Команда ! позволяет выполнить  COMMAND.COM  и  команды
         MS-DOS  вне SYMDEB. COMMAND.COM выполняется без аргументов с
         сохранением контекста отладки. Для возврата в SYMDEB  служит
         команда MS-DOS EXIT.
               Если  в  команде  !  задана  команда DOS, производится
         выполнение этой команды и автоматический возврат в SYMDEB.

                                     - 51 -
         
         
               Использование команды ! требует дополнительной памяти.
         Для  более  экономного  использования  памяти  рекомендуется
         предусматривать  в  ассемблерных  программах  вызов  DOS   с
         функцией  4Ah,  который освободит неиспользуемую память. Тот
         же эффек дает опция LINK /CPARMAXALLOC. Программы  на  языке
         C,  обработанные компилятором MICROSOFT C версии 3.0 и выше,
         освобождают  ненужную   память  автоматически,   если   была
         выполнена   процедура   _main.   SYMDEB   также  освобождает
         неиспользуемую им память.
               В команде ! не может быть использован ограничитель ; ,
         т.к. весь текст после ! передается  в  COMMAND.COM  и  будет
         интерпретироваться как командная строка DOS.
               Для  размещения  копии  COMMAND.COM  SYMDEB использует
         переменную COMSPEC команды DOS SET.
               
               
               
               
               
                  4.5.27. Команда выдачи кода исходной линии.

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

               
               Синтаксис:
               
               K [<число>]
               
               Эта команда  позволяет  увидеть  текущий  кадр  стека.
         Первая  строка  трассы  содержит  имя  текущей процедуры, ее
         аргументы, имя файла и  номер  линии,  вызвавшей  процедуру.
         Следующая строка описывает вызвавшую процедуру и т.д.
               Если   число   аргументов   процедуры   переменно  или
         неизвестно, SYMDEB использует специфицированное в команде  K
         число, которое задает число слов параметров.
               Команда  K  работает только при соблюдении стандартных
         соглашений о связях, в противном случае она игнорируется.

               
               
               

                                     - 52 -
         
         
               
               
               
                    4.5.29. Команда установки символа.

               
               Синтаксис:
               
               Z <символ> <значение>
               
               В результате выполнения  команды  Z  указанный  символ
         будет связан со специфицированным значением адресом.
               
               
               
               
               
                       4.5.30. T-трассировка.

               
               Синтаксис:
               
               T [=<адрес начала>] [<счетчик>]
               
               Команда T выполняет задаваемую  адресом  инструкцию  и
         затем   выдает  на  дисплей  в  формате  команды  R  текущее
         содержимое всех регистров и флагов. 
               Если <адрес> опущен, выполняется инструкция по адресу,
         определяемому регистрами CS и IP.
               Счетчик,    если   он   присутствует,   задает   число
         инструкций, которые  будут  выполнены  до  останова.  Выдача
         регистров  и  флагов  при  этом  будет  осуществляться после
         выполнения каждой инструкции до начала выполнения следующей.
               В отличие от P-трассировки (п.4.5.19) T-трассировка не
         прекращается при вызове процедуры или прерывании. Исключение
         составляет лишь прерывание с номером 21h (функция DOS). 
               Трассировка будет идти лучше, если  не  использовались
         средства оптимизации данного языка.
               Команда  T  использует  режим  трассировки  аппаратуры
         процессоров 8086, 8088, 80186 или 80286. С ее помощью  можно
         трассировать инструкцию в ROM (read-only memory).
               Формат  и  объем  выдаваемой  информации   существенно
         зависит  от режима, установленного командой S (подробнее см.
         п.4.5.25). 
               
               
               
               
               
                       4.5.31. Команда реассемблирования.
               
               
               Синтаксис:
               
               U [<границы>]

                                     - 53 -
         
         
               
               По  команда  U  на дисплей выдаются реассемблированные
         инструкции  и/или  предложения  исходной  программы.  Формат
         вывода  зависит  от  режима, установленного командой S, и от
         языка,   на   котором   была   написана   программа.    Если
         отлаживаемая    программа    была    обработана   MASM   или
         несовместимым   с   SYMDEB    компилятором,    принудительно
         устанавливается  режим  S-.  В  режимах S+ и S& при работе с
         программами,    выработанными    совместимыми    с    SYMDEB
         компиляторами,  по команде U выдаются линии исходного текста
         и реассемблированные инструкции  (одна  исходная  линия  для
         каждой   соответствующей   группы  предложений  ассемблера).
         Исходные линии считываются из  исходного  файла.  Инструкции
         для  реассемблирования берутся из блока памяти в указанных в
         команде границах.
               В  отличие  от команд T и P, для команды U режимы S+ и
         S& совпадают. Для обоих  режимов  (исходного  и  смешанного)
         SYMDEB  требует,  чтобы  вместе  с программой был загружен и
         символьный  план,  содержащий  информацию  о  номерах  строк
         исходной  программы. При отсутствии этой информации исходные
         линии не выдаются. 
               Если <границы> опущены, обрабатываются первые 8  линий
         кода по  текущему адресу  реассемблирования. Текущим адресом
         реассемблирования является адрес первого байта (линии) после
         последнего байта (линии), выданного предыдущей командой U. 
               Защищенные  инструкции  процессора 80286 не могут быть
         реассемблированы.
               
               
               
               
               
               
               
               
                    4.5.32. Команда выдачи исходной линии.

               
               Синтаксис:
               
               V <адрес>
               
               Команда   V   выдает   исходные    линии    программы,
         соответствующие  инструкциям,   расположенным,   начиная   с
         указанного адреса.  При  этом  загруженный  символьный  план
         должен содержать информацию о линиях исходной программы.
               Исходные   линии   выдаются   независимо   от  режима,
         установленного командой S.
               
               
               
               
               
               
               

                                     - 54 -
         
         
               
                      4.5.33. Команда записи на диск.

               
               Синтаксис:
               
               W [<адрес> [<драйв> <запись> <счетчик>]]
               
               Команда  W  обеспечивает  запись  участка   памяти   в
         определенное место на диске.
               Если   опущены   все   параметры    команды,    запись
         производится в файл с именем, ранее определенным командой N. 
               Пара    регистров   BX:CX   должна   содержать   число
         записываемых байтов. 
               В   памяти  записываемые  данные  должны  размещаться,
         начиная с указанного адреса или, если он  опущен,  с  адреса
         CS:100.   
               Если специфицированы все  4  параметра  команды W,  на
         указанный   драйв   записывается   определяемое    счетчиком
         количество    логических    записей,    содержимое   которых
         расположено   по  указанному  адресу.   <Запись>  определяет 
         первую записываемую на диск запись  и  может  представляться
         16-ричным  числом,  содержащим  от  1  до  4 16-ричных цифр.
         <Счетчик>  представляется  аналогично.  <Драйв>  может  быть
         задан  числом  0,  1, 2 или 3, определяющим логический адрес
         драйва A, B, C или D соответственно.  
               Не  рекомендуется  записывать  данные  по  абсолютному
         адресу сектора диска, даже  если  имеется  уверенность,  что
         сектор  свободен.  Запись  на  зарезервированный или занятый
         сектор может испортить содержимое файла или даже диска.
               Если имя отлаживаемого файла имеет расширение COM  или
         BIN,  можно при помощи SYMDEB внести изменения в программу и
         затем записать ее обратно в файл.  При  загрузке  файла  его
         длина,  начальный  адрес и имя будут установлены правильно с
         точки зрения последующей записи.  Однако,  если  в  процессе
         отладки  использовались  команды  G,  P или T или изменялось
         содержимое пары регистров BX:CX, утраченные значения следует
         восстановить до записи. 
               Команду  W  нельзя  использовать для записи в EXE- или
         HEX-файл.   Для   модификации  таких  файлов  может  служить
         следующая процедура:
               1.  Запустить  SYMDEB  с   исполнительным   файлом   и
         запомнить несколько первых инструкций программы.
               2. Выйти из SYMDEB и переименовать исполнительный файл
         так, чтобы расширение его имени отличалось от EXE и HEX.
               3. Запустить SYMDEB с  переименованным  исполнительным
         файлом.  При  этом заголовок файла будет рассматриваться как
         часть кода программы (очевидно, что в этом случае нет смысла
         в  загрузке  символьных файлов, т.к. все символы в них будут
         иметь некорректные адреса). 
               4.  Использовать  команду  поиска  S  для   нахождения
         действительного начала программы по запомненным инструкциям.
         Для   этого   может  понадобиться  несколько  попыток,  т.к.
         начальный адрес может  меняться  в  зависимости  от  порядка
         сегментов и других факторов.

                                     - 55 -
         
         
               5. Имея адрес начала программы, отыскать инструкции, в
         которые нужно внести изменения, и проделать эти изменения.
               6. Установить параметры  команды  W  и  записать  весь
         файл, включая его заголовок, на диск. Длина заголовка должна
         входить в общую длину записываемого файла в  паре  регистров
         BX:CX.
               7.   Выйти   из   SYMDEB   и    произвести    обратное
         переименование исполнительного файла. 


© KOAP Open Portal 2000



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