Немного о вещественном асме., нубский вопрос |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
Немного о вещественном асме., нубский вопрос |
TarasBer |
6.03.2009 16:29
Сообщение
#1
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
У меня вопрос - почему не компилируется этот кусок кода?
И как его правильно переписать. Компилятор говорит что инвалид комбинатион оф опкоде энд операндс. Вот глобальные переменные можно передавать, локальные можно, а передаваемые в процедуру - нельзя! Что за странное ограничение? -------------------- |
TarasBer |
6.03.2009 16:54
Сообщение
#2
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Да, ещё вопрос - как заставить Дельфи показать регистры сопроцессора и показать то, что он скомпилировал, в виде ассемблерного кода?
-------------------- |
volvo |
6.03.2009 16:54
Сообщение
#3
|
Гость |
У меня не говорит, что неправильные операнды, жалуется, что не знает такой инструкции FSINCOS... Компилятор какой? Я вот это откомпилировал и выполнил на TP7 без проблем:
{ Код от Merlyn-а } Вот результат: 7.07106781186548E-0001 7.07106781186548E-0001 |
TarasBer |
6.03.2009 17:21
Сообщение
#4
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
У меня не говорит, что неправильные операнды, жалуется, что не знает такой инструкции FSINCOS... А это команда из более позднего видимо сопроцессора. А у Паскаля 287 это вершина технического прогресса. Видимо db $CD,$35,$FB и есть код этой команды, насильно так сказать, заставим Паскаль это компилировать. Цитата Компилятор какой? А, Дельфа... Седьмая. Цитата Я вот это откомпилировал и выполнил на TP7 без проблем: { Код от Merlyn-а } Вот результат: 7.07106781186548E-0001 7.07106781186548E-0001 Как хитро он переменные из регистров грузит. Через промежуточный регистр оказывается... А Merlyn, кстати, раз знает код команды, не может переписать это в кодах полностью? А то, говорят, это единственная возможность делать макросы на Паскале. Издевательство такое утончённое. Добавлено через 4 мин. У меня этот код почему-то ошибку при выполнении выдаёт. Только окно сразу же закрывается, а аль-эф-5 в дельфе нету, не посмотреть что за ошибка. -------------------- |
volvo |
6.03.2009 17:33
Сообщение
#5
|
Гость |
Для Дельфей (для D7 именно) на QualityCentral в свое время выкладывался вот такой код (из JediVCL):
procedure FSinCos(var Sin, Cos: Extended; X: Extended); assembler;, только что проверил под D2009 - работает. |
TarasBer |
6.03.2009 17:41
Сообщение
#6
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Для Дельфей (для D7 именно) на QualityCentral в свое время выкладывался вот такой код (из JediVCL): procedure FSinCos(var Sin, Cos: Extended; X: Extended); assembler;, только что проверил под D2009 - работает. Да, это работает, спасибо. При замене EDX и EAX на С и S тоже работает. Только при замене порядка переменных уже работать перестаёт. А текущий порядок какой-то по-моему неестественный. И ещё вопрос - команда FWAIT что делает, насколько тут нужна, и если я вместо вызова процедуры буду просто писать этот ассемблерный код, безо всяких вызовов - она тоже нужна? -------------------- |
volvo |
6.03.2009 18:05
Сообщение
#7
|
Гость |
Такой порядок - более приемлемый:
procedure FSinCos(X: Extended; var Sin, Cos: Extended); assembler;? Так тоже работает... Цитата команда FWAIT что делает, насколько тут нужна Этак команда заставляет процессор ждать, пока со-процессор не закончит свои действия (в данном случае - сохранение результата). Все-таки желательно этого дождаться, если не хочешь потом иметь глюков с частично записанным, а частично - нет результатом вычисления (по той простой причине, что ты не подождал сигнала от FPU об окончании сохранения, а начал использовать их раньше...) |
Текстовая версия | 29.04.2024 7:35 |