Студопедия — Применение 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; просмотров: 770. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

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

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

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

Тема 5. Организационная структура управления гостиницей 1. Виды организационно – управленческих структур. 2. Организационно – управленческая структура современного ТГК...

Методы прогнозирования национальной экономики, их особенности, классификация В настоящее время по оценке специалистов насчитывается свыше 150 различных методов прогнозирования, но на практике, в качестве основных используется около 20 методов...

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

Функциональные обязанности медсестры отделения реанимации · Медсестра отделения реанимации обязана осуществлять лечебно-профилактический и гигиенический уход за пациентами...

Определение трудоемкости работ и затрат машинного времени На основании ведомости объемов работ по объекту и норм времени ГЭСН составляется ведомость подсчёта трудоёмкости, затрат машинного времени, потребности в конструкциях, изделиях и материалах (табл...

Гидравлический расчёт трубопроводов Пример 3.4. Вентиляционная труба d=0,1м (100 мм) имеет длину l=100 м. Определить давление, которое должен развивать вентилятор, если расход воздуха, подаваемый по трубе, . Давление на выходе . Местных сопротивлений по пути не имеется. Температура...

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