Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №1_2012.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
140.29 Кб
Скачать

Лабораторная работа №1.

Изучение инструментальных средств для

программирования на языке Assembler (4 часа)

1. Цель работы

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

2. Программа работы

2.1. Изучить основные теоретические сведения, приведенные в методических указаниях и дополнительной литературе по работе с программным пакетом MASM.

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

2.3. Исследовать возможности пакета MASM по вводу, редактированию, ассемблированию и отладке на примере предлагаемых тестовых программ.

2.4. Ознакомиться с правилами применения и рассмотреть особенности работы команд суммирования ADD, ADC, INC и вычитания SUB, SBB, DEC, NEG, а также команды сравнения СМР.

2.5. Переписать в отчет и выполнить программы 1 и 2, приведенные в п.4.

3. Основные теоретические сведения

Язык программирования Assembler, представляет собой максимально приближенный к процессорному уровню инструмент для работы с программами. Особенностью языка Assembler является система записи программы с детализацией до отдельной процессорной команды, процессорного регистра и физических адресов ячеек памяти. В Assembler’е используется фактически символьная форма записи машинного языка: вместо цифровых кодов операций выписываются знаки операций или их словесные названия, вместо адресов – имена, а константы, при этом, можно записывать в десятичной системе счисления. Составленная в таком виде программа вводится в компьютер в текстовом виде и подается на вход транслирующей программе, называемой ассемблером. Ассемблер переводит текст программы непосредственно в процессорные команды.

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

В настоящее время на Assembler’е, как правило, пишутся драйверы нижнего уровня для работы непосредственно с аппаратными средствами вычислительных систем и их периферии, микроядро ОС, BIOS микропроцессорных систем, программы для специализированных систем – встроенных систем на микроконтроллерах и специализированных микропроцессорах, управляющих работой разнообразных устройств.

3.1. Алгоритм работы с ассемблером

Рассмотрим, по какому алгоритму производится работа с ассемблером в общем случае.

1. Ввод программы.

Исходный текст программы вводится в текстовом редакторе или, при возможности, средствами используемого программного пакета ассемблера. Желательно соблюдать определенный формат текстовых блоков: метки, команды, операнды и комментарии желательно выравнивать в колонки для удобочитаемости программы при дальнейшей ее отладке.

Ввод программы завершается проверкой его правильности.

2. Трансляция исходного кода в объектный код.

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

Как правило, в процессе трансляции, ассемблер делает два просмотра или «прохода» исходного текста. В первом проходе ассемблер просматривает всю исходную программу и строит таблицу идентификаторов, используемых в программе – имен полей данных и меток программы и их относительных адресов в программе. Кроме этого в первом проходе подсчитывается ориентировочный объем объектного кода, но сам объектный код не генерируется.

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

3. Компоновка исполняемого кода программы.

Компоновка включает в себя преобразование OBJ-модуля в исполнимый модуль, содержащий машинный код. При этом компоновщик выполняет следующее:

-завершает формирование в OBJ-модуле адресов, которые остались неопределенными после ассемблирования;

- компонует, если необходимо, более одного отдельно ассемблированного модуля в одну исполняемую программу или две или более ассемблерных программ или ассемблерную программу с программами, написанными на языках высокого уровня;

- инициализирует ЕХЕ-модуль командами загрузки для выполнения.

4. Тестирование исполняемой программы.

После того как будет получен окончательный машинный код написанной программы, наступает этап тестирования и отладки. На этом этапе производят тестовые запуски программы в машинном коде и в случае необходимости вносят изменения в программу. Однако корректируют при этом исходный текст на Assembler’е ассемблируют его в новый OBJ-модуль и компонуют полученный объектный модуль в новый исполняемый ЕХЕ-модуль.

Предложения языка Assembler описывают команды или псевдокоманды – директивы. Предложения команды задают машинные команды вычислительной системы, обработка ассемблером команды приводит к генерации машинного кода. Обработка же директивы приводит к управлению самим ассемблером. Каждое новое предложение языка начинается с новой строки и занимает, как правило, одну строку. Формат записи предложения может быть жестким или свободным. При жестком формате компоненты предложения должны располагаться в фиксированных позициях строки. Как правило, при жестком формате записи, для упрощения форматирования текста программы создаются бланки.

При свободном формате записи программ допускается любое количество пробелов между составляющими предложения.

В общем случае предложения языка Assembler состоят из следующих компонент:

- метка или имя фрагмента программы (подпрограммы, процедуры);

- мнемоника команды;

- операнды, необходимые для выполнения команды;

- комментарии.

Метка или имя являются необязательными компонентами. Метка - точка программы на которую передается управление, следовательно, метка стоит в предложении, содержащем команду. Имя – имя переменной программы, или ячейки памяти. Как правило, метка и имя отличаются синтаксически – после метки ставится двоеточие, а после имени – нет.

Физический смысл метки и имени одинаков – они обозначают адрес памяти, по которому располагаются необходимые для процессора данные. Во всех случаях, когда ассемблер встречает в программе имя или метку, он заменяет ее на адрес той ячейки памяти, которую эта метка именует. Способ преобразования имени в значение адреса зависит от принятых способов адресации для конкретного процессора.