bonjour tout le monde,
j'aimerais tester 2 routine de divisions de 32bit par 16 bit avant d'en implanter une dans mon programme principal.
J'ai fait un petit programme pour les tester mais je n'arrive pas a les faire aller comme il faut.
ils bouclent indéfiniment j'ai peut-être oublié un truc
voici mes codes assembleur:
celui ci a été trouvé sur ce site : http://www.piclist.com/techref/micro.../div/index.htm
L'autre viens de chez microchipCode:list p=16F84 ; Type du processeur #include <p16F84.inc> ; Définition des variables __CONFIG _RC_OSC & _WDT_ON & _PWRTE_OFF & _CP_OFF bitcnt equ 0x10 remdrH equ 0x11 remdrL equ 0x12 divid0 equ 0x13 divid1 equ 0x14 divid2 equ 0x15 divid3 equ 0x16 divisL equ 0x17 divisH equ 0x18 ;LSB equ 0x19 MOVLW h'D2' MOVWF divid0 MOVLW h'11' MOVWF divid1 MOVLW h'50' MOVWF divid2 MOVLW h'87' MOVWF divid3 MOVLW h'13' MOVWF divisL MOVLW h'A4' MOVWF divisH CALL divide 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 END
merci d'avance pour l'aideCode:list p=16F84 ; Type du processeur #include <p16F84.inc> ; D�finition des variables __CONFIG _RC_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF LOOPCOUNT equ 0x10 REMB0 equ 0x11 REMB1 equ 0x12 AARGB0 equ 0x13 AARGB1 equ 0x14 AARGB2 equ 0x15 AARGB3 equ 0x16 BARGB0 equ 0x17 BARGB1 equ 0x18 LSB equ 0x19 MOVLW h'D2' MOVWF AARGB0 MOVLW h'11' MOVWF AARGB1 MOVLW h'50' MOVWF AARGB2 MOVLW h'87' MOVWF AARGB3 MOVLW h'13' MOVWF BARGB0 MOVLW h'A4' MOVWF BARGB1 CALL FXD3115U UDIV3115L macro ; Max Timing: 9+6*17+16+16+6*17+16+16+6*17+16+16+6*17+16+8 = 537 clks ; Min Timing: 9+6*16+15+15+6*16+15+15+6*16+15+15+6*16+15+3 = 501 clks ; PM: 157 DM: 9 MOVF BARGB1,W SUBWF REMB1, F MOVF BARGB0,W BTFSS STATUS,C INCFSZ BARGB0,W SUBWF REMB0, F RLF AARGB0, F MOVLW 7 MOVWF LOOPCOUNT LOOPU3115A RLF AARGB0,W RLF REMB1, F RLF REMB0, F MOVF BARGB1,W BTFSS AARGB0,LSB GOTO UADD15LA SUBWF REMB1, F MOVF BARGB0,W BTFSS STATUS,C INCFSZ BARGB0,W SUBWF REMB0, F GOTO UOK15LA UADD15LA ADDWF REMB1, F MOVF BARGB0,W BTFSC STATUS,C INCFSZ BARGB0,W ADDWF REMB0, F UOK15LA RLF AARGB0, F DECFSZ LOOPCOUNT, F GOTO LOOPU3115A RLF AARGB1,W RLF REMB1, F RLF REMB0, F MOVF BARGB1,W BTFSS AARGB0,LSB GOTO UADD15L8 SUBWF REMB1, F MOVF BARGB0,W BTFSS STATUS,C INCFSZ BARGB0,W SUBWF REMB0, F GOTO UOK15L8 UADD15L8 ADDWF REMB1, F MOVF BARGB0,W BTFSC STATUS,C INCFSZ BARGB0,W ADDWF REMB0, F UOK15L8 RLF AARGB1, F MOVLW 7 MOVWF LOOPCOUNT LOOPU3115B RLF AARGB1,W RLF REMB1, F RLF REMB0, F MOVF BARGB1,W BTFSS AARGB1,LSB GOTO UADD15LB SUBWF REMB1, F MOVF BARGB0,W BTFSS STATUS,C INCFSZ BARGB0,W SUBWF REMB0, F GOTO UOK15LB UADD15LB ADDWF REMB1, F MOVF BARGB0,W BTFSC STATUS,C INCFSZ BARGB0,W ADDWF REMB0, F UOK15LB RLF AARGB1, F DECFSZ LOOPCOUNT, F GOTO LOOPU3115B RLF AARGB2,W RLF REMB1, F RLF REMB0, F MOVF BARGB1,W BTFSS AARGB1,LSB GOTO UADD15L16 SUBWF REMB1, F MOVF BARGB0,W BTFSS STATUS,C INCFSZ BARGB0,W SUBWF REMB0, F GOTO UOK15L16 UADD15L16 ADDWF REMB1, F MOVF BARGB0,W BTFSC STATUS,C INCFSZ BARGB0,W ADDWF REMB0, F UOK15L16 RLF AARGB2, F MOVLW 7 MOVWF LOOPCOUNT LOOPU3115C RLF AARGB2,W RLF REMB1, F RLF REMB0, F MOVF BARGB1,W BTFSS AARGB2,LSB GOTO UADD15LC SUBWF REMB1, F MOVF BARGB0,W BTFSS STATUS,C INCFSZ BARGB0,W SUBWF REMB0, F GOTO UOK15LC UADD15LC ADDWF REMB1, F MOVF BARGB0,W BTFSC STATUS,C INCFSZ BARGB0,W ADDWF REMB0, F UOK15LC RLF AARGB2, F DECFSZ LOOPCOUNT, F GOTO LOOPU3115C RLF AARGB3,W RLF REMB1, F RLF REMB0, F MOVF BARGB1,W BTFSS AARGB2,LSB GOTO UADD15L24 SUBWF REMB1, F MOVF BARGB0,W BTFSS STATUS,C INCFSZ BARGB0,W SUBWF REMB0, F GOTO UOK15L24 UADD15L24 ADDWF REMB1, F MOVF BARGB0,W BTFSC STATUS,C INCFSZ BARGB0,W ADDWF REMB0, F UOK15L24 RLF AARGB3, F MOVLW 7 MOVWF LOOPCOUNT LOOPU3115D RLF AARGB3,W RLF REMB1, F RLF REMB0, F MOVF BARGB1,W BTFSS AARGB3,LSB GOTO UADD15LD SUBWF REMB1, F MOVF BARGB0,W BTFSS STATUS,C INCFSZ BARGB0,W SUBWF REMB0, F GOTO UOK15LD UADD15LD ADDWF REMB1, F MOVF BARGB0,W BTFSC STATUS,C INCFSZ BARGB0,W ADDWF REMB0, F UOK15LD RLF AARGB3, F DECFSZ LOOPCOUNT, F GOTO LOOPU3115D BTFSC AARGB3,LSB GOTO UOK15L MOVF BARGB1,W ADDWF REMB1, F MOVF BARGB0,W BTFSC STATUS,C INCFSZ BARGB0,W ADDWF REMB0, F UOK15L endm FXD3115U CLRF REMB0 CLRF REMB1 ; UDIV3115L MOVF BARGB1,W SUBWF REMB1, F MOVF BARGB0,W BTFSS STATUS,C INCFSZ BARGB0,W SUBWF REMB0, F RLF AARGB0, F MOVLW 7 MOVWF LOOPCOUNT ; RETLW 0x00 END
-----