Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Аппаратное умножение 24-битных чисел?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
alux
Хочу оптимизировать программу умножения 3-байтных чисел . За основу взял AVR200. Когда перешел с 2313 на мегу48 естественно возник вопрос как использовать mul для умножения 24-битных чисел с получением 48-битного результата?
BVU
Попробуйте откомпилировать на C в IAR с максимальной оптимизацией умножение двуй 24-х битных чисел и посмотрите, как это выглядит в листинге на asm.
Rst7
AVR201: Using the AVR® Hardware Multiplier - и вычистить лишнее.
alux
Не вычистить ,а добавить. Только вопрос - КАК?
dxp
Цитата(alux @ Aug 31 2005, 17:39)
Не вычистить ,а добавить. Только вопрос - КАК?
*

В чем проблема-то при наличие аппаратного умножителя. Умножайте в столбик как обычно. 3 байта на 3 байта. Представьте, что имеется два трехразрядных числа (один разряд - один байт). Все очевидно.
alux
Попробовал. Вот что получилось:
ah:am:al * bh:bm:bl = c5:c4:c3:c2:c1:c0

_____________________________________

mul al,bl
movw c1:c0,r1:r0

mul am,bl
add c1,r0
adc c2,r1

mul ah,bl
add c2,r0
adc c3,r1

mul al,bm
add c1,r0
adc c2,r1

mul am,bm
add c2,r0
adc c3,r1

mul ah,bm
add c3,r0
adc c4,r1

mul al,bh
add c2,r0
adc c3,r1

mul am,bh
add c3,r0
adc c4,r1

mul ah,bh
add c4,r0
adc c5,r1
Karl
Примерно так. Только возможное переполнение после сложения надо учитывать.

clr tmp

mul al,bl
movw c1:c0,r1:r0

mul am,bl
add c1,r0
adc c2,r1
adc c3, tmp

mul al,bm
add c1,r0
adc c2,r1
adc c3, tmp

mul ah,bl
add c2,r0
adc c3,r1
adc c4, tmp


mul am,bm
add c2,r0
adc c3,r1
adc c4, tmp

mul al,bh
add c2,r0
adc c3,r1
adc c4, tmp

mul ah,bm
add c3,r0
adc c4,r1
adc c5, tmp


mul am,bh
add c3,r0
adc c4,r1
adc c5, tmp

mul ah,bh
add c4,r0
adc c5,r1
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.