[an error occurred while processing this directive]
Аж прослезился как давно это было....
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено колян безпарольный 25 января 2005 г. 21:37
В ответ на: а камень какой? отправлено колян безпарольный 25 января 2005 г. 21:22


;Регистры используемые в 32 битной арифметике
Dst equ 50h
Dst_0 equ 50h
Dst_1 equ 51h
Dst_2 equ 52h
Dst_3 equ 53h
Tmp equ 54h
Tmp_0 equ 54h
Tmp_1 equ 55h
Tmp_2 equ 56h
Tmp_3 equ 57h
Src equ 58h
Src_0 equ 58h
Src_1 equ 59h


; Деление: Tmp(32 бит) / Src(16 бит) => Dst(32 бит), R6:R7 - остаток, C=1
Div_32_16:
clr A
mov R6, A
mov R7, A
mov Dst_3, A
mov Dst_2, A
mov Dst_1, A
mov Dst_0, #1

1$: clr C ; Ротация влево делимого с сохpанением бита
mov A, Tmp_0 ; пеpеноса в C
rlc A
mov Tmp_0, A
mov A, Tmp_1
rlc A
mov Tmp_1, A
mov A, Tmp_2
rlc A
mov Tmp_2, A
mov A, Tmp_3
rlc A
mov Tmp_3, A
jnc 2$
inc Tmp_0

2$: mov A, R7 ; Получаем текущий остаток деления
rlc A
mov R7, A
mov A, R6
rlc A
mov R6, A
jc 3$

mov A, Src_1 ; Пpовеpка R6:R7 >= Src
subb A, R6 ; C: Src_1 < R6
jc 3$
jnz 4$
mov A, Src_0
subb A, R7 ; C: Src_0 < R7
jc 3$
jnz 4$

3$: clr C ; Вычитаем делитель из текущего остатка
mov A, R7
subb A, Src_0
mov R7, A
mov A, R6
subb A, Src_1
mov R6, A
setb C

4$: mov A, Dst_0 ; Сдвиг частного влево
rlc A
mov Dst_0, A
mov A, Dst_1
rlc A
mov Dst_1, A
mov A, Dst_2
rlc A
mov Dst_2, A
mov A, Dst_3
rlc A
mov Dst_3, A

jnc 1$
ret

; Деление: Tmp(24 бит) / Src(16 бит) => Dst(24 бит), R6:R7 - остаток, C=1
Div_32_16:
clr A
mov R6, A
mov R7, A
mov Dst_2, A
mov Dst_1, A
mov Dst_0, #1

1$: clr C ; Ротация влево делимого с сохpанением бита
mov A, Tmp_0 ; пеpеноса в C
rlc A
mov Tmp_0, A
mov A, Tmp_1
rlc A
mov Tmp_1, A
mov A, Tmp_2
rlc A
mov Tmp_2, A
jnc 2$
inc Tmp_0

2$: mov A, R7 ; Получаем текущий остаток деления
rlc A
mov R7, A
mov A, R6
rlc A
mov R6, A
jc 3$

mov A, Src_1 ; Пpовеpка R6:R7 >= Src
subb A, R6 ; C: Src_1 < R6
jc 3$
jnz 4$
mov A, Src_0
subb A, R7 ; C: Src_0 < R7
jc 3$
jnz 4$

3$: clr C ; Вычитаем делитель из текущего остатка
mov A, R7
subb A, Src_0
mov R7, A
mov A, R6
subb A, Src_1
mov R6, A
setb C

4$: mov A, Dst_0 ; Сдвиг частного влево
rlc A
mov Dst_0, A
mov A, Dst_1
rlc A
mov Dst_1, A
mov A, Dst_2
rlc A
mov Dst_2, A

jnc 1$
ret

; Деление: Tmp(16 бит) / Src(16 бит) => Dst(16 бит), R6:R7 - остаток, C=1
Div_16_16:
clr A
mov R6, A
mov R7, A
mov Dst_1, A
mov Dst_0, #1

1$: clr C ; Ротация влево делимого с сохpанением бита
mov A, Tmp_0 ; пеpеноса в C
rlc A
mov Tmp_0, A
mov A, Tmp_1
rlc A
mov Tmp_1, A
jnc 2$
inc Tmp_0

2$: mov A, R7 ; Получаем текущий остаток деления
rlc A
mov R7, A
mov A, R6
rlc A
mov R6, A
jc 3$

mov A, Src_1 ; Пpовеpка R6:R7 >= Src
subb A, R6 ; C: Src_1 < R6
jc 3$
jnz 4$
mov A, Src_0
subb A, R7 ; C: Src_0 < R7
jc 3$
jnz 4$

3$: clr C ; Вычитаем делитель из текущего остатка
mov A, R7
subb A, Src_0
mov R7, A
mov A, R6
subb A, Src_1
mov R6, A
setb C

4$: mov A, Dst_0 ; Сдвиг частного влево
rlc A
mov Dst_0, A
mov A, Dst_1
rlc A
mov Dst_1, A
jnc 1$
ret


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru