Code : Tout sélectionner
;********************************************************************
; Multiplication sur entiers 16bits _ F6FCO
; Il faut préalablement déclarer les variables sur 16 bits
; multiplicande16, multiplicateur16, resultat16
; valeur1, valeur2 (sur 16bits)
; et report16
;
; poids faible nombre1 dans multiplicande16
; poids fort nombre1 dans multiplicande16+1
;
; poids faible nombre2 dans multiplicateur16
; poids fort nombre2 dans multiplicateur16+1
;
; Le résultat sera dans resultat16 et resultat16+1
; si dépassement le carry est dans report16
;
; utilise les routines addition16 et soustraction16
;
;********************************************************************
multiplication16
clrf resultat16
clrf resultat16+1
mult161 ; test si multiplicateur sur 16bits =0
movf multiplicateur16+1,multiplicateur16+1
bnz mult162
bcf STATUS,Z
movf multiplicateur16,multiplicateur16
bz finmult16
mult162 movff resultat16,valeur1
movff resultat16+1,valeur1+1
movff multiplicande16,valeur2
movff multiplicande16+1,valeur2+1
call addition16
movff valeur2,resultat16
movff valeur2+1,resultat16+1
; on décrémente le compteur
movff multiplicateur16,valeur1
movff multiplicateur16+1,valeur1+1
clrf valeur2+1
movlw 1
movwf valeur2
call soustraction16
movff valeur2,multiplicateur16
movff valeur2+1,multiplicateur16+1
bra mult161
finmult16 return
