- •Использование ассемблера при проектировании приложений
- •План работы
- •Указания к выполнению работы
- •Система программирования Visual Studio
- •Создание проекта с модулями на языке ассемблера
- •Правила формирования исходного текста программы на языке ассемблера
- •Выбор системы команд осуществляется с помощью директивы выбора типа процессора.. В системе команд Intel (ia32) допустимы следующие типы:
- •Установка модели памяти осуществляется директивой model.
- •Выделение памяти для стека осуществляется директивой stack.
- •Выделение памяти для хранения данных приложение осуществляется директивами начала секции данных - const, data, data?.
- •Область команд приложения задается директивой code.
- •Пример модуля на языке ассемблера
- •Трансляция и построение приложения
- •Отладка приложения
- •Контрольные вопросы
- •Порядок выполнения работы
Лабораторная работа 1
Использование ассемблера при проектировании приложений
Цель работы: знакомство с технологией применения языка низкого уровня при разработке программного обеспечения.
План работы
1. Изучить правила формирования проекта с использованием языка низкого уровня в системе программирования Visual studio 2010.
2. Изучить особенности формирования текста программы на языке ассемблера.
3. Освоить практические навыки отладки программы на уровне машинных команд.
Указания к выполнению работы
Система программирования Visual Studio
Microsoft Visual Studio — линейка продуктов компании Майкрософт, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Microsoft Windows, Windows Mobile, Windows CE, .NET Framework, .NET Compact Framework и Microsoft Silverlight.
Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и как отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода (как например, Subversion и Visual SourceSafe), добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программирования или инструментов для прочих аспектов процесса разработки программного обеспечения (например, клиент Team Explorer для работы с Team Foundation Server).
Использование языка ассемблера при разработке программ возможно несколькими способами:
встроенный ассемблер;
формирование отдельных модулей на языке ассемблера;
полная разработка приложения на языке низкого уровня.
В первом случае машинные команды вставляются в текст программы на языке высокого уровня с применением директивы _asm. Напрмер :
int _tmain(int argc, _TCHAR* argv[])
{
int t;
int h;
...
t=4;
h=5;
...
_asm mov eax, t
_asm add h,eax
...
return 0;
}
Если требуется вставка нескольких команд необходимо использовать блок фигурные скобки:
_asm
{
mov eax, t
add h,eax
}
При использовании встроенного ассемблера следует учитывать особенности использования регистров центрального процессора при трансляции программы. Кроме того, не все команды машинного уровня можно использовать после директивы _asm.
При написаниикода на языке C/C++ перед командами ассемблера не требуется сохранить регистры EAX, EBX, ECX ESI, EDX EDI.Другие регистрынеобходимо сохранять перед началом блока_asm блок и восстанавливать после окончания блока.
Если в проекте имеются отдельные модули на языке ассемблера, то необходимо согласовать использование модели памяти и правил формирования имен переменных и функций.
Отдельные модули на языке ассемблера применяются для формирования функций, которые не могут быть написаны на языке высокого уровня либо к которым предъявляются повышенные требования по эффективности (быстродействию).