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

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


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





Листинг 2.10. Шаблон 32-разрядного консольного приложения, созданного с помощью Мастера приложений Delphi 7
program generic;
{$APPTYPE CONSOLE}
uses
SysUtils;
begin
{ TODO -oUser -cConsole Main : Insert code here }
end.

Как использовать язык ассемблера в таком приложении, не ограничивая его возможности рамками среды Delphi? В Delphi предусмотрена замечательная возможность разрабатывать и использовать процедуры, целиком написанные на ассемблере, прямо в основной программе так, как будто бы они были отдельными объектными модулями. Процедура, написанная целиком на ассемблере, объявляется специальной директивой assembler и может выглядеть так, как показано в листинге 2.11.
Листинг 2.11 .Процедура, целиком написанная на ассемблере
function SumTwo(II: Integer; 12: Integer): Integer; assembler;
asm
mov EAX, DWORD PTR II
add EAX, DWORD PTR 12
end;

В этой простой процедуре выполняется операция сложения двух целых чисел и результат, как обычно, возвращается в регистре ЕАХ. Поскольку целочисленные переменные типа integer имеют размер двойного слова, то смысл операторов процедуры становится понятным. Теперь можно собрать консольное приложение (листинг 2.12), выполняющее вывод на экран суммы двух чисел.
Листинг 2.12. Консольное приложение, выполняющее суммирование двух чисел j program generic;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
II, 12, ISUM: Integer;
function SumTwo(II: Integer; 12: Integer): Integer; assembler;
asm
mov EAX, DWORD PTR II
add EAX, DWORD PTR 12
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
11 := -23;
12 := -56;
ISUM := SumTwo(II, 12);
WriteLn(ISUM);
ReadLn;
end.

Исходный текст приложения понятен для опытных программистов и не требует дополнительных комментариев. Переделка подобной программы для компиляции в С + + потребует всего несколько минут. И еще одно замечание. Все демонстрационные программы этой главы будут использовать только вывод данных на экран дисплея. Чтобы избежать лишней сложности примеров, мы не будем рассматривать в этой главе операции, связанные с файловым вводом-выводом, манипуляции с памятью и процессами.

Рассмотрим далее наиболее полезные алгоритмы и процедуры на языке ассемблера. Начнем с математических вычислений. Практически все приложения используют те или иные операции, связанные с математическими вычислениями, начиная от простейших (сложение и вычитание) и заканчивая решением систем уравнений. Математические операции могут использовать как обычные команды процессора, например add, sub, mui и div, так и специальные команды математического сопроцессора.


 
 
 

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