Преодразование файла типа .exe в файл типа .com.

    На дискете с DOS имеется сервисная программа под именем EXE2BIN.

    Эта программа преобразует файл типа .EXE в файл типа .COM.    Однако

    программа EXE2BIN работает не со всеми файлами.  Далее излагается

    метод использования программы DEBUG, с помощью которого любая

    программа преобразуется в файл типа .COM.

 

      На Фиг. 5.18 приведена программа, которую мы будем

    преобразовывать. Эта программа выполняет точно такие же функции,

    что и программа предыдущего примера, а именно - выводит на дисплей

    фразу : "Это тест". Однако в данной программе эта строка выводится

    на дисплей по прерыванию INT 21H с помощью функции 9 DOS.

            Microsoft (R) Macro Assembler Version 5.00              1/1/80 04:02:33

            Фиг. 5.18 Пример преобразования файла типа .EXE в тип .COM  Page     1-1

 

 

                                          PAGE    ,132

                                          TITLE   Фиг. 5.18 Пример преобразования файла типа .EXE в тип .COM

             0000                   CODE    SEGMENT

                                          ASSUME  CS:CODE,DS:CODE

             0100                         ORG     100H

 

             0100  8D 16 010A R                 LEA     DX, MESSAGE

             0104  B4 09                        MOV     AH, 9H                ; Функция вывода строки ДОС

             0106  CD 21                        INT     21H             ; Вывод строки на экран

             0108  CD 20                        INT     20H             ; Возврат в ДОС

 

             010A  9D E2 A0 20 AF E0 AE     MESSAGE DB      'Эта программа - тест', 10, 13, '$'

                 A3 E0 A0 AC AC A0 20

                 2D 20 E2 A5 E1 E2 0A

                 0D 24

             0121                   CODE    ENDS

                                          END

 

            Фиг. 5.18 Пример перевода .EXE в .COM

 

      Обратите внимание, что данная программа записана как файл типа

    .COM. На это указывает оператор ORG 100H, предшествующий первой

    команде. Остальная часть программы должна быть перемещаемым

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

    программы, которая будет преобразовываться в файл типа .COM.

 

      Ассемблирование и редактирование связей этой программы

    осуществляется обычным способом. Однако до запуска программы DEBUG

    нужно изменить в имени файла тип .EXE на тип .COM. Это необходимо

    сделать, так как программа DEBUG не позволяет записывать файл типа

    .EXE. На Фиг. 5.19 показана последовательность шагов, которую нужно

    выполнить. В данном примере вводится команда программы DEBUG без

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

    FIG5=18.COM, зато его отсутствие позволило продемонстрировать

    некоторые другие функции программы DEBUG. Команда N отладчика

    позволяет задать имя файла. После этого команда L выполняет

    загрузку файла в память. Если указать имя файла в команде DEBUG, то

    последняя выполнит все то же самое, что и команды N и L.

      Теперь, когда файл загружен, вы обнаружите, что в

    дествительности программа загрузилась, начиная со смещения 400H.

    Команда M сдвигает содержимое области памяти с 400H на 100H. Длина

    области, равная 1000H, была выбрана для гарантии того, что там

    поместится вся программа. Теперь программа соответствует формату

    файла типа .COM и может быть опять записана на дискету. Однако

    прежде, чем это сделать, вы изменяете содержимое регистра CX, чтобы

    он указал фактическую длину программы. При любом считывании и

    записи файлов на дискету, осуществляемых программой DEBUG, длина

    файла хранится в регистре CX. Так как файл типа .COM теперь намного

    короче, чем был файл типа .EXE, то мы можем сэкономить дисковую

                  B>A:ASM FIG5_18,,,;

                  The IBM Personal Computer Assembler

                  Version 1.00 (c)Copyright IBM Corp 1981

 

                  Warnings Severe

                  Errors      Errors

                  0     0

 

                  B>A:LINK FIG5_18,,,;

                  Ibm Personal Computer Linker

                  Version 1.10 (C)Copyright IBM Corp 1982

 

                   Warning: No STACK segment

                  There was 1 error detected.

 

                  B>RENAME FIGS5_18.EXE FIGS5_18.COM

 

                  B>A:DEBUG

                  -NFIGS_18.COM

                  -L

                  -M 400 1000 100

 

                  -U100 10F

 

                  06D7:0100 BA091    MOV  DX,0109

                  06D7:0103 B409          MOV  AH,09

                  06D7:0105 CD21          INT  21

                  06D7:0107 CD20          INT  20

                  06D7:0109 54            PUSH SP

                  06D7:010A 68            DB   68

                  06D7:010B 69            DB   69

                  06D7:010C 7320          JNC  012E

                  06D7:010E 69            DB   69

                  06D7:010F 7320          JNC  0131

 

                  -D100

 

                  06D7:0100  BA 09 01 B4 09 CD 21 CD-20 54 68 69 73 20 69 73   :..4.M!M' This is

                  06D7:0110  20 61 20 74 65 73 74 DA-0D 24 00 00 00 00 00 00    a test..$.......

                  06D7:0120  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00    ................

                  06D7:0130  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00    ................

                  06D7:0140  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00    ................

                  06D7:0150  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00    ................

                  06D7:0160  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00    ................

                  06D7:0170  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00    ................

 

                  -RCX

                   CX 0380

                  :120

 

                  -W

 

                  Writing 0120 bytes

                  -Q 

                   Фиг. 5.19 Пример преобразования из.EXE в .COM (начало)

                  >BDEBUG FIG5_18.COM

                  -R

 

                  AX=0000  BX=0000  CX=0120  DX=0000  SP=FFF0  BP=0000  SI=0000  DI=0000

                  DS=04B5  ES=04B5  SS=04B5  CS=04B5  IP=0100   NV UP DI NZ NA PO NC

 

                  -Q

 

                  B>FIG5_18

                  Эта программа - тест

 

      Фиг. 5.19 Пример преобразования из.EXE в .COM (продолжение)

 

    память, задав в регистре CX правильное значение для программы.

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

    преимущество использования файлов типа .COM. Программа DEBUG не

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

    отсутствует информация головной метки. В то же время файл типа .COM

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

    программу и вам нужно изменить в ней один или два байта без ее

    повторного ассемблирования (это называется "латанием" программы),

    то это можно сделать. Просто внесите в программу изменения,

    убедитесь, что регистр CX установлен правильно, и с помощью команды

    W запишите программу на дискету.

 

         Команда        Описание

      -------------------------------------------------

            D     Вывод содержимого памяти

            E     Изменить содержимое памяти

            F     Заполнить блок памяти

            G     Выполнять программу

            H     Шестнадцатеричное сложение и вычитание

            I     Считать и показать значение из порта

            L     Загрузить с диска

            M     Переслать блок памяти

            N     Назначить имя файла

            O     Вывести значение в порт

            Q     Выход из отладчика

            R     Вывести значения регистров

            S     Поиск строки байт

            T     Выполнить одну команду

            U     Дизассемблировать блок кода

            W     Записать данные на диск

      --------------------------------------------------

            Фиг. 5.20 Команды DEBUG

 

      В результате работы отладчика получился новый вариант программы

    FIG5=18.COM. Обращая внимание на состояние регистров, мы видим, как

    они устанавливаются в случае файла типа .COM. Сравните это с

    показанным на Фиг.5.17 состоянием регистров для файла типа .EXE.

    Разница между ними поможет уяснить некоторые различия между файлами

    типа .COM и типа .EXE.

      Имеются и другие команды, используемые при работе с отладчиком

    DEBUG. На Фиг. 5.20 приведен полный набор команд для работы с

    программой DEBUG. В руководстве по DOS подробно описаны эти

    команды.