- •Использование ассемблера при проектировании приложений
- •План работы
- •Указания к выполнению работы
- •Система программирования Visual Studio
- •Создание проекта с модулями на языке ассемблера
- •Правила формирования исходного текста программы на языке ассемблера
- •Выбор системы команд осуществляется с помощью директивы выбора типа процессора.. В системе команд Intel (ia32) допустимы следующие типы:
- •Установка модели памяти осуществляется директивой model.
- •Выделение памяти для стека осуществляется директивой stack.
- •Выделение памяти для хранения данных приложение осуществляется директивами начала секции данных - const, data, data?.
- •Область команд приложения задается директивой code.
- •Пример модуля на языке ассемблера
- •Трансляция и построение приложения
- •Отладка приложения
- •Контрольные вопросы
- •Порядок выполнения работы
Создание проекта с модулями на языке ассемблера
Для формирования проекта на языке низкого уровня обычно выбирается простое консольное приложение.

Рисунок 1.1 – Создание проекта
Если приложение будет полностью разрабатываться на языке ассемблера, формируют пустой проект.
После создания проекта необходимо установить режим использования транслятора языка ассемблера MASM рис.1.2.
Для включения в проект модулей на ассемблере, к проекту добавляется файл с расширением asm. Добавление можно осуществить через меню системы программирования, либо через проект приложения (рис. 1.3).
Для ассемблерного модуля необходимо разрешить также обработку транслятором MASM и при необходимости настроить режим работы MASM (рис. 1.4).


Рисунок 1.2 – Разрешение использования транслятора MASM.


Рисунок 1.3 – Добавление модуля на языке ассемблера


Рисунок 1.4 – Настройка транслятора MASM
Правила формирования исходного текста программы на языке ассемблера
В общем случае любое приложение можно представить в виде трех частей:
область команд – содержит команды программы;
область данных – выделенная память для хранения значений переменных;
область стека – используется для организации передачи параметров и вызова процедур и функций.
Эти три элемента приложения на языке ассемблера описываются явным образом с помощью директив ".CODE", ".DATA", ".STACK".
Структура модуля может быть представлена следующим образом:
1. выбор системы команд .
2. Задание модели памяти
3. Настройки трансляции
4. Выделение памяти под область стека
5. Объявление глобальных переменных приложения .
6. Область команд приложения.
7. Конец текста программы
Выбор системы команд осуществляется с помощью директивы выбора типа процессора.. В системе команд Intel (ia32) допустимы следующие типы:
.8086 – стандартный набор команд ;
.186 – Добавлены дополнительные команды работы со стеком (PUSHA, POPA, PUSH константа), с портами ввода-вывода (INS, OUTS), арифметические команды (IMUL, ROL/ROR, RCL/RCR, SAL/SAR, SHL/SHR с непосредственно указанным числом бит сдвига) и команды реализации языков высокого уровня (ENTER, LEAVE, BOUND).
.286 – добавлены 16 новых команд (LGDT,LIDT,LLDT,LMSW,LTR,SGDT,SIDT,SLDT,SMSW,STR,ARPL,CLTS,LAR,LSL,VERR,VERW) необходимых для работы со средствами управления памятью;
.386 – добавлены команды работы с 32-х разрядными данными;
.486 – добавлены команды управления кэшированием;
.586 – добавлены мультимедийные команды (MMX) и команды параллельной обработки данных (SSE), подключение набора команд Реntium.
При отсутствии установки типа процессора выбирается процессор типа 8086.
Установка модели памяти осуществляется директивой model.
Модель памяти задает вариант доступа к ячейкам памяти для хранения переменных и общий объем памяти, выделяемой для приложения.
Различают следующие модели памяти :
TYNI – крошечная модель (64Кб);
SMALL – малая модель (128 Кб);
LARGE – большая (1Мб);
HUGE – выровненная (1Мб);
FLAT – плоская(до 4Гб).
Модели TYNI, SMALL, LARGE, HUGE применяются для DOS приложение, FLAT для Windows приложений.
В директиве можно указывать тип соглашений по именам переменным и организации вызова подпрограмм и возврата управления из них. Например, директива
.MODEL flat, stdcall
указывает использование модели flat и использования стандартного соглашения по вызову подпрограмм ( как в языке С).
