|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.11.2009, 20:06 | #1 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
работа с FPU
в общем у меня задача проверить явл ли точки a b c вершинами правильного треугольника. Вопрос состоит вот в чем. Я посчитал то что мне надо, а конкретно dist(a,b) - dist(b,c) и dist(a,b) - dist(a,c) . Сохранил их в st(0) и st(1). Далее буду говорить что st(0) = A-B , st(1) = A-C
дальше мне надо найти модуль этих выражений, я загружаю на стек переменную в которой хранится 0 для следующего сравнения tmp: .double 0.0 ... fld qword ptr tmp но оказалось что стек переполнен и я не могу загрузить 0. Остальные регистры мне теперь не нужны я с ними уже прооперировал как мне было надо. Как можно освободить стек. И где после выталкивания со стека будут хранится A-B и A-C. Знаю, что есть такая команда fstp , но как её использовать правильно не понял. Последний раз редактировалось NiCola999; 03.11.2009 в 20:09. |
03.11.2009, 21:01 | #2 | ||
Заснувший
Форумчанин
Регистрация: 13.03.2009
Сообщений: 213
|
Цитата:
Код:
ДО ПОСЛЕ st0 = st1 st1 = st2 st2 = st3 ..... st7 = st0 В вашем случае st(7) = A-B , st(0) = A-C Не совсем понятно выражение Цитата:
А для загрузки нуля в ФПУ существует команда fldz. |
||
03.11.2009, 21:03 | #3 | |
equ asm
Участник клуба
Регистрация: 02.05.2009
Сообщений: 1,605
|
fstp param , где param это переменная.
Ктоме того, но это уже скорее оптимизация, существует команда fldz для загрузки нуля. А еще существует команда fabs для получения модуля. Цитата:
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4 Последний раз редактировалось Goodwin98; 03.11.2009 в 21:06. |
|
03.11.2009, 21:22 | #4 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
спасибо ! я и не знал что есть fabs и fldz
стек может быть переполнен. Вот как мне поступить в моем случае допустим я сделаю так fstp st(1) то есть st(1) вытолкнется со стека а его значение станет значение st(0) или нет? где будут тогда A-B и A-C Последний раз редактировалось NiCola999; 03.11.2009 в 21:27. |
03.11.2009, 21:31 | #5 | |
equ asm
Участник клуба
Регистрация: 02.05.2009
Сообщений: 1,605
|
Цитата:
Команда fstp сохраняет только верхнее значение со стека, т.е. ST(0), остальные при этом сдвигаются, т.е. st(1) становиться st(0), st(2) -> st(1) и т.п. Если будет понятней, это команда обратная fld. |
|
03.11.2009, 22:08 | #6 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
спасибо.A если я делаю 2 раза сравнение и флаг устанавливаются после первого сравнения, нужно его обнулять или сравнение само всё делает
если надо обнулять то какая команда обнуляет CF , clc ? Последний раз редактировалось NiCola999; 03.11.2009 в 22:10. |
03.11.2009, 22:36 | #8 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
в общем мне надо сделать такое сравнение
eps = 0.001 if (abs(A-B)<eps && abs(A-C) <eps) return 1; else return 0; вот что у меня получилось .... st(5) = abs(A-B) st(6) = abs(A-C) Код:
поправка... я загрузил eps значит стек сдвинулся опять и еще вопрос... приведите пример точек которые будуи вершинами прав треуг. проверяю на этих 0 0 2,5 4 5 0 выводит 0... еще на этих 0 0 5 8 10 0 выводит 1 Последний раз редактировалось NiCola999; 03.11.2009 в 22:52. |
03.11.2009, 22:46 | #9 |
equ asm
Участник клуба
Регистрация: 02.05.2009
Сообщений: 1,605
|
зачем тут нужно это?
Код:
|
03.11.2009, 23:03 | #10 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
если оба меньше eps вернуть 1
на каких точках можно точно проверить ? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. | 0101 | Помощь студентам | 3 | 17.12.2009 23:57 |
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме | NewDelphi | Фриланс | 2 | 08.10.2009 11:00 |