
- •Подключение ассемблерных модулей в программы на языке высокого уровня
- •1. Цель работы
- •2. Задание
- •3. Теоретическая часть
- •3.1. Конвенции вызова
- •Конвенции вызова
- •3.2. Использование ассемблера в программах на языках
- •3.3. Встроенный ассемблер
- •3.4. Подключение внешних ассемблерных модулей в программы на языках высокого уровня
- •3.5. Разработка тела процедуры на внешнем ассемблере
- •3.6. Отладка внешних ассемблерных модулей
- •4. Пример
- •5. Порядок выполнения работы
- •6. Содержание отчета
- •7. Контрольные вопросы
- •Библиографический список
- •Варианты заданий
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение
высшего профессионального образования
«Курский государственный технический университет»
Кафедра вычислительной техники
Подключение ассемблерных модулей в программы на языке высокого уровня
методические указания к лабораторной работе
по курсу «Системное программное обеспечение»
для студентов направления 230100.62
КУРСК 2009
УДК 004.43
Составитель: Е.Ю. Емельянова
Рецензент
Кандидат технических наук Панищев В.С.
Подключение ассемблерных модулей в программы на языке высокого уровня [Текст]: методические указания к лабораторной работе по курсу «Системное программное обеспечение» для студентов направления 230100.62/ Курск. гос. техн. ун-т; сост.: Е.Ю. Емельянова. Курск, 2009. 23 с.: ил. 2, табл.2, прил.1. Библиогр.: с.19.
Описывается методика создания внешних ассемблерных модулей для подключения к программам, написанным на Delphi, C++ Builder, Visual C++. Приводятся примеры.
Для студентов направления 230100.
Текст печатается в авторской редакции.
Подписано в печать . Формат 6084 1/16.
Усл.печ.л. . Уч.-изд.л. . Тираж 20 экз. Заказ . Бесплатно.
Курский государственный технический университет.
Издательско-полиграфический центр Курского государственного технического университета. 305040 Курск, ул. 50 лет Октября, 94.
1. Цель работы
Научиться подключать скомпилированные объектные модули, написанные на Ассемблере, в программы на языках высокого уровня: Delphi, C++ Builder, Visual C++.
2. Задание
На языке ассемблера создать файл, содержащий процедуру для экспорта в программы на языке высокого уровня. Индивидуальным вариантом определяется заголовок процедуры и выполняемые действия. Файл скомпилировать в OBJ-формат.
В средах программирования Win32 (по выбору: C++ Builder, Delphi или Visual C++) создать программу и подключить к ней ассемблерный модуль. Программа на языке высокого уровня используется для тестирования ассемблерной процедуры: вводит от пользователя исходные данные, вызывает ассемблерную процедуру и отображает результаты её вычислений.
Варианты заданий приведены в Приложении (с.20).
Порядок выполнения работы смотрите на с.18.
3. Теоретическая часть
3.1. Конвенции вызова
В программах на С++ вы наверняка встречали в заголовках функций слова __fastcall, __stdcall и т.п. Это названия конвенций вызова.
Конвенцией вызова (calling convention) называется соглашение о способе передачи параметров в функции и процедуры. В Win32 существует четыре стандартных конвенции вызова: cdecl, stdcall, pascal и fastcall (register). Все прочие конвенции вызова (safecall, winapi и пр.) являются псевдонимами стандартных конвенций.
На языках высокого уровня конвенция вызова объявляется так:
C++ Builder, Visual C++ :
В прототипе функции указывается модификатор __cdecl, __stdcall, __pascal, __fastcall. Например,
int __stdcall MyFunc(int x);
Если конвенция явно не указана, по умолчанию в С++ Builder используется stdcall, а Visual C++ cdecl.
В заголовочном файле windef.h все прочие модификаторы (WINAPI, APIENTRY, CALLBACK и пр.) переопределяются директивой #define на одну из стандартных конвенций вызова.
Delphi:
Конвенция указывается после заголовка подпрограммы, например:
Function MyFunc( x:integer ):integer; stdcall;
Если конвенция не указана, по умолчанию используется register.
Конвенции вызова различаются порядком передачи параметров в подпрограмму и способом очистки стека от не нужных уже параметров после выхода из процедуры (таблица 1).
Таблица 1