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 ---
- 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 ---
Modérateur : Jérémy
ASM: Division sur 24 bits
- F6FCO

Expert- Messages : 2846
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : Banlieue sud de Klyntar
- Contact :
Division sur 24 bits.
Code : Tout sélectionner
;********************************************************************
; Division sur entiers 24bits - F6FCO
; Il faut préalablement déclarer les variables sur 24 bits
; dividende24, diviseur24, quotient24 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 quotient24, quotient24+1 et +2
; Le reste sera dans reste24, reste24+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=dividende, pas cohérent mathématiquement mais nécessaire dans le projet en cas de ligne
; horizontale (Y=0) ou 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 valeur2, valeur1+1, +2
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
Retourner vers « Recueil de mini programmes »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités
