Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Умножение

Отправлено PeterD 09 апреля 2007 г. 15:24
В ответ на: Корень отправлено <font color=gray>PeterD</font> 09 апреля 2007 г. 15:20

; 32bit x 32bit unsigned multiply
;
; Register Variables
; Call: var1[3:0] = 32bit multiplicand
; var1[7:4] =
; var2[3:0] = 32bit multiplier
; lc = (high register must be allocated)
;
; Result:var1[7:0] = 64bit result of var1[3:0] * var2[3:0]
; var2[3:0] =
; lc = 0
;
; Size = 21 words
; Clock = 436..532 cycles (+ret)
; Stack = 0 byte


mul32u: sub var17,var17 ;initialize variables
sub var16,var16 ;
sub var15,var15 ;
sub var14,var14 ;
ldi lc,33 ; lc = 33;
brcc PC+5 ;---- calcurating loop
add var14,var20 ;
adc var15,var21 ;
adc var16,var22 ;
adc var17,var23 ;
ror var17 ;
ror var16 ;
ror var15 ;
ror var14 ;
ror var13 ;
ror var12 ;
ror var11 ;
ror var10 ;
dec lc ;if (--lc > 0)
brne PC-14 ; continue loop;
ret

mul32s: clr lc ; Optional fast signed helper
clr var14 ; process with fast unsinged routine
tst var13
brpl PC+10
inc var14
com var10
com var11
com var12
com var13
adc var10,lc
adc var11,lc
adc var12,lc
adc var13,lc
tst var21
brpl PC+10
inc var14
com var20
com var21
com var22
com var23
adc var20,lc
adc var21,lc
adc var22,lc
adc var23,lc
bst var14,0

rcall mul16u

brtc PC+17
com var10
com var11
com var12
com var13
com var14
com var15
com var16
com var17
adc var10,lc
adc var11,lc
adc var12,lc
adc var13,lc
adc var14,lc
adc var15,lc
adc var16,lc
adc var17,lc
ret
;-----------------------------------------------------------------------------:
; 16bit x 16bit unsigned multiply
;
; Register Variables
; Call: var1[1:0] = 16bit multiplicand
; var1[3:2] =
; var2[1:0] = 16bit multiplier
; lc = (high register must be allocated)
;
; Result:var1[3:0] = 32bit result of var1[1:0] * var2[1:0]
; var2[1:0] =
; lc = 0
;
; Size = 13 words
; Clock = 157..172 cycles (+ret)
; Stack = 0 byte


mul16u: sub var13,var13 ;initialize variables
sub var12,var12 ;
ldi lc,17 ; lc = 17;
brcc PC+3 ;---- calcurating loop
add var12,var20 ;
adc var13,var21 ;
ror var13 ;
ror var12 ;
ror var11 ;
ror var10 ;
dec lc ;if (--lc > 0)
brne PC-8 ; continue loop;
ret

mul16s: clr lc ; Optional fast signed helper
clr var12 ; process with fast unsinged routine
tst var11
brpl PC+6
inc var12
com var10
com var11
adc var10,lc
adc var11,lc
tst var21
brpl PC+6
inc var12
com var20
com var21
adc var20,lc
adc var21,lc
bst var12,0
rcall mul16u
brtc PC+9
com var10
com var11
com var12
com var13
adc var10,lc
adc var11,lc
adc var12,lc
adc var13,lc
ret



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 90:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru