Асм алгоритмы 2 - DIV и теорема деления — ZXNet «code.zx»

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

ZXNet echo conference «code.zx»



from: Kirill Frolov
to: All
date: 16 October 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! Про умножение.