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



ГЛАВА 6   ОТЛАДЧИК

__________________________________________________________

     Примечание:
     Выход  из  отладчика может быть осуществлен в любое время
нажатием клавиш CONTROL+C.  При  нажатии  CONTROL+S  вывод  на
экран  временно приостанавливается. Для продолжения достаточно
нажать любую клавишу.

                       Запуск отладчика

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

     метод 1:        debug
     метод 2:        debug [имя_файла [список_аргументов]]

     При запуске отладчика по первому методу, знак тире (-) на
экране сигнализирует о готовности отладчика к приему команд.

     Примечание:
     Если  вы  не  укажете имя_файла отладчику, то создаваемый
заголовок программы затирается. При отладке .com и .exe файлов
не следует изменять содержимое памяти по адресам,  ниже  05СН,
иначе  отладчик  прервется.  Не  пытайтесь запустить программу
после того, как на экране появилось сообщение:

     Program terminated normally
     (Программа завершена по обычной процедуре)

     Для этого вы должны  перезагрузить  программу  с  помощью
команд N (имя) и L (загрузить), а уж затем  запустить ее.
     При   запуске   отладчика  вторым  методом,  указанный  в
командной строке программный  файл  грузится  в наименьший  по
значению  доступный  сегмент  со смещением в последнем 100Н. В
регистры BX:CX помещается количество загруженных байт.

           Общая информация о командах отладчика

     Каждая команда отладчика состоит  из  буквы,  за  которой
следуют  один  или  несколько  параметров.  В случае нарушения
синтаксиса команды отладчик помечает ошибочное место  стрелкой
(^)  и соответствующим сообщением error (ошибка):

     dcs:100 cs:110
         ^ Error

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

                             - 364 -



           Общая информация о параметрах отладчика

     Все команды отладчика (за исключением  команды  Q)  могут
иметь  параметры,  которые в свою очередь могут быть разделены
пробелами или запятыми.  Разделитель  обязателен  между  двумя
последовательными   шестнадцатеричными  величинами.  Следующие
команды эквивалентны:

     dcs:100 110
     d cs:100 110
     d,cs:100,110

     Параметр        Определение
     __________________________________________________________
     дисковод:       Указвает дисковод,  с  которого  грузится
                     или  на который записывается отлаживаемый
                     файл. Разрешенные значения  0  -  3,  где
                     0=А, 1=В, 2=С, 3=D.
     байт            Две  шестнадцатеричные цифры помещаемые в
                     или  считываемые  из   к-л   адреса   или
                     регистра.
     запись          1 - 3 шестнадцатеричные цифры указывающие
                     номер  логической  записи  на  диске  или
                     количество   секторов,  записываемых  или
                     считываемых с диска.
     значение        До    четырех   шестнадцатеричных   цифр,
     (величина)      указывающих, например,  номер  порта  или
                     количество раз, которое команда повторяет
                     свои действия.
     адрес           Определение адреса  включает  определение
                     сегмента,   за  которым  через  двоеточие
                     следует определение смещения.  Вы  можете
                     опустить  определение  сегмента.  В  этом
                     случае по умолчанию будет принят  сегмент
                     ds   для   всех  команд,  за  исключением
                     A,G,L,T,U,W,  для  которых  по  умолчанию
                     принимается   сегмент  cs.  Все  значения
                     указываются  в  шестнадцатеричной  форме.
                     Помимо    этого,   сегмент   может   быть
                     определен   по   имени   соответствующего
                     сегментного регистра:

                     CS:0100
                     04BA:0100
     область         Область    может    быть   задана   двумя
                     способами. В первом указывается адрес, за
                     которым следует смещение от этого адреса:

                     CS:0100 110

                     Во  втором  способе  за  адресом  следует
                     символ  L   (длина)   и   соответствующее
                     значение длины области:

                     CS:0100 L 10

                             - 365 -



                     Следующая строка неправильна:

                     CS:0100 CS:0110
                             b Error

                     Размер области не должен превышать четыре
                     шестнадцатеричные цифры.
     список          Этот параметр  должен  быть  последним  в
                     командной  строке  и  представляет  собой
                     последовательность байт или строк:

                     FCS:0100 42 45 52 54 41
     строка          Любое количество символов,  помещенное  в
                     кавычки  (разрешены  как  двойные,  так и
                     одинарные  кавычки).  В  случае появления
                     внутри  строки  кавычек,  то   количество
                     последних удваивается:

                     'this ''string'' is okay.'

                      или

                     "this ""string"" is okay."
     число           Количество выделяемых 16К-страниц.
     хендл           Логический  номер EMS (Системы управления
                     расширенной памятью).
     лстраница       Номер логической страницы.
     фстраница       Номер физической страницы.
     __________________________________________________________

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





     __________________________________________________________
     ASSEMBLE (A)

     Цель:
          Ассемблирование  мнемоники  и  загрузка  полученного
          кода по указанному адресу.

     Синтаксис:

          A [адрес]

     Комментарий:
     Все  числа   указываются   в   шестнадцатеричной   форме.
Мнемоника  для  переназначения  сегмента - CS:, DS:, ES:, SS:.
Мнемоника для дальнего  возврата  -  RETF.  Команды  пересылки
строк  должны  явно указывать длину опрерандов, т.е. MOVSB или
MOVSW. Команды  переходов  и  вызовов  процедур  автоматически
ассемблируются  в  команды переходов и вызовов процедур short,
near и far, в зависимости от смещения указываемого адреса.  Вы
можете  выбрать  отличный  от  создаваемого  по  умолчанию код
команды, используя префиксы NEAR или FAR:


                             - 366 -


     0100:0500 JMP 502       ; двубайтный  код
     0100:0502 JMP NEAR 505  ; трехбайтный код
     0100:0505 JMP FAR  50A  ; пятибайтный код
     0100:050А ............

     Префикс NEAR можно сокращать до NE.  При  указании  длины
операнда,  префиксы  WORD  PTR  и  BYTE  PTR  можно  сокращать
соответственно WO и BY.






     __________________________________________________________
     COMPARE (C)

     Цель:
       Сравнение  области  памяти,  определенной  в  параметре
       "область",  с  областью  памяти  такого  же  размера по
       указанному "адресу".

     Синтаксис:

          Собласть

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

     адрес1 байт1 байт2 адрес2

     Пример:
     Действия следующих команд приводят к одному результату:

     C100,1FF 300

     или

     C100L100 300






     __________________________________________________________
     DUMP (D)

     Цель:
          Вывод на экран содержимого области памяти.

     Синтаксис:

          D[область]

     Комментарий:
     Если  вы  не  укажете область, то на экран будет выведено
содержимое 128 байт, начиная с DS:100, или следующие 128  байт
за 128 байтами, выведенными предыдущей командой D.

                             - 367 -


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

     Примеры:

     DCS:100 110
     DCS:100 L 20





     __________________________________________________________
     ENTER (E)

     Цель:
          Поместить по указанному адресу указанное значение.

     Синтаксис:

          Еадрес[список]

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

     - Просто напечатайте  новое  значение  за  текущим.  Если
       введенное  значение  будет содержать более двух знаков,
       то лишние знаки игнорируются (также как и неразрешенные
       знаки). Заметьте, нажатия клавиши ВВОД для ввода нового
       значения не требуется.
     - Нажмите пробел для перехода  к  следующему  байту.  Для
       ввода  нового  значения выполните действия, описанные в
       предыдущем абзаце. Можно вместо ввода  нового  значения
       повторить продвижение вперед нажатием пробела.
     - Нажмите тире (-)  для возврата к предыдущему байту. Как
       вы уже  заметили,  при  всяком  передвижении  выводится
       текущий  адрес и значение байта по этому адресу. Вы мо-
       жете выполнить действия  описанные  выше,  т.е.  ввести
       новое значение или снова перейти на другой адрес.
     - Нажатием  клавиши  ВВОД, вы можете в любой момент выйти
       из команды Е.







                             - 368 -


     __________________________________________________________
     FILL (F)

     Цель:
          Поместить в указанную область значения, указанные  в
          списке.

     Синтаксис:

          Fобласть список

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

     Пример:
     По  следующей  команде  область  памяти в 100Н (256) байт
будет заполнена пятибайтными участками:

     F04BA:100 L 100 42 46 54 53 41






     __________________________________________________________
     GO (G)

     Цель:
          Выполнение загруженной отладчиком программы.

     Синтаксис:

          G[=адрес [адреса]]

     Комментарий:
     Если вы нажмете G без  опций,  то  загруженная  программа
выполняется  как обычно. Если вы укажете =адрес, то выполнение
программы начинается с  указанного  адреса.  Остальные  адреса
(если  указаны)  в  командной строке представляют собой адреса
точек прерывания программы. Когда программа  достигает  адреса
точки  прерывания,  содержимое  регистров,  состояние флагов и
деассемблированная команда по этому адресу выводятся на экран.
     Разрешено  указание  до  десяти   точек   прерывания,   в
противном случае будет возвращена ошибка.
     Пользовательская  программа  должна  иметь достаточный (6
байт для этой команды) стэк. Команда G использует команду IRET
для перехода к тестируемой программе.  При  этом  выставляется
указатель  стэка  пользователя,  флаги  и  регистры  CS:IP. По
адресам точек прерывания помещается код прерывания (0ССН).
     Для продолжения  выполнения  программы  после  выхода  на
точку прерывания введите команду G снова.

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

     GCS:7550

                             - 369 -




     __________________________________________________________
     HEX (H)

     Цель:
          Выполнение       арифметических      действий      с
          шестнадцатеричными величинами.

     Синтаксис:
          Нвеличина величина

     Комментарий:
     По этой команде на  экран  выводится  строка,  в  которой
первой  идет сумма двух величин, а второй разница между первой
и второй величинами.

     Пример:
     Предположим вы ввели следующие величины:

     H19F 10A

     в ответ на экране появится следующее:

     02A9 0095







     __________________________________________________________
     INPUT (I)

     Цель:
            Ввод  байта  из  указанного   порта   (указывается
            величиной) и вывод его на экран.

     Синтаксис:

          Iвеличина

     Комментарий:
     Разрешены 16-битные порты.






                             - 370 -




     __________________________________________________________
     LOAD (L)

     Цель:
          Загрузка файла в память.

     Синтаксис:

          L[адрес [дисковод: запись количество_записей]]

     Комментарий:
     В ВХ:СХ помещается количество прочитанных байт. Имя файла
должно быть определено к этому моменту либо при запуске debug,
либо с помощью команды N (name).
     Если введете команду L  без  параметров,  то  файл  будет
загружен,  начиная  с  адреса CS:100, а в ВХ:СХ будет помещено
количество загруженных байт. Если вы укажете параметр "адрес",
то файл будет загружен, начиная с указанного адреса.  Если  вы
укажете   все   параметры,  то  загружаться  будут  абсолютные
сектора. Дисковод определяется следующим  образом:  0=А,  1=В,
2=С  и  т.д..  Сектора  в  количестве, определяемом параметром
"количество_записей",  считываются,  начиная   с   логического
номера сектора, указанного параметром "запись".

     Пример:
     Отладчик  загрузит 109 (6DH) записей, начиная с записи с
логическим номером 15 (FH) по адресу 04ВА:100, если вы введете
следующую команду (считается, что имя файла уже определено):

     L04BA:100 2 0F 6D

     Примечание:
     Параметр  "адрес" всегда игнорируется отладчиком для .exe
файлов, т.к. последние могут загружаться по адресу, указанному
в заголовке файла. Сам заголовок .exe  файла  "отрезается"  от
тела   файла   при  загрузке,  поэтому  дисковый  образ  файла
несколько больше образа файла в памяти.
     Если  загружаемый  файл   имеет   расширение   .hex,   то
загружаться он будет по адресу, указанному в самом .hex файле,
либо  (при  наличии  параметра  "адрес") по адресу, указанному
параметром "адрес" плюс адрес, указанный в .hex файле.







                             - 371 -



     __________________________________________________________
     MOVE (M)

     Цель:
          Переместить  блок  памяти,  указываемый   параметром
          "область", на указанный адрес.

     Синтаксис:

          Мобласть адрес

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

     Пример:

     MCS:100 110 CS:500







     __________________________________________________________
     NAME (N)

     Цель:
          Присвоить имя файлу.

     Синтаксис:

          Nимя_файла [имя_файла...]

     Комментарий:
     Команда  N  выполняет  две  функции.  Прежде  всего,  эта
команда  определяет  имя  файла,  который  в последствии будет
загружаться или  записываться.  Имя  файла  необходимо
определить  с помощью команды N, если при вызове отладчика это
имя  не  было  указано.  Второе   предназначение   команды   -
определение  параметров,  используемых  загружаемым  файлом  и
помещаемых  при  обычном  запуске  этого  командного  файла  в
командную  строку его вызова. Обратите внимание на то, что обе
функции выполняются одновременно, например, в ниже приведенном
случае:

     - Nprog.exe
     - L
     - G


                             - 372 -


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

     - Nprog.exe
     - L
     - Nfile1.dat file2.inf
     - G

     Теперь, если вы введете команду W, то записаны будут  как
prog.exe,  так  и  file1.dat. Чтобы избежать такого результата
следует использовать команду N перед каждой командой L или W.
     Для   первого   указанного   файла   форматируется   блок
управления  файлом по адресу CS:5C, аналогичный блок создается
и для второго файла (если файл  указан)  по  адресу  CS:6С.  В
ячейку CS:80 помещается количество введенных символов после N,
а  вся  введенная  строка  без N помещается в буфер, начиная с
адреса CS:81.







     __________________________________________________________
     OUTPUT (O)

     Цель:
          Вывести байт в указанный "величиной" порт.

     Синтаксис:

          Овеличина байт

     Комментарий:
     Разрешен 16-битовый адрес порта.




     __________________________________________________________
     PROCEED (P)

     Цель:
          Выполнить  цикл,  повторяемую   строковую   команду,
          программное прерывание или вызов подпрограммы.

     Синтаксис:

          Р[=адрес] [количество]

          где:

          адрес       - адрес первой выполняемой команды.
          количество  - количество выполняемых команд.

                             - 373 -



     Комментарий:
     Команда Р  передает  управление  отлаживаемому  фрагменту
программы.  Этот  фрагмент  выполняется  без прерывания до тех
пор, пока не будет завершено выполнение  цикла,  повторяющейся
команды  пересылки  строк, прерывания, вызова подпрограммы или
указанного   количества   команд.   После   этого   управление
возвращается  отладчику,  а  на  экран  выводится информация о
состоянии регистров и флагов отлаживаемого фрагмента.
     Если параметр адрес (имеет знак (=) впереди)  опущен,  то
таковым   считается   адрес,   определяемый  регистрами  CS:IP
отлаживаемой  программы.  По  умолчанию  сегмент  определяется
регистром CS.
     Если  команда  по  указанному  адресу не является циклом,
повторяемой строковой командой,  программным  прерыванием  или
вызовом  подпрограммы,  то  команда  Р действует как команда Т
(трассировать).  По  умолчанию  параметр  "количество"   равен
единице.

     Примечание:
     Команда Р не может быть использована для трассировки ПЗУ.







     __________________________________________________________
     QUIT (Q)

     Цель:
          Выход из отладчика.

     Синтаксис:

          Q

     Комментарий:
     По этой команде управлений возвращается системе.









     __________________________________________________________
     REGISTER (R)

     Цель:
          Вывод на экран содержимого регистров процессора.

     Синтаксис:

          R[имя_регистра]

                             - 374 -




     Комментарий:

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

     AX BP SS
     BX SI CS
     CX DI IP или PC
     DX DS SP
     F  ES

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

     название флага          установлен         сброшен
     __________________________________________________________
     Переполнение            OV                  NV
     Направление             DN                  UP
     Прерывание              EI                  DI
     Знак                    NG                  PL
     Ноль                    ZR                  NZ
     Вспомогательный         AC                  NA
             перенос
     Четность                PE                  PO
     Перенос                 CY                  NC
     __________________________________________________________

     При  запуске  отладчика сегментные регистры выствляются в
начало  выделенного  участка  памяти,  регистр   IP   получает
значение 0100Н, все флаги сбрасываются, все остальные регистры
получают значение ноль.
     При  выполнении  этой  команды  могут выводится следующие
сообщения об ошибках:

     BR - недопустимое имя регистра
     DF - для флага указано больше одного значения
     BF - недопустимое значение для флага

     Пример:
     После вывода спомощью  команды  RF  состояния  флагов  вы
можете  ввести  новые  значения  для флагов в любом порядке, с
пробелами или без пробелов между ними:

     NV UP DI NG NZ AC PE NC - PLEICY
                               ------






                             - 375 -


     __________________________________________________________
     SEARCH (S)

     Цель:
          Поиск в указанной "области" указанного "списка" байт.

     Синтаксис:

          Sобласть список

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







     __________________________________________________________
     TRACE (T)

     Цель:
          Выполнить одну команду, вывести содержимое регистров,
          состояние флагов и саму команду в деассемблированном
          виде.

     Синтаксис:

          Т[=адрес] [величина]

     Комментарий:
     Если  вы  укажете  адрес,  то  трассировка  выполняется с
указанного  адреса.  Величина   указывает   количество   шагов
трассировки.    Для    трассировки   используются   аппаратные
возможности микропроцессоров 8088 или 8086.






     __________________________________________________________
     UNASSEMBLE (U)

     Цель:
          Деассемблирование кода.

     Синтаксис:

          U[область]

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

                             - 376 -


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

     04BA:0100  206472  AND  [SI+72],AH
     ...
     ...






     __________________________________________________________
     WRITE (W)

     Цель:
          Запись отлаживаемого файла на диск.

     Синтаксис:

          W[адрес [дисковод: запись количество]]

     Комментарий:
     Если   вы   используете  команду  W  без  параметров,  то
предварительно  необходимо  загрузить   в   ВХ:СХ   количество
записываемых  байт.  Если вы не укажете адрес байта, начиная с
которого   будет   выполняться   запись,   то   запись   будет
выполняться, начиная с адреса CS:100.
     Дисковод определяется следующим  образом  -  0=А,  1=В  и
т.д..   На  диск  файл  записывается,  начиная  с  логического
сектора, указанного параметром "запись". Параметр "количество"
указывает количество записываемых секторов.


     __________________________________________________________
     ALLOCATE EXPANDED MEMORY (XA)

     Цель:
          Выделить указанное  количество  страниц  расширенной
          памяти  (EMS).  При  успешном  завершении  на  экран
          выводится сообщение:

          "Нandle created"
          (Логический номер создан)

     Синтаксис:

          ХА число

          где:

          число  -   шестнадцатеричное   число,   определяющее
                     количество выделяемых 16К-страниц.

                             - 377 -



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

     Пример:
     Для  выделения  8  страниц  расширенной  памяти   введите
следующее:

     ХА 8

     Если  это  количество  страниц  доступно,  то  на  экране
появится примерно следующее сообщение:

     Handle created=0003






     __________________________________________________________
     DEALLOCATE EXPANDED MEMORY (XD)

     Цель:
          Отменить выделение памяти, выполненное командой ХА.

     Синтаксис:

          XD логический_номер_памяти_EMS_созданный_командой_ХА

     Пример:
     После ввода команды:

     xd 0003

     на  экране  появится  (если  отмена  выполнена   успешно)
     следующее сообщение:

     Handle 0003 deallocated
     (Выделение памяти EMS с логическим номером 0003 отменено)





                             - 378 -





     __________________________________________________________
     MAP EXPANDED MEMORY PAGES (XM)

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

     Синтаксис:

          ХМ лстраница фстраница логический_номер

          где:

          лстраница - Номер логической страницы.
          фстраница - Номер физической страницы.

     Пример:
     Привести  физическую  страницу (2) расширенной памяти в
     соответствие  логической   странице (5),   принадлежащей
     указанному логическому номеру EMS (0003):

     xm 5 2 0003

     При успешном завершении на экране появится сообщение:

     Logical page 05 mapped to physical page 02
     (Физическая   страница   2   приведена   в   соответствие
     логической странице 5)








     __________________________________________________________
     GET EXPANDED MEMORY STATUS (XS)

     Цель:
          Вывод  на  экран  информации  о  текущем   состоянии
          расширенной памяти.

     Синтаксис:

          XS

     Комментарий:
     Выводимая информация имеет следующий формат:

     Handle %1 has %2 pages allocated
     Physical page %1 = Frame segment %2
        %1 of a total %2 EMS pages have been allocated
        %1 of a total %2 EMS handles have been allocated

                             - 379 -



     Логическому номеру %1 принадлежит %2 выделенных страниц
     Сегмент %2 есть сегментный адрес физической страницы %1
     Выделено %1 страниц из общего числа %2 EMS страниц
     Выделено  %1  логических  номеров  из общего числа %2 EMS
     логических номеров.







     __________________________________________________________
     СООБЩЕНИЯ ОТЛАДЧИКА ОБ ОШИБКАХ

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

     BF - недопустимое значение для флага
     BP - Для команды G указано больше десяти точек прерывания.
     BR - недопустимое имя регистра
     DF - для флага указано больше одного значения


© KOAP Open Portal 2000



?????? ???????????