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 32 bits
- F6FCO

Expert- Messages : 2846
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : Banlieue sud de Klyntar
- Contact :
Division sur 32 bits
Code : Tout sélectionner
;********************************************************************
; Division sur entiers 32bits - F6FCO
; Il faut préalablement déclarer les variables sur 32 bits
; dividende32, diviseur32, quotient32 et reste16
;
; poids faible dans dividende32
; poids forts dans dividende32+1, +2 et +3
;
; poids faible dans diviseur32
; poids forts du diviseur dans diviseur32+1, +2 et +3
;
; Le résultat sera dans quotient32, quotient32+1, +2 et +3
; Le reste sera dans reste32, reste32+1, reste32+2 et +3
;
; Cette division utilise la routine soustraction32
; il faut donc aussi avoir déclaré les variables sur
; 32 bits valeur1 et valeur2
;********************************************************************
division32
; 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 diviseur32,diviseur32
btfss STATUS,Z
bra div32
div_zero32 movf diviseur32+1,diviseur32+1
btfsc STATUS,Z
movf diviseur32+2,diviseur32+2
btfsc STATUS,Z
movf diviseur32+3,diviseur32+3
btfsc STATUS,Z
bra div_quot32
div32 ; on initialise quotient=0
clrf quotient32
clrf quotient32+1
clrf quotient32+2
clrf quotient32+3
; reste=dividende
movff dividende32,reste32
movff dividende32+1,reste32+1
movff dividende32+2,reste32+2
movff dividende32+3,reste32+3
div32_0 ; test poids3
movf reste32+3,w
subwf diviseur32+3,w
; test si poids3 reste>diviseur ?
btfss STATUS,C
bra div32_3
; test si poids2 reste=diviseur ? sinon on sort
bz div32_1
findiv32 return
div32_1 ; test poids2
movf reste32+2,w
subwf diviseur32+2,w
; test si poids2 reste>diviseur ?
btfss STATUS,C
bra div32_3
; test si poids2 reste=diviseur ? sinon on sort
bz div32_2
return
div32_2 ; test poids1
movf reste32+1,w
subwf diviseur32+1,w
; test si poids1 reste>diviseur ?
btfss STATUS,C
bra div32_3
; test si poids1 reste=diviseur ? sinon on sort
bz div32_22
return
div32_22 ; test si poids0 reste>=diviseur
movff reste32,WREG
subwf diviseur32,w
btfss STATUS,C
bra div32_3
bz div32_3
return
div32_3 ; reste=dividende-diviseur
nop
movff reste32,valeur1
movff reste32+1,valeur1+1
movff reste32+2,valeur1+2
movff reste32+3,valeur1+3
movff diviseur32,valeur2
movff diviseur32+1,valeur2+1
movff diviseur32+2,valeur2+2
movff diviseur32+3,valeur2+3
call soustraction32 ; résultat dans valeur1, +1, +2 et +3
movff valeur1,reste32
movff valeur1+1,reste32+1
movff valeur1+2,reste32+2
movff valeur1+3,reste32+3
; quotient +1
bcf STATUS,C
movlw 1
addwf quotient32
; on additionne le carry dans les poids forts
movf STATUS,C
andlw 0x1
addwf quotient32+1
movf STATUS,C
andlw 0x1
addwf quotient32+2
movf STATUS,C
andlw 0x1
addwf quotient32+3
bra div32_0
div_quot32 ; en cas de division par zéro on charge le dividende dans le quotient
movff dividende32,quotient32
movff dividende32+1,quotient32+1
movff dividende32+2,quotient32+2
movff dividende32+3,quotient32+3
return
Retourner vers « Recueil de mini programmes »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité
