Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 курс / Лекции / Лекция 24 - Интерфейс с языками высокого уровня.ppt
Скачиваний:
41
Добавлен:
18.02.2023
Размер:
238.59 Кб
Скачать

Лекция 24

Интерфейс с языками высокого уровня

Необходимость сочетания языков высокого и низкого

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

необходима реализация какого-либо специального алгоритма, который требует не тривиальной обработки данных и который трудно создать средствами языка высокого уровня;

необходимо обеспечить высокое быстродействие какого- либо алгоритма обработки данных или фрагмента программы.

Проблемы использования

Снижение переносимости программного обеспечения

Отсутствие единого стандарта на синтаксис языка Ассемблер

Зависимость от конкретной среды разработки

Visual Studio C++ – MASM

C++ Builder – TASM32

Pelles C – poasm.exe

Правила

Правила, которые необходимо соблюдать, при вызове Ассемблерных подпрограмм из программ на языках высокого уровня:

соглашение о присвоении имен;соглашение об используемой модели памяти;соглашение о вызове подпрограмм;

соглашение об именовании внешних идентификаторов;соглашение об именовании сегментов.

Соглашения о вызове процедур

Какие регистры должны сохраняться в вызываемых подпрограммах;

Метод передачи параметров в подпрограмму;

Порядок передачи параметров в подпрограмму;

Способ передачи аргументов: по значению или по ссылке;

Метод восстановления стека после вызова подпрограммы;

Способ передачи результата в вызывающую программу.

Соглашения о вызове процедур

Обозначени

Передача параметров

Восстановление

Декорирование

е

 

стека

 

__fastcall

Первые два параметра

Подпрограмма

@funcname@numbytes

 

через ECX и EDX,

 

 

 

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

 

 

 

налево

 

 

__pascal

Слева направо

Подпрограмма

Преобразование к

 

 

 

заглавным

__cdecl

Справа налево

Вызывающая

_funcname

 

 

программа

 

__stdcall

Справа налево

Подпрограмма

_funcname@numbytes

Способы использования Ассемблерных вставок

Использование встроенного Ассемблера

Подключение Ассемблерного модуля

Ассемблерные вставки

Вариант 1

Вариант 2

__asm команда1 параметры

__asm{

__asm команда2 параметры

команда1 параметры

команда2 параметры

__asm команда3 параметры

 

команда3 параметры

 

}

Ассемблерные вставки

Возможности:

использовать любой из регистров, предусмотренный в архитектуре IA-32;

обращаться к параметру функции по имени;

обращаться к меткам и переменным, которые были объявлены за пределами Ассемблерного блока;

использовать числовые константы, заданные или в стиле языка Ассемблер, или в стиле языка С;

использовать оператор ptr;использовать директивы EVEN и ALIGN.

Ассемблерные вставки

Ограничения:

Нельзя использовать директивы определения данных (DB, DW, …)

Нельзя использовать операторы Ассемблера (кроме PTR);

Нельзя использовать директивы STRUC, RECORD, WIDTH и MASK.

Нельзя использовать директивы препроцессора;

Нельзя обращаться к сегментами по имени (но можно через сегментные регистры)