После устранения ошибок на этапе трансляции и получении объектного модуля программы, с помощью программы компоновщика 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.
Модели памяти и упрощенные директивы определения сегментов
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.