Divisão de 32 bits / 16 bits

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Divisão de 32 bits / 16 bits

Mensagempor phophollety » 16 Nov 2007 19:43

Olá pessoal, preciso dividir o número:

A constante 0X01C9C380 por uma variável 0XYYYY

Alguém tem alguma rotina em ASM para tal?!

Chequei o AN561 da microchip e também uma rotina do PicList mas não entendia a do PicList.

Alguém já usou as da uChip!?

Ou tem uma que funcione para me passar?

Grato

[]s!
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

Mensagempor phophollety » 16 Nov 2007 19:57

-=RESOLVIDO=-

http://www.piclist.com/techref/microchi ... by16ph.htm

32 bits by 16 by Peter Hemsley

divide movlw 32 ; 32-bit divide by 16-bit
movwf bitcnt
clrf remdrH ; Clear remainder
clrf remdrL

dvloop clrc ; Set quotient bit to 0
; Shift left dividend and quotient
rlf divid0 ; lsb
rlf divid1
rlf divid2
rlf divid3 ; lsb into carry
rlf remdrL ; and then into partial remainder
rlf remdrH

skpnc ; Check for overflow
goto subd
movfw divisH ; Compare partial remainder and divisor
subwf remdrH,w
skpz
goto testgt ; Not equal so test if remdrH is greater
movfw divisL ; High bytes are equal, compare low bytes
subwf remdrL,w
testgt skpc ; Carry set if remdr >= divis
goto remrlt

subd movfw divisL ; Subtract divisor from partial remainder
subwf remdrL
skpc ; Test for borrow

decf remdrH ; Subtract borrow
movfw divisH
subwf remdrH
bsf divid0,0 ; Set quotient bit to 1
; Quotient replaces dividend which is lost
remrlt decfsz bitcnt
goto dvloop
return

Para quem quiser :wink: :wink:
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

Mensagempor RobL » 17 Nov 2007 12:06

Dividir variável por constante.
Não esqueça de entrar com o número de bits corretamente.
http://www.piclist.com/techref/piclist/ ... tant&from=
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor phophollety » 17 Nov 2007 13:13

RobL escreveu:Dividir variável por constante.
Não esqueça de entrar com o número de bits corretamente.
http://www.piclist.com/techref/piclist/ ... tant&from=


Pô, essa eu nunca tinha visto!!!

A minha divisão já está funcionando legal usando a rotina acima, mas valeu da mesma maneira!

73 forte
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x