Шаг 26.
Ассемблирование и компоновка программы. Получение COM-файлов

    На этом шаге мы рассмотрим порядок получения исполняемых файлов.

    Рассмотрим основные этапы перевода программы из ASCII-кода в машинный код. Текст программы на Ассемблере набирается в любом текстовом редакторе и сохраняется в файле с расширением ASM. Перевод этого файла в EXE-программу происходит в два этапа:

    Для ассемблирования используется программа MASM.EXE. При выполнении этой программы запрашиваются имена четырех файлов:

  1. SOURCE FILENAME - имя исходного файла.
  2. OBJECT FILENAME - имя OBJ-файла. В результате работы этой программы получается файл с расширением OBJ;
  3. SOURCE LISTING - имя файла, содержащего листинг трансляции. В этом файле находится, наряду с исходным текстом программы, его машинное представление;
  4. CROSS-REFERENCE - имя файла, содержащего ссылки команд на различные поля данных. Этот файл полезен при написании больших программ.

    Если в результате ассемблирования не обнаружено ошибок, то можно переходить к компоновке объектного модуля. Для ее проведения используется программа LINK.EXE. Она запрашивает имена четырех файлов:

  1. OBJECT MODULES - список OBJ-файлов, из которых компонуется окончательная программа;
  2. RUN FILE - имя исполняемого файла;
  3. LIST FILE - имя файла, где будут находиться таблица имен и размеров сегментов и ошибки, обнаруженные LINK;
  4. LIBRARIES - имена подключаемых библиотек.

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

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

      Warning: No STACK Segment. 

    Это сообщение можно игнорировать, так как определение стека в программе не предполагалось. Для преобразования EXE-файла в COM-файл используется программа EXE2BIN, общий вид использования которой следующий:

      EXE2BIN  <EXE-файл>  <COM-файл>      .

    Таким образом, на диске будут находиться два файла с одинаковыми именами, но различными расширениями.

    В качестве примера получим COM-файл из приведенной на предыдущем шаге программы.

  1. Получим OBJ-файл. Для этого сформируем следующую командную строку:
          MASM.EXE  PR25_1.ASM      .
    

        В результате на диске получим файл PR25_1.OBJ.

       

  2. Получим EXE-файл. Для этого сформируем следующую командную строку:
          LINK.EXE  PR25_1.OBJ      .
    

        В результате на диске получим файл PR25_1.EXE. Однако, помимо EXE-файла на экран будет выведено сообщение:

          Warning: No STACK Segment. 
    
    Поэтому нужно перевести полученный EXE-файл в соответствующий COM-файл (понятно, что следующий пункт не выполняется для создаваемых EXE-файлов).

       

  3. Получим COM-файл. Для этого сформируем следующую командную строку:
          EXE2BIN.EXE  PR25_1.EXE  PR25_1.COM    .
    
    В результате на диске получим файл PR25_1.COM, который можно выполнить. На экране появится число 8.


    Замечание. В некоторых случаях при выполнении последнего шага программа EXE2BIN генерирует следующее сообщение: Incorrect DOS version. В этом случае нужно обновить таблицу версий, воспользовавшись служебной программой SETVER.EXE, входящей в операционную систему Windows.

    Формат использования этой программы следующий (приводится содержимое командной строки):

      SETVER.EXE  EXE2BIN.EXE  6.22    

    Здесь 6.22 - номер версии DOS.

    Отметим также, что в последних версиях операционной системы Windows в папке Windows/System32 находится программа EXE2BIN.EXE. В этом случае можно воспользоваться ею и не обновлять таблицу версий.


    В программе из предыдущего шага на экран выводится число, состоящее из одной цифры. А как вывести на экран многозначное число? Ответ на этот вопрос мы дадим после рассмотрения других способов передачи управления (шаг 40: "Процедуры ввода и вывода многозначных чисел").

    На следующем шаге мы начнем рассматривать команды условного перехода.


Предыдущий шаг Содержание Следующий шаг