Вопрос № 29464: Обьясните пожалуйста почему не работает такая вещь:
...
mov ax,0
mov es,ax
cli
mov word ptr es:[24h],offset Pocedure
mov word ptr es:[26h],cs
sti
...
Не работает и всё!!!...Вопрос № 29479: Уважаемые эксперты у меня вопрос такой:
- как можно произвести расчет синуса и косинуса на ассемблере.
Какой тут нужно применить алгоритм???
Заранее спасибо!!!...
Вопрос № 29.464
Обьясните пожалуйста почему не работает такая вещь:
...
mov ax,0
mov es,ax
cli
mov word ptr es:[24h],offset Pocedure
mov word ptr es:[26h],cs
sti
...
Отвечает: Евгений Иванов
Здравствуйте, Петров Максим Викторович!
почему же - всё прекрасно работает! :)
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 13.11.2005, 14:00
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Петров Максим Викторович!
В самой этой последовательности команд проблем нет.
Скорее всего есть проблемы в Procedure. В результате чего не происходит нормального возврата из прерывания. Так что, давай код Procedure в студию...
--------- Удачи!
Отвечает: Юра Устинов
Здравствуйте, Петров Максим Викторович!
скопировал бит в бит, работает, уточните ваш запрос, до свидания.
З.Ы.
xor ax,ax - быстрее и меньше чем movом
--------- Спасём Россию!!!
Ответ отправил: Юра Устинов (статус: 5-ый класс)
Отправлен: 13.11.2005, 16:48
Вопрос № 29.479
Уважаемые эксперты у меня вопрос такой:
- как можно произвести расчет синуса и косинуса на ассемблере.
Какой тут нужно применить алгоритм???
Заранее спасибо!!!
Отправлен: 13.11.2005, 18:24
Вопрос задал: Ig0rSV (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: mvp
Здравствуйте, Ig0rSV!
Нужно использовать математический сопроцессор, там есть FSIN и FCOS для вычисления синуса и косинуса. Посмотрите ссылки (в поиске по странице введите sin - так быстрей будет, а то там много всего):
http://www.lib.csu.ru/DL/bases/prg/frolov/books/bsp/v02/ch12.htm
http://faqs.org.ru/progr/other_l/asm.htm
Можно и без него обойтись, составив таблицы (типа Брадиса) и поместить в код программы. Правда проблема возникает с представлением нецелых чисел. Но, например, мы можем их считать целыми, т. к. sin и cos лежат в [-1; 1]. А при операциях учитывать, что наши значения sin и сos умножены, например на 10000 (четыре знака после запятой).
Можно попробывать самому вычислить sin и cos, пользуясь разложением в ряд Маклорена (разложение в ряд Тейлора, только в окрестности 0):
cos(x)=x-(x^2)/2!+ (x^4)/4!- (x^6)/6!+ (x^8)/8!-…
sin(x)=1-(x^3)/3!+ (x^5)/5!- (x^7)/7!+ (x^9)/9!-…
Правда, прийдётся использовать сопроцессор. И вычислять, пока очередное слагаемое не станет меньше заданного епсилон. Зато интересно будет сравнить полученные результаты с тем, что выдают функции FSIN, FCOS ассемблера :)
--------- Моя совесть чиста - не бывшая в употреблении
Ответ отправил: mvp (статус: 10-ый класс)
Отправлен: 13.11.2005, 18:57
Отвечает: Евгений Иванов
Здравствуйте, Ig0rSV!
Для этого нужно просто использовать команды математического процессора.
FCOS, FSIN.
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 13.11.2005, 21:49
Отвечает: Юра Устинов
Здравствуйте, Ig0rSV!
Если говорить про алгоритмы, то можно использовать числовые ряды, но думаю вам такое не по душе, то лучше всего использовать сопроцессор
для нахождения синуса вам нужно положить источник в стек командой FLD
и найти синус командой FSIN, а полученный результат командой FST закинуть в приёмник. Повторим:
fld perem ;32,64 битная пременная
fsin
fst sinperem;32,64 битная пременная
--------- Спасём Россию!!!
Ответ отправил: Юра Устинов (статус: 5-ый класс)
Отправлен: 15.11.2005, 05:18