Шаг 92.
Встроенный ассемблер

    На этом шаге мы приведем примеры использования встроенного ассемблера.

    Теперь поговорим о встроенном ассемблере. Это весьма мощное средство. Надо только иметь в виду, что встроенные ассемблеры часто несколько отстают от обычных ассемблеров в поддержке новых команд микропроцессоров. Это вполне объяснимо, так как разработка новой версии пакета, скажем C++ Builder, требует гораздо больше времени, чем пакета TASM. В примерах 1 и 2 мы используем команды арифметического сопроцессора.


    Пример 1. Используем директиву ASM и команды сопроцессора для нахождения значения функции синуса в программе, созданной в среде Delphi 6 (консольное приложение).
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. Результат работы приложения


    Пример 2. Тот же пример, но переписанный для использования в среде программирования Borland C++ 4.5.
#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.




Предыдущий шаг Содержание Следующий шаг