На этом шаге мы приведем примеры использования встроенного ассемблера.
Теперь поговорим о встроенном ассемблере. Это весьма мощное средство. Надо только иметь в виду, что встроенные ассемблеры часто несколько отстают от обычных ассемблеров в поддержке новых команд микропроцессоров. Это вполне объяснимо, так как разработка новой версии пакета, скажем C++ Builder, требует гораздо больше времени, чем пакета TASM. В примерах 1 и 2 мы используем команды арифметического сопроцессора.
program Project2; uses SysUtils; var d:double; //Функция вычисления синуса. function soproc (f:double):double; var res:double; begin //Ассемблерная вставка. asm FLD f FSIN FSTP res end; //Конец ассемблерной вставки. soproc:=res; end; begin d:=-pi; writeln(' X sin(X)'); while (d<=pi) do begin writeln(d:10:2,' ****',soproc(d):10:2); d:=d+0.1; end; readln; end.
Результат работы приложения изображен на рисунке 1:
Рис.1. Результат работы приложения
#include <iostream.h> void main() { double w=-3.14; //Прототип функции. double soproc(double); while(w<=3.14) { cout << w << " "; cout << soproc(w) << endl; w+=0.1; } } //Функция вычисления синуса. double soproc(double f) { double d; //Ассемблерная вставка. asm { FLD f FSIN FSTP d } return d; }
Результат работы приложения изображен на рисунке 2:
Рис.2. Результат работы приложения
На следующем шаге мы рассмотрим пример использования DLL.