Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Обратите внимание на суффикс @1б в идентификаторе имени процедуры. Он указывает на общее количество байт, занимаемых параметрами (два двойных слова в регистрах ЕСХ и EDX И два двойных слова в стеке).
В основной программе на Visual С++ для вызова этой процедуры необходимо указать директиву fastcaii:
extern "С" int _fastcall Addlnts(int il, int i2, int i3, int i4);

Автор надеется, что читатель на этих примерах понял, как разрабатывается интерфейс процедур на ассемблере с языками высокого уровня. На этом этапе мы не работали с программами, передающими в качестве параметров адреса переменных. Автор сознательно отнес эту тему к концу главы, где будут рассматриваться более сложные примеры задач.
3.3. Использование процедур на ассемблере в языках высокого уровня
Использование языка ассемблера для написания больших серьезных программ — идея утопическая, если только вы не фанат этого языка и не располагаете достаточным количеством свободного времени. Однако улучшение показателей производительности программ на языках высокого уровня невозможно без привлечения средств ассемблера. При этом улучшается производительность программы и уменьшается размер программного кода.
В этой главе внимание акцентируется на совместном использовании ассемблера и программ на Delphi 7 и Visual С++ .NET. Будут рассмотрены вопросы разработки компиляции и сборки ассемблерных модулей с программами на языках высокого уровня.
Языки высокого уровня обладают мощными средствами для написания ассемблерных модулей прямо в исходном тексте программ при помощи встроенного ассемблера. Встроенный ассемблер языков высокого уровня мы рассмотрим подробнее в главе 6. Сейчас нас будет интересовать только разработка отдельных модулей средствами автономных компиляторов ассемблера и объединение (linking) таких модулей с программами на языках высокого уровня. Рассмотрим вначале, каким образом такие программы могут вызвать внешние процедуры.

Есть несколько вариантов объединения внешних модулей с языками высокого уровня. Первый вариант — использование объектных модулей. Ассемблер позволяет создавать объектные модули на этапе компиляции. Например, если у нас есть файл с исходным текстом на ассемблере myprog.asm, то после компиляции этого файла из командной строки:
tasm32 /ml myprog.asm
мы получим объектный модуль myprog.obj.
Файл с расширением OBJ (объектный модуль) можно использовать для объединения с основной программой на языке высокого уровня. В процессе объединения объектный модуль становится частью программы.

Второй вариант — создание из нашего объектного модуля библиотеки статической или динамической компоновки. Библиотеки представляют собой определенным образом скомпонованные модули, в которые могут входить один или несколько модулей. Особенно удобны библиотеки динамической компоновки DLL (dynamic-link library), позволяющие повторно использовать процедуры и экономящие размер программы. Использование библиотек будет рассмотрено подробно в главе 5.
А сейчас рассмотрим использование объектных модулей. В качестве примера возьмем какую-либо процедуру или функцию на ассемблере, которую можно было бы с пользой применить в программе, написанной на Delphi или С + + .


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru