Assembler для начинающих


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



Преодразование файла типа .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 подробно описаны эти
    команды.




Содержание раздела