Ассемблер в паскале

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ассемблер в паскале

Сообщение vada » 14.10.2017 21:53:27

Перевожу старый проект на 64-х разрядную платформу. Есть такая функция
Код: Выделить всё
function ArcTan2(Const y,x : Double) : Double; assembler;
asm
  FLD Y
  FLD X
  FPATAN
  FWAIT
end;

Компилятор говорит что я не прав
Код: Выделить всё
tools.pas (134,3) Error: Asm: [fld xmmreg] invalid combination of opcode and operands


Писал эту функцию лет 15-20 назад с тех пор ассемблером не пользовался. Ну и не помню ничего. Порылся по форумам про asm 64, но ничего толкового кроме как:
Код: Выделить всё
function ArcTan2(Const y,x : Double) : Double; assembler;
asm
  FLD   QWORD PTR Y
  FLD   QWORD PTR X
  FPATAN
  FWAIT
end;


Ну тоже самое. Компилятор ругается.
Знатоки ассемблера, подскажите что не так.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 649
Зарегистрирован: 14.02.2006 13:43:17

Re: Ассемблер в паскале

Сообщение ElectroGuard » 14.10.2017 22:49:11

В 64х режиме нужно использовать XMM.
ElectroGuard
новенький
 
Сообщения: 50
Зарегистрирован: 03.06.2016 12:10:22

Re: Ассемблер в паскале

Сообщение runewalsh » 15.10.2017 17:00:26

В исходниках FPC под x64 то же самое, только fldt вместо fld. Компилировать не пробовал, есличо.
Аватара пользователя
runewalsh
постоялец
 
Сообщения: 320
Зарегистрирован: 27.04.2010 00:15:25

Re: Ассемблер в паскале

Сообщение Vadim » 16.10.2017 08:01:16

vada
Некоторые команды ассемблера в 64-ёх битном режиме заблокированы. В 32-ух работают, а в 64-ёх - нет. Как-то сталкивался с таким. Проверьте на всякий случай.
Vadim
долгожитель
 
Сообщения: 2618
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Ассемблер в паскале

Сообщение zub » 16.10.2017 10:39:03

>>лет 15-20 назад
выкидывай ее нафиг, uses math и вперед
zub
долгожитель
 
Сообщения: 2261
Зарегистрирован: 14.11.2005 23:51:26

Re: Ассемблер в паскале

Сообщение vada » 16.10.2017 13:41:18

выкидывай ее нафиг, uses math и вперед

Так и сделал. Спасибо! Правда там еще есть чуток ассемблерный вставок. Все в топку!!!!!
Аватара пользователя
vada
энтузиаст
 
Сообщения: 649
Зарегистрирован: 14.02.2006 13:43:17

Re: Ассемблер в паскале

Сообщение zub » 16.10.2017 14:39:07

>>Все в топку!!!!!
Без иронии, в 99% ассемблер можно выкинуть (темболее 20ти летней давности) без видимых потерь в производительности и с выиграшом в поддержке
Недавно сталкивался с наколенной поддержкой юникода полностью написаной на асемблере... хорошо что сейчас не 20лет назад))
zub
долгожитель
 
Сообщения: 2261
Зарегистрирован: 14.11.2005 23:51:26

Re: Ассемблер в паскале

Сообщение ElectroGuard » 17.10.2017 14:11:39

Верное решение.
ElectroGuard
новенький
 
Сообщения: 50
Зарегистрирован: 03.06.2016 12:10:22

Re: Ассемблер в паскале

Сообщение Дож » 20.10.2017 08:00:33

Отмечу, что Math очень жирный (+40KB).
Код: Выделить всё
-rwxrwxrwx   1 user     group       84480 Oct 20 06:54 with_math.exe
-rwxrwxrwx   1 user     group       41472 Oct 20 06:56 without_math.exe


with_math.pas
Код: Выделить всё
{$MODE OBJFPC}
uses
  math;
begin
  Writeln(ArcTan2(4, 5));
end.


without_math.pas
Код: Выделить всё
{$MODE OBJFPC}

function ArcTan2(Y, X: Single): Single;
begin
    if (x=0) then
      begin
        if y=0 then
          Result:=0.0
        else if y>0 then
          Result:=pi/2
        else if y<0 then
          Result:=-pi/2;
      end
    else
      Result:=ArcTan(y/x);
    if x<0.0 then
      Result:=Result+pi;
    if Result>pi then
      Result:=Result-2*pi;
end;

begin
  Writeln(ArcTan2(4, 5));
end.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 677
Зарегистрирован: 12.10.2008 16:14:47

Re: Ассемблер в паскале

Сообщение LearnMagic » 24.10.2017 17:47:26

vada писал(а):Знатоки ассемблера, подскажите что не так.

Не сильный знаток, но возможно поможет
{$ASMMODE INTEL}
LearnMagic
новенький
 
Сообщения: 36
Зарегистрирован: 10.11.2016 23:13:38


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru