Студопедия — Применение inline assembler
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Применение inline assembler






Цель работы: освоить применение inline assembler в среде Microsoft Visual Studio.

Оборудование: персональный компьютер, Microsoft Visual Studio.

Краткая теория

Integrated Development Environment (интегрированная среда разработки), или, сокращенно, IDE – это программный продукт, объединяющий текстовый редактор, компилятор, отладчик и справочную систему. Далее приводятся минимально необходимые сведения для начала работы с интегрированной средой. Более подробную информацию можно извлечь из справочной системы Microsoft Visual Studio.

Каждая программа, создаваемая в среде Microsoft Visual Studio, даже такая простая, как «Hello, World!», всегда оформляется как отдельный проект (project).

Проект – это набор взаимосвязанных исходных, заголовочных файлов и, возможно, файлов ресурсов, компиляция и компоновка которых позволяет создать исполняемую программу. Но разработчики Visual Studio пошли еще дальше, стремясь удовлетворить потребности не только программистов-одиночек, но и больших коллективов разработчиков программных продуктов. Так появилось понятие «решение» (Solution).

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

Для создания нового проекта типа «консольное приложение» необходимо выполнить следующие действия:

- Выбрать в строке меню следующую команду ФайлuСоздатьuПроект… (FileuNewuProject…).

- Открывается диалоговое окно мастера создания проектов (см. Рисунке 1).

Рисунок 1 – Окно «Создать проект» (New Project)

- Выберите в дереве типов проектов (Project types) тип Win32;

- Выберите в поле доступных шаблонов (Templates) тип шаблона «Консольное приложение Win32» (Win32 Console Application);

- введите имя проекта в текстовом поле «Имя» (Name), например, First;

- введите имя каталога размещения файлов проекта в текстовом поле «Расположение» (Location) (по указанному пути создается каталог, название которого совпадает с названием проекта);

- щелкните левой кнопкой мыши по кнопке OK.

- После щелчка запускается мастер приложений Application Wizard, который открывает диалоговое окно Win32 Console Application – название вашего проекта (см. Рисунок 2).

Рисунок - 2 Окно Win32 Application Wizard

Для завершения создания проекта щелкните левой кнопкой мыши по кнопке «Готово» (Finish).

Допустим, что в окне New Projects поле Name вы ввели имя проекта test1. После выполнения вышеуказанных шагов окно Visual Studio примет следующий вид (см. Рисунке 3).

 

Рисунок 3 – Окно Microsoft Visual Studio после создания проекта test1

Операции компиляции, компоновки и выполнения проекта могут быть выполнены либо через меню «Построение» (Build) и «Отладка» (Debug) главного окна, либо с помощью кнопок панели инструментов. Опишем кратко команды меню «Построение» (Build):

- «Построить решение» (Build Solution). Компилируется все файлы, в которых произошли изменения с момента последней компиляции. После компиляции происходит сборка (link) всех объектных модулей, включая библиотечные, в результирующий выполняемый файл. Сообщение об ошибках компоновки выводится в окне «Вывод» (OutPut). Если обе фазы компоновки завершились без ошибок, то созданный выполняемый файл с расширением.exe может быть запущен на выполнение.

- «Перестроить решение» (Rebuild Solution). Компилируются все файлы проекта независимо от того, были ли в них произведены изменения.

- «Очистить решение» (Clean Solution) – удаление из каталога, в котором располагаются файлы решения вспомогательных файлов Visual Studio.

- «Компилировать» (Compile) – данный пункт меню по принципу выполняемых действий практически аналогичен «Построить решение» (Build Solution). Но после выполнения компиляции не запускается сборка решения.

В меню «Отладка» (Debug) нам понадобиться одна команда «Начать отладку» (Start Debugging). При выполнении данной команды меню появляется окно, изображенное на Рисунке 4. Данное окно предлагает заново построить проект. После постройки проекта начнется его выполнение.

Рисунок 4 - Диалоговое окно появляющееся после выполнения команды «Начать отладку» (Start Debugging)

Операцию «Начать отладку» (Start Debugging) удобнее выполнять через соответствующие кнопки панели инструментов «Стандартный» (Standard), часть панели «Стандартный» (Standard) в увеличенном виде показана на Рисунке 5.

Start Debugging

 

Рисунок 5 – Панель инструментов «Стандартный» Standard

Функции ввода-вывода

Работа в среде Visual Studio (в режиме консольных приложений) сопряжена с определенными неудобствами, вызванными различными стандартами кодировки символов кириллицы в операционных системах MS DOS и Windows. Это происходит вследствие того, что весь ввод-вывод в консольных приложениях проходит в кодировке стандарта ANSII, а текст в исходных файлах, набираемый в текстовом редакторе Visual Studio имеет кодировку в стандарте ANSI. Поэтому для нормального вывода строки, содержащей буквы русского алфавита, эту строку необходимо сначала «пропустить» через функцию CharToOemA(), а уже потом отправлять на консольный вывод.

С учетом выше сказанного можно написать вывод русских букв следующем образом:

01 #include " stdafx.h"

02 #include < iostream>

03 #include < windows.h>

04 using namespace std;

05 char * RUS(const char * text);

06 int _tmain(int argc, _TCHAR* argv[])

07 {

08 cout< < RUS(" Привет");

09 system(" pause");

10 return 0;

11 }

12 char bufRus[250];

13 char * RUS(const char * text)

14 {

15 CharToOemA(text, bufRus);

16 return bufRus;

17 }

 

Рассмотрим приведенный листинг более подробно. В строках 1, 2 и 3 подключаются библиотеки. Первая необходима для всех файлов с расширением cpp, а вторая необходима для корректной работы функции русификации. В третьей строке описывается подключение библиотеки для организации операций ввода/вывода. На 04 строке подключается пространство имен std, это необходимо, для того чтобы применять операции чтения с клавиатуры (cin) и вывода на экран (cout) в сокращенном виде. Не в сокращенном виде название этих операций будет std:: cin и std:: cout соответственно.

Строка 05 содержит объявление функции с именем RUS. Строка № 6 содержит начало описания функции _tmain которая будет выполняться первой. Строка 8 выводит на экран слово «Привет», а 9 строка вызывает системную функцию Windows для остановки вашего приложения пока пользователь не нажмет на какую либо клавишу. Это действие необходимо производить перед каждым завершением вашей программы, в противном случае консольное окно закроется, и вы не успеете посмотреть выведенные на экран результаты работы программы. Строка 10 содержит оператор выхода из функции _tmain, что эквивалентно завершению программы. Строка 11 содержит символ } закрывающий блок описания функции _tmain (в строке 7 содержится символ { открывающий бок описания этой функции).

Строка № 05 и строки с 12 по 17 необходимы для работы функции русификации.

Помимо операторов языка С++ в программный код можно вставлять код на языке ассемблер. Это можно выполнить несколькими способами, с обязательным указанием служебного слова __asm:

1. __asm оператор ассемблера;

2. __asm

{

оператор1

оператор2

операторN

}

3. __asm оператор1

__asm оператор2

__asm операторN

Пример

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

 

#include " stdafx.h"

#include < iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

int num1, num2, rez;

cout< < " Enter num1=";

cin> > num1;

cout< < " Enter num2=";

cin> > num2;

Asm

{

mov eax, num1

add eax, num2

mov rez, eax

}

cout< < " Rezult: " < < rez< < endl;

system(" pause");

return 0;

}

Порядок выполнения

1. С помощью данных методических указаний освоить применение inline assembler в среде Microsoft Visual Studio.

2. Написать программу согласно варианту задания.

3. Оформить отчет.

Задания

1. Написать программу, сумму чисел введенных с клавиатуры.

Контрольные вопросы

1. Перечислите основные этапы процесса создания программы в IDE Visual Studio.

2. Опишите последовательность действий которые необходимо совершить что бы создать новый проект в IDE Visual Studio.

3. Перечислите способы создания вставок на языке ассемблер.

4. Для чего необходимо в тестовых примерах необходима строчка «using namespace std».

5. Расскажите про конвейер, реализованный в микропроцессорах фирмы Intel — i486.

6. Расскажите, для чего служит оператор cout.

7. Приведите пример использования оператора cout.

8. Расскажите, зачем необходимо подключать библиотеку iostream и подключать пространство имен std.

9. Для чего в С++ используется директива #include.

10. Расскажите о назначение и синтаксис операторов cout и cin.

11. Расскажите, для чего служит оператор cin.

12. Приведите пример использования оператора cin.

13. Расскажите, какими способами можно организовать операции ввода/вывода в C++.

14. Для чего в C++ служит директива __asm.

15. Расскажите о пользовательских регистрах реализованных в микропроцессорах фирмы Intel — i486.

 








Дата добавления: 2014-11-10; просмотров: 773. Нарушение авторских прав; Мы поможем в написании вашей работы!



Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Различия в философии античности, средневековья и Возрождения ♦Венцом античной философии было: Единое Благо, Мировой Ум, Мировая Душа, Космос...

Характерные черты немецкой классической философии 1. Особое понимание роли философии в истории человечества, в развитии мировой культуры. Классические немецкие философы полагали, что философия призвана быть критической совестью культуры, «душой» культуры. 2. Исследовались не только человеческая...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит...

Внешняя политика России 1894- 1917 гг. Внешнюю политику Николая II и первый период его царствования определяли, по меньшей мере три важных фактора...

Оценка качества Анализ документации. Имеющийся рецепт, паспорт письменного контроля и номер лекарственной формы соответствуют друг другу. Ингредиенты совместимы, расчеты сделаны верно, паспорт письменного контроля выписан верно. Правильность упаковки и оформления....

БИОХИМИЯ ТКАНЕЙ ЗУБА В составе зуба выделяют минерализованные и неминерализованные ткани...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия