Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2014- СП 3.0 ЛАБЫ ОБЯЗАТ.doc
Скачиваний:
99
Добавлен:
01.03.2016
Размер:
896 Кб
Скачать
      1. Состав пакета масм

Физически пакет МАСМ разворачивается в папку MASM32 корневой папки указанного пользователем диска, традиционно это D:\ MASM32. Следует сказать, что как установленное приложение МАСМ в реестре не регистрируется. То есть пакет работоспособен сразу после установки всех его файлов.

Рисунок 2.1 –Корневая папка пакета МАСМ

Папки имеют назначение: bin – основные исполняемые файлы пакета (*.bat, *.exe и *.dll); help – chm-файлы электронной помощи по основным компонентам пакета; include и lib – включаемые inc-файлы и файлы библиотек *.lib. И то, и другое обеспечивает интерфейс создаваемых ассемблерных программ с ОС Windows; macros – набор заготовок и шаблонов макросов для широкого круга практических задач.; tutorial – большое количество готовых примеров asm-программ на самые разные темы. Пригодны как для изучения программирования на МАСМ, так и в качестве заготовок для собственных разработок.

Папка m32lib заслуживает того, чтобы о ней сказать отдельно. Это папка, в которой сложены ИСХОДНЫЕ ТЕКСТЫ процедур, применяемых в пакете. Полезность этой папки при обучении ассемблеру переоценить просто невозможно. Поэтому в будущем, когда вы при разборе очередного примера встретите вызов незнакомой функции, то сразу ищите в m32lib asm-файл с аналогичным именем, открывайте его, читайте и все тайны вам откроются.

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

      1. Последовательность создания исполняемого ехе-модуля на масм

  1. Сначала создаётся исходный текст программы на ассемблере, предположим, это myprog.asm. Инструментом является текстовый редактор, например, Notepad++.

  2. Дальше выполняется трансляция (компиляция). Примечание о терминах. Перевод исходного текста программы в машинопонятный код вообще-то называется «трансляция» (английское to translate означает «перевести»). Но трансляцию возможно осуществлять в режиме «компиляции» и в режиме «интерпретации». Ассемблерный ML.EXE, Си-шный GCC.EXE и подобные им в итоге создают исполняемые ехе-файлы и поэтому они – трансляторы типа «компиляторы». А вот, к примеру, PHP.EXE (применяется в веб-программировании) исходный текст интерпретирует – читает оператор, сразу переводит в машинный код и тут же отдает на исполнение; и так пока не выполнит всю программу. Поэтому PHP.EXE и подобные ему – трансляторы типа «интерпретаторы». В нашем курсе термины «компиляция» и «трансляция» следует считать синонимами. Компиляция выполняется как обработка исходника myprog.asm программой-компилятором ML.EXE. Компилятор выполняет свою работу в два шага – макрорасширение и перевод в машинный код.

      1. Макрорасширение выполняет часть компилятора, называемая «макрогенератор». Она внешне (как файл) никак не представлена, просто это часть функциональных возможностей компилятора ML. Суть её работы состоит в том, что она заменяет встречающиеся в исходнике имена подставляемых файлов и макросов их полными текстами. Разумеется, это здорово увеличивает объем исходного текста (отсюда термин «макрорасширение»). Вся эта работа выполняется по умолчанию в оперативной памяти, но у ML.EXE есть режим выполнения с ключом /PE, в результате которого можно создать на диске расширенный макрогенератором исходный файл и, таким образом, наглядно увидеть сделанную им работу.

      2. Перевод расширенного текста в машинный код выполняет транслятор, являющийся основной функциональной частью ML.EXE. Согласно синтаксису ассемблера, исходный текст программы разделён на секции кода (там описываются команды) и данных (там описываются статические числовые и строковые переменные программы). Перевод (трансляция) выполняется для каждой секции в отдельности. Ссылки по адресам из одной секции в другую на этом этапе просто заполняются нулями и имеют статус «неразрешённых» (недовычисленных) внешних ссылок. Из сказанного понятно, что на этом этапе оттранслированные секции пока логически никак не связаны друг с другом. Вместе с сопутствующими данными эти секции записываются в двоичный файл специального формата COFF (Common Object File Format), называемый «объектным». По традиции этим файлам присваивают расширение obj. Для конкретности предположим, что результатом компиляции исходного файла myprog.asm стал объектный файл myprog.obj.

  1. Последний шаг – компоновка. Компоновка (иногда используют кальку с английского - «линковка») – это фактически «сборка» ехе-модуля из отдельных секций, которые извлекаются из объектных файлов и кода подключаемых объектных библиотек. Этих исходных контейнеров секций (объектников *.obj и библиотек *.lib) может быть, в принципе, сколько угодно. В процессе компоновки все однородные секции объединяются - отдельные секции кода сливаются в одну соединённую секцию кода, аналогично отдельные секции данных соединяютсяв общую секцию данных. Общая секция кода и общая секция данных соединяются вместе в т.н. «загрузочный модуль». После этого компоновщик LINK.EXE «разрешает» (вычисляет окончательно) неразрешенные (до этого окончательно недоопределенные) внешние ссылки. Поскольку в загрузочном модуле все точки ссылок (обращений) по адресам и ответные точки (чтения-записи или передачи управления) уже «легли на своё место», то компоновщик имеет возможность измерить байтовые дистанции между тем и другим. Именно они и вписываются компоновщиком в поля «неразрешённых (до этого момента) внешних ссылок». С этого момента секции становятсялогически связаннымидруг с другом. Наконец, компоновщик создает на диске выходной файл ехе-модуля. Сначала он формирует в начале этого файла т.н. «ехе-префикс» - структуру со всякого рода служебной информацией. Потом, если говорить упрощенно, после заголовка в ехе-файл переписывается из оперативной памяти загрузочный модуль.

После этого ехе-модуль можно вызвать на исполнение обычными средствами операционной системы