Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---

ASM: Division sur 24 bits

Bout de code posé là !

Modérateur : Jérémy

Avatar de l’utilisateur
F6FCO
Expert
Expert
Messages : 2846
Enregistré en : décembre 2017
Localisation : Banlieue sud de Klyntar
Contact :

ASM: Division sur 24 bits

Messagepar F6FCO » mar. 14 mai 2024 20:17

Division sur 24 bits.

Code : Tout sélectionner

;********************************************************************
;                
Division sur entiers 24bits F6FCO                  
;     Il faut préalablement déclarer les variables sur 24 bits         
;         dividende24diviseur24quotient24    et reste16                
;                                                                    
poids faible dans dividende24                                    
poids forts  dans dividende24+1 et +2                                
;                                                                    
poids faible dans diviseur24                                        
poids forts du diviseur dans diviseur24+1 et +2                    
;                                                                    
Le résultat sera dans quotient24quotient24+1 et +2                    
Le reste sera dans reste24reste24+1 et reste24+2                        
;                                                                    
Cette division utilise la routine soustraction24                         
il faut donc aussi avoir déclaré les variables sur                                             
;                 24 bits valeur1 et valeur2                                
;********************************************************************   
division24    
            
on vérifie si c'est une division par zéro, si c'est le cas on charge le dividende dans le quotient.
            ; 
dividende/0=dividendepas cohérent mathématiquement mais nécessaire dans le projet en cas de ligne
            
horizontale (Y=0ou verticale (X=0).
            
movf    diviseur24,diviseur24
            btfss    STATUS
,Z
            bra        div24            
div_zero24    movf    diviseur24
+1,diviseur24+1
            btfsc    STATUS
,Z
            movf    diviseur24
+2,diviseur24+2
            btfsc    STATUS
,Z
            bra        div_quot24
div24        
on initialise quotient=0
            clrf    quotient24
            clrf    quotient24
+1
            clrf    quotient24
+2
            
reste=dividende
            movff    dividende24
,reste24
            movff    dividende24
+1,reste24+1
            movff    dividende24
+2,reste24+2
div24_1        
test poids2
            movf    reste24
+2,w
            subwf    diviseur24
+2,w            
            
test si poids2 reste>diviseur ?
            
btfss    STATUS,C                    
            bra        div24_3            
            
test si poids2 reste=diviseur sinon on sort    
            bz        div24_2
findiv24        
return
div24_2        test poids1
            movf    reste24
+1,w
            subwf    diviseur24
+1,w            
            
test si poids1 reste>diviseur ?
            
btfss    STATUS,C                    
            bra        div24_3            
            
test si poids1 reste=diviseur sinon on sort
            bz        div24_22
            
return
div24_22    test si poids0 reste>=diviseur
            movff    reste24
,WREG
            subwf    diviseur24
,w
            btfss    STATUS
,C
            bra        div24_3
            bz        div24_3
            
return
div24_3        reste=dividende-diviseur
            nop
            movff    reste24
,valeur1
            movff    reste24
+1,valeur1+1
            movff    reste24
+2,valeur1+2
            movff    diviseur24
,valeur2
            movff    diviseur24
+1,valeur2+1
            movff    diviseur24
+2,valeur2+2
            call    soustraction24            
résultat dans valeur2valeur1+1, +
            movff    valeur1
,reste24
            movff    valeur1
+1,reste24+1
            movff    valeur1
+2,reste24+2
            
quotient +1
            bcf        STATUS
,C
            movlw    1
            addwf    quotient24
            
on additionne le carry dans le poids fort
            movf    STATUS
,C
            andlw    0x1
            addwf    quotient24
+1
            movf    STATUS
,C
            andlw    0x1
            addwf    quotient24
+2
            bra        div24_1
div_quot24    
en cas de division par zéro on charge le dividende dans le quotient
            movff    dividende24
,quotient24
            movff    dividende24
+1,quotient24+1
            movff    dividende24
+2,quotient24+2
            
return
        

 
Une porte nand prend 2 bits en entrée... :eek:

Retourner vers « Recueil de mini programmes »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité