Введение в технологию программирования на языке Ассемблера, страница 6

После устранения ошибок на этапе трансляции и получении объектного модуля программы, с помощью программы компоновщика Tlink.exe, приступают к созданию исполнительного или загрузочного модуля программы.  Дело в том, что объектный модуль может являться частью некоторой большой программы, и в процессе его объединения с другими ее модулями, разработанными другими операторами, да еще на разных языках, расположение ее в адресном пространстве, т.е. адресация его команд, может измениться. Задача объединения нескольких модулей, связывания их в единую программу, и окончательное размещение ее в адресном пространстве, возложена на программу компоновщик Tlink.exe (поэтому ее часто  называют редактором связи).

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

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

Tlink.exe [опции] список файлов объектных модулей [,имя исполняемого модуля] [,имя файла карты распределения памяти].

Обязательный параметр – список компонуемых объектных файлов с расширением «.obj», разделенных пробелами.

Из всех многочисленных опций, предлагаемых в компоновщике, для нас важным будет опция «/v», которая сохраняет отладочную информацию в исполняемом файле. Необязательный параметр имени файла распределения памяти указывает компоновщику о необходимости создания специального файла с расширением «.map», в котором отображаются имена, адреса загрузки и размеры сегментов, используемые при создании программы.

Имя исполняемого загрузочного модуля можно и не указывать. В этом случае оно будет соответствовать имени первого объектного модуля из приведенного списка с расширением «.exe».

Отладчик Turbo Debugger, который входит в пакет TASM, представляет собой оконную среду отладки не только ассемблерных программ, но и программ на уровне исходного текста на языках Pascal и С. Он дает возможность:

·  выполнять трассировку программы (то есть исполнять программу в пошаговом режиме) в прямом направлении;

·  выполнять трассировку программы в обратном направлении;

·  просматривать и изменять состояние аппаратных ресурсов процессора в течение пошагового выполнения программы.

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

                         2. Структура ассемблерной программы.

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

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

При этом все эти поля необязательны.

Первое поле строки ассемблерной программы отводится под метку. Меткой может служить любая комбинация букв английского алфавита и цифр, но метка не должна начинаться с цифры. Можно, но не желательно вводить в состав метки также символы _, $, @, ?.

Во втором поле могут находиться:

·  директивы (псевдокоманды)– указанияпрограмме Ассемблера на выполнение некоторых действий;

·  команды (инструкции), представленные в символах кода ASCII, которые является аналогами машинных кодов программ;

·  макрокоманды (макроопределения) – идентификаторы, которым соответствует текстовая строка или некоторый блок программного кода, часто используемый в программе.

В третьем поле – поле операндов, располагаются требуемые командой или директивой операнды.

И, наконец, в поле комментариев, которое обязательно отделяется символом «;», пользователем может быть написан любой текст. Комментарии Ассемблером при трансляции игнорируются.

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

·  Метка начинается с первой позиции строки.

·  Директивы, команды или макрокоманды размещаются, начиная с 17 позиции (две табуляции).

·  Операнды размещаются, начиная с 25 позиции (три табуляции).

·  Комментарии достаточно короткие размещаются с 41 или 49 позиции. Однако если строка состоит только из комментариев, то ее начинают с первой позиции.

Если метка располагается перед командой процессора, после нее сразу же ставится оператор «:», который указывает процессору, что надо создать переменную с этим именем, содержащую адрес текущей команды. Если же метка стоит перед директивой Ассемблера, то двоеточие не ставится (часто такую метку называют именем). В этом случае она является идентификатором, отличающим данную директиву от других одноименных директив и обычно оказывается одним из операндов этой директивы.

Например:

                     label:         mov  ds,ax ; метка перед командой процессора

но

                     truth           equ   25     ; метки перед директивами

                     number      db     7Ah    ; Ассемблера 

                     data1          db     0AFh  ;

Обычно общая структура ассемблерной программы начинается со строк комментария, определяющего название программы. В следующей строке располагают директиву, указывающую Турбо Ассемблеру  режим его работы: MASM или IDEAL. При этом по умолчанию используется режим MASM. 

    Модели памяти и упрощенные директивы определения сегментов