Página 1 de 1

Divisão de 32 bits / 16 bits

MensagemEnviado: 16 Nov 2007 19:43
por phophollety
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!

MensagemEnviado: 16 Nov 2007 19:57
por phophollety
-=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:

MensagemEnviado: 17 Nov 2007 12:06
por RobL
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=

MensagemEnviado: 17 Nov 2007 13:13
por phophollety
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