IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Немного о вещественном асме., нубский вопрос
сообщение
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


У меня вопрос - почему не компилируется этот кусок кода?


procedure SinCos(var d, c, s: extended); assembler;
asm
fld d
fsincos
fstp c
fstp s
end;



И как его правильно переписать. Компилятор говорит что инвалид комбинатион оф опкоде энд операндс. Вот глобальные переменные можно передавать, локальные можно, а передаваемые в процедуру - нельзя! Что за странное ограничение?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Для Дельфей (для D7 именно) на QualityCentral в свое время выкладывался вот такой код (из JediVCL):
procedure FSinCos(var Sin, Cos: Extended; X: Extended); assembler;
asm
FLD X
FSINCOS
FSTP Extended PTR [EDX]
FSTP Extended PTR [EAX]
FWAIT
end;

var Rad, _Sin, _Cos: extended;
begin
Rad := Pi / 4;
FSinCos(_Sin, _Cos, Rad);
writeln(_Sin, ' ', _Cos);
readln;
end.

, только что проверил под D2009 - работает.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата(volvo @ 6.03.2009 17:33) *

Для Дельфей (для D7 именно) на QualityCentral в свое время выкладывался вот такой код (из JediVCL):
procedure FSinCos(var Sin, Cos: Extended; X: Extended); assembler;
asm
FLD X
FSINCOS
FSTP Extended PTR [EDX]
FSTP Extended PTR [EAX]
FWAIT
end;

var Rad, _Sin, _Cos: extended;
begin
Rad := Pi / 4;
FSinCos(_Sin, _Cos, Rad);
writeln(_Sin, ' ', _Cos);
readln;
end.

, только что проверил под D2009 - работает.


Да, это работает, спасибо. При замене EDX и EAX на С и S тоже работает. Только при замене порядка переменных уже работать перестаёт. А текущий порядок какой-то по-моему неестественный.
И ещё вопрос - команда FWAIT что делает, насколько тут нужна, и если я вместо вызова процедуры буду просто писать этот ассемблерный код, безо всяких вызовов - она тоже нужна?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.04.2024 10:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name