ZXNet эхоконференция «code.zx»


тема: Асм алгоритмы 2 - DIV и теорема деления



от: Kirill Frolov
кому: All
дата: 16 Oct 2001
=============================================================================
* Forwarded by Kirill Frolov (500:812/1.507)
* Area : talks.asm (talks.asm)
* From : Aleksey Malov, 2:5052/30.8 (13 Oct 01 10:29)
* To : Sashka Yackubtchick
* Subj : Асм алгоритмы 2 - DIV и теорема деления
=============================================================================
Hi, Sashka!

Sat 13 Oct 2001, at 05:39:04 Sashka Yackubtchick told Aleksey Malov about Асм
алгоритмы 2 - DIV и теорема деления.

SY> Спасибо за нитересный пример, Алексей.
SY> Вопрос относительно 98 тактов:
SY> Это чисто теоритический подсчёт или ты делал замеры?
Чисто теоретический подсчет. Hа P-pro/II/III в конвейере работают 3
параллельных декодера (2 простых и один сложный). Декодеры преобразуют команды
микропроцессора в микрооперации, представляющие собой примитивные
команды,которые выполняются пятью параллельно работающими исполнительными
устройствами микропроцессора. Многие простые команды преобразуются в одиночные
микрооперации (это делает простой декодер), а некоторые камандыпреобразуются в
последовательность двух и более (оптимально - 4) микроопераций (это делает
сложный декодер). Декодер команд может формироавать до 6 микроопераций за такт.
Для достижения наибольшей производительности работы декодеров необходимо, чтобы
на их входы поступали команды, декодируемые шестью микрооперациями в
последовательности 4+1+1.
Если верить вышеописанным словам, то мой цикл процедуры деления максимум будет
выполняться за 3 такта, а т.к. циклов 32, плюс еще пара простых команд
расположены вне цикла, в сумме выходит около 98 тактов. Все равно, в
подавляющем большинстве случаев деление в "столбик" быстрее циклического
вычитания делителя из делимого. Hа процах, где команды деления нет (например,
Z80), именно так и поступают.

Для быстрого умножения 8-ми битных чисел (не используя команду mul) можно
применять т.н. композиционное умножение:
Если присмотреться к формуле (a+b)^2 = a^2 + 2*a*b + b^2, то можно заметить:

(a+b)^2 - a^2 - b^2
a*b = --------------------
2

Если предварительно рассчитать табличку квадратов 8-мибитных чисел (512 байт),
то умножение можно производить за несколько тактов.

Bye, Sashka.
WBR, Vivid^Brainwave.
-+- Lara Croft за 4.50 $.
+ Origin: http://brainwave.dax.ru (2:5052/30.8)
=============================================================================

Hемедленно нажми на RESET, All!


Про умножение.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Interface - Проблемы русской спековской пресс сцены. Обзор современной прессы.
Программирование - Быстрое преобразование координат.
Мир звуков Спектрума - глава 1: Физика звука.

В этот день...   25 сентября