Garik66 Опубликовано 30 марта, 2015 Поделиться Опубликовано 30 марта, 2015 Собственно вопрос в названии темы.1. Могу я допустим записать просто так:i: dd 0mov i, dword ptr [eax+08] // Допустим в [eax+08] лежит integer значениеmov [eax+04],(float)i // А в [eax+04] нужно записать это значение во float.2. Если нет, то как правильно?3. Если да, то могу ли я использовать вместо i регистр? Допустим так: push ebxmov ebx, dword ptr [eax+08] // Допустим в [eax+08] лежит integer значениеmov [eax+04],(float)ebx // А в [eax+04] нужно записать это значение во float.pop ebx4. Если да, то может есть всё-таки короче запись. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 30 марта, 2015 Поделиться Опубликовано 30 марта, 2015 Привет! Если я не ошибаюсь, то:fild [eax+8] ; Грузим значение в ST(0), конвертируя его во floatfistp [eax+4] ; Выгружаем из ST(0), конвертируя в int, выталкивая заодно это значение из FPU-стэка 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 марта, 2015 Автор Поделиться Опубликовано 30 марта, 2015 (изменено) keng, Большой СЕНК!!!Т.е. для моего случая, который я описал нужно будет сделать так:fild [eax+08] // Допустим в [eax+08] лежит integer значение, переводим его во floatfstp [eax+04] // А в [eax+04] нужно записать это значение во float. Просто выгружаем без изменений. Правильно? Изменено 30 марта, 2015 пользователем garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 30 марта, 2015 Поделиться Опубликовано 30 марта, 2015 Я проснулся 5 минут назад, так что не соображаю толком. Проверь в отладчике. Штука в том, что CPU не обучен работать с дробными числами - для этой задачи есть FPU, маленький "процессор" с отдельным "стеком". И набор f-инструкций под это дело. CPU оперирует типом integer, FPU - float. Для взаимодействия есть несколько инструкций. Подробнее можно почитать [тут]. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 30 марта, 2015 Поделиться Опубликовано 30 марта, 2015 Еще есть решение без использования FPU-стэка, почитать можно [тут]. Автор - Mikl___. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 30 марта, 2015 Поделиться Опубликовано 30 марта, 2015 Ой, да, я тупой. Сначала делаем fild, чтобы загрузить int в ST(0), а затем fstp, чтобы выгрузить float и вытолкнуть его из ST(0). 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 марта, 2015 Автор Поделиться Опубликовано 30 марта, 2015 Ой, да, я тупой. Не тупой, а спросонья.keng, ещё раз спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 марта, 2015 Автор Поделиться Опубликовано 30 марта, 2015 keng, отлично всё сработало, переделал скрипты, сделал более правильными.Если кому интересно, то скрипт здесь. Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 31 марта, 2015 Поделиться Опубликовано 31 марта, 2015 на sse так:cvtsi2ss xmm0,dword[eax+8]movss dword[eax+4],xmm0 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 31 марта, 2015 Автор Поделиться Опубликовано 31 марта, 2015 gmz, а чем твоя запись:cvtsi2ss xmm0,dword[eax+8]movss dword[eax+4],xmm0 короче этой:fild [eax+08]fstp [eax+04] или она быстрее? Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 31 марта, 2015 Поделиться Опубликовано 31 марта, 2015 gmz, а чем твоя запись:cvtsi2ss xmm0,dword[eax+8]movss dword[eax+4],xmm0 короче этой:fild [eax+08]fstp [eax+04] или она быстрее?Прочитай - http://stackoverflow.com/questions/8847429/sse-slower-than-fpu 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 31 марта, 2015 Автор Поделиться Опубликовано 31 марта, 2015 ПрочитайК сожалению с английским плохо, но что понял через Гугл-переводчик - эта запись:fild [eax+08]fstp [eax+04] быстрее, чем эта:cvtsi2ss xmm0,dword[eax+8]movss dword[eax+4],xmm0 Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 1 апреля, 2015 Поделиться Опубликовано 1 апреля, 2015 На самом деле, я слабо верю, что в скрипте СЕ разница будет сколько-нибудь заметна. То есть если некоторый код занимается только расчетом чисел с плавающей точкой (сотни миллионов раз) - тогда да, но и то обычно компилятор умнее человека и лучше может решить, какой набор инструкций нужно использовать. Если же (в редких случаях) компилятор ошибается - тогда да, ассемблер в руки и вперед, оптимизировать. Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 1 апреля, 2015 Поделиться Опубликовано 1 апреля, 2015 как то писал float rand генератор на fpu и sse. sse был почти в 2 раза быстрее fpu (примерный замер через rdtsc)в даном случае наверно все равно так как слишком мало действий Ссылка на комментарий Поделиться на другие сайты Поделиться
Pitronic Опубликовано 9 сентября, 2020 Поделиться Опубликовано 9 сентября, 2020 В 30.03.2015 в 17:34, Garik66 сказал: Если кому интересно, то скрипт здесь. Где? Ссылка на комментарий Поделиться на другие сайты Поделиться
Kvazimado Опубликовано 10 сентября, 2020 Поделиться Опубликовано 10 сентября, 2020 Серьезно? Теме 5 лет! Форум два раза менял дислокацию и естесно что-то могло похериться. Ссылка на комментарий Поделиться на другие сайты Поделиться
Pitronic Опубликовано 20 сентября, 2020 Поделиться Опубликовано 20 сентября, 2020 В 30.03.2015 в 17:34, Garik66 сказал: здесь. в этом месте нет ссылки Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 20 сентября, 2020 Автор Поделиться Опубликовано 20 сентября, 2020 1 час назад, Pitronic сказал: в этом месте нет ссылки В 10.09.2020 в 09:12, Kvazimado сказал: Форум два раза менял дислокацию и естесно что-то могло похериться. Ссылка на комментарий Поделиться на другие сайты Поделиться
Pitronic Опубликовано 20 сентября, 2020 Поделиться Опубликовано 20 сентября, 2020 1 час назад, Garik66 сказал: что-то могло похериться. Тогда может вспомните что вы там предлагали? Мне интересно! Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 20 сентября, 2020 Автор Поделиться Опубликовано 20 сентября, 2020 20 минут назад, Pitronic сказал: Тогда может вспомните что вы там предлагали? Мне интересно! я не помню. что было сегодня. а ты - 5,5 лет назад :(((( (склероз однако) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения