Сборщик tlink.exe формирует из объектных модулей файл, готовый для выполнения. Этот файл называется загрузочным модулем. Он может быть построен двумя способами. В зависимости от способа построения он имеет расширение EXE или COM.
Размещение программы в памяти. Для выполнения программы пользователя операционная система (точнее загрузчик COMMAND.COM) размещает коды программы в свободной оперативной памяти и добавляет перед программой состоящий из 256 байт блок, который называется префиксом программного сегмента (PSP). После размещения операционная система передаёт управление в точку входа этой программы (определенную как операнд директивы end). Операционная система при этом производит следующие действия:
1) определяет сегментный адрес префикса программного сегмента (PSP);
2) создает два блока памяти – блок памяти для переменных среды и блок памяти для PSP и программы;
3) в блок памяти переменных среды помещает путь, откуда была загружена программа;
4) заполняет поля PSP.
Как создать загрузочный носитель и резервную копию в программе Acronis True Image OEM? Часть вторая.
Загрузочный модуль размещается в памяти следующим образом:
Сначала идет PSP (256 байт). Затем коды программы. Затем — данные программы, после которых идут неинициализируемые данные. Стек размещается в конце сегмента стека (который в случае COM совпадает с сегментом кодов).
Регистры DS и ES после размещения программы пользователя указывают на PSP.
Загрузочный модуль, как файл, может существовать в одном из двух форматов: EXE и COM. Формат EXE отличается от COM тем, что он содержит специальный начальный блок, который называется заголовком и занимает не менее 512 байт.
При загрузке программы DS и ES указывают на PSP и запоминаются поля PSP, но дальнейшие действия зависят от формата файла.
Файл EXE загружается, начиная с адреса PSP:100h. В момент загрузки файла EXE регистры CS, IP, SS и SP инициализируются значениями, указанными в заголовке.
Регистры DS и ES указывают на PSP. CS устанавливается на начало сегмента кодов.
Файл COM состоит из единственного сегмента.
Образ файла COM помещается, начиная с адреса PSP:100h. Регистры CS и SS указывают на PSP, регистр SP – на конец сегмента PSP (т.е. SP=0FFFEh), регистр IP равен 100h.
В первых байтах PSP записывается команда int 20h (выход в операционную систему). Стало быть, если выполнить в начале программы EXE команды
то, в случае, если встретится команда ret, произойдет переход по адресу ES:0 на команду int 20h. Если же вместо ret использовать для возврата в операционную систему к
оманду int 20h непосредственно в программе, то, поскольку сегмент вызывающей программы будет отличаться от PSP, адрес возврата будет вычисляться некорректно.
В программе COM эти шаги инициализации регистра DS и записи нулевого слова в стек не нужны. Эти действия производит загрузчик. Выход можно осуществлять с помощью команды RET. Так как адресация начинается со смещения 100h от начала PSP, то программа COM должна содержать директиву ORG 100h (после оператора SEGMENT).
РЕАНИМАТОР НА ФЛЕШКЕ с всеми Windows, ДРАЙВЕРАМИ и ПРОГАМИ
Основное отличие формата COM от EXE заключается в том, что размер программы COM не больше 64 Кбайт и все данные, коды команд и область стека в ней размещаются в одном сегменте.
Пример. Рассмотрим программу, которая все символы строки превращает в соответствующие этим символам большие буквы
assume cs:codesg, ds:codesg, ss:codesg
text db ‘abcdefghijABCDEFGHIJ0123456789 $’
mov cx,31 ;число символов
b20: mov ah,[bx] ;если символ
cmp ah,’a’ ;не принадлежит диапазону
jb b30 ;от ‘a’ до ‘z’
cmp ah,’z’ ;то переходим к
ja b30 ;следующему символу
and ah,11011111b;очищаем бит 5
mov [bx],ah ;записываем новый символ
b30: inc bx ;bx указывает на
loop b20 ;следующий символ
mov ah,9 ;вывод строки
Источник: libraryno.ru
Схема процесса создания загрузочного модуля
Программа, подготовленная на языке высокого уровня, проходит несколько этапов:
1. этап. В текстовом редакторе пишется исходный код программы на алгоритмическом языке (source code) и сохраняется в файле с расширением *.pas.
2 этап. Трансляция, происходит преобразование исходного кода программы (source code) в объектный код (object code), т.е. происходит проверка синтаксиса написания операторов, и если ошибок в написании нет, осуществляется перевод на язык машинных кодов. Файл объектного кода имеет расширение *.obj;
Трансляторы предназначены для проверки правильности написания операторов и преобразования программ, написанных на языках программирования, в программы на машинном языке. Программа, подготовленная на каком-либо языке программирования, называется исходным модулем. В качестве входной информации трансляторы применяют исходные модули и формируют в результате своей работы объектные модули, являющиеся входной информацией для редактора связей. Объектный модуль содержит текст программы на машинном языке и дополнительную информацию, обеспечивающую настройку модуля по месту его загрузки и объединение этого модуля с другими независимо оттранслированными модулями в единую программу.
Трансляторы делятся на два класса: компиляторы (compiler) и интерпретаторы (interpreter). Компиляторы транслируют всю программу, но без ее выполнения. Интерпретаторы, в отличие от компиляторов, выполняют пооператорный перевод на машинный языки выполнение всей программы.
3. этап. Компоновка, когда происходит обработка объектного кода редактором связей, специальной программой осуществляющей построение загрузочного модуля (load module), пригодного к выполнению (рис 16.).
Компоновщик, или редактор связей — системная обрабатывающая программа, редактирующая и объединяющая объектные (ранее оттраслированные) модули в единые загрузочные, готовые к выполнению программные модули. Загрузочный модуль может быть помещен ОС в основную память и выполнен.
Получив исполняемый модуль, не спешите радоваться. К сожалению, устранение синтаксических ошибок еще не гарантирует того, что программа будет хотя бы запускаться, не говоря уже о правильности работы. Поэтому обязательным этапом процесса разработки является отладка. На этапе отладки, используя описание алгоритма, выполняется контроль правильности функционирования, как отдельных участков кода, так и всей программы в целом.
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Источник: studopedia.ru
Создание загрузочного модуля (компоновка программы)
После того как мы устранили ошибки и получили объектный модуль, можно приступать к следующему шагу — созданию исполняемого (загрузочного) модуля (к компоновке программы). Главная цель этого шага — преобразовать код и данные в объектных файлах в их перемещаемое выполняемое отображение.
Чтобы понять, в чём здесь суть, нужно разобраться, зачем вообще разделяют процесс создания исполняемого модуля на два шага — трансляцию и компоновку. Это сделано для того, чтобы можно было объединить вместе несколько отдельно оттранслированных исходных модулей в один модуль. При этом в функции компоновщика входит разрешение внешних ссылок (ссылок на процедуры и переменные) в этих модулях.
Результатом работы компоновщика является создание загрузочного файла с расширением .exe. После этого операционная система может загрузить такой файл в память и выполнить его.
Полный формат командной строки для запуска компоновщика достаточно сложен, но для начала вполне достаточно использования уплощенного формата:
TLINK [опции] список_объектных_файлов [,имя_загрузочного_модуля][,имя_файла_карты][,имя_файла_библиотеки]
опции — необязательные параметры, управляющие работой компоновщика.
список_объектных_файлов — обязательный параметр, содержащий список компонуемых файлов с расширением .obj. Файлы должны быть разделены пробелами или знаком “ + ”.
Например, TLINK/v prog + mdf + fdr
имя_загрузочного_модуля – необязательный параметр, обозначающий имя целевого исполняемого модуля. Если оно не указано, то имя загрузочного модуля будет совпадать с первым именем объектного файла из списка объектных файлов;
имя_файла_карты — необязательный параметр, наличие которого обязывает компоновщик создать специальный файл с картой загрузки. В ней перечисляются имена, адреса загрузки и размеры всех сегментов, входящих в программу;
имя_файла_библиотеки — необязательный параметр, который представляет собой путь к файлу библиотеки. Этот файл с расширением.lib создается и обслуживается специальной утилитой tlib.exe из пакета TASM. Данная утилита позволяет объединить часто используемые подпрограммы в виде объектных модулей в один файл.
Для того чтобы получить список опций программы tlink.exe, достаточно просто запустить её без указания параметров.
Если программа одна, то для получения загрузочного модуля достаточно ввести в командную строку:
TLINK/v prog.obj,,
Опция /v в команде указывает на необходимость сохранения отладочной информации в исполняемом файле и используется в случае отладки программы в среде отладчика. В результате компоновки получим исполняемый модуль prog.exe и файл карты памяти prog.map.
Источник: studopedia.su