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 ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Multiplication 16 bits par 16 bits
JJE
Passioné
Passioné
Messages : 259
Âge : 78
Enregistré en : novembre 2017
Localisation : Picardie

#1 Message par JJE » mar. 19 févr. 2019 12:11 lien vers la Data-Sheet : Cliquez ici

Bonjour Temps-x et tous
Je suppose que les nombres 16 bits sont rangés par poids décroissant (haut poids puis bas poids)
Mais alors dans le sous- programme paire ne devrait-on pas lire

Code : Tout sélectionner


      bcf STATUS
,C
      rlf multiplicande
+0,F                                       
      rlf multiplicande
+1,F                                 
      rlf multiplicande
+2,F                                    
      rlf multiplicande
+3,F                                    

plutôt que

Code : Tout sélectionner


      bcf STATUS
,C
      rlf multiplicande
,F                                       
      rlf multiplicande
,F                                 
      rlf multiplicande
,F                                    
      rlf multiplicande
,F                                    


chose analogue dans le sous-programme impaire
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Multiplication 16 bits par 16 bits
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1162
Enregistré en : juillet 2016
Localisation : Terre

#2 Message par Temps-x » mar. 19 févr. 2019 17:58 lien vers la Data-Sheet : Cliquez ici

Bonjour JJE, et tout le forum,

:bravo: et bien vu :+1: pour m'avoir averti de mon erreur oops tu as raison, j'ai oublié de le rajouter lors de la modification du code.

Pourtant dans mon code ils sont bien présent :roll: je sais pas ce qui c'est passé.

il faudrait le corriger pour ne pas induire les débutants à des erreurs, si Jérémy pouvait me permettre de le faire ça serait bien

Je vais remettre un corrective dans la soirée, sur ta suite

Merci ! pour ta vigilance, et ton intervention.

A++
Modifié en dernier par Temps-x le mar. 19 févr. 2019 19:20, modifié 2 fois.
Quand la souris nargue le chat, c'est que son trou n'est pas loin.

Multiplication 16 bits par 16 bits
Jérémy
Administrateur du site
Administrateur du site
Messages : 2310
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » mar. 19 févr. 2019 18:10 lien vers la Data-Sheet : Cliquez ici

Bonsoir ici ,

Pour la modification pas de probléme post ici ton nouveau programme je la ferai ! en plus il faut que je rajoute un titre dans le premier post ! j'avais zappé ne pas hésité à me MP dans ces cas la !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Multiplication 16 bits par 16 bits
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1162
Enregistré en : juillet 2016
Localisation : Terre

#4 Message par Temps-x » mer. 20 févr. 2019 01:38 lien vers la Data-Sheet : Cliquez ici

Bonsoir Jérémy, JJE, et tout le forum,

Merci ! Jérémy


Code : Tout sélectionner

;***********************************************************************************************
;***************
 Multiplication 16 bits sur 16 bis, avec résultat sur 32 bits ******************
;***********************************************************************************************
 
    Errorlevel
-302                                                  ; Supprime le message "Ensure that bank bits are correct" 

    list        p
=16F628A                                           ; processeur utilisé 

    
#include    <p16F628A.inc>                                      ; Définitions des constantes
            
;******************************* configuration sans quartz *************************************
  
    __CONFIG  _CP_OFF 
& _CPD_OFF & _LVP_OFF & _BODEN_OFF & _BOREN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

;**********************************************************************************************
;******************************
 déclaration des variables *************************************
;**********************************************************************************************

   CBLOCK H'2C'    
      multiplicateur 
:2   
      multiplicande  
:4
      produit        
:4   
      loop1          
:1
    ENDC  

;***************************** adresse de depart après reset ********************************** 

   ORG H
'00'
      goto debut      

   ORG H
'04'
      retfie    

;**********************************************************************************************       

debut

;**********************************************************************************************       

      BANKSEL PCON                         
; on passe en bank 1                                          

;***************** configuration sans quartz avec le registre PCON en bank 1 *******************

                                         ;          OSCF
                                         
;            V 
      movlw B
'00001000'                  ; PCON B'00001000' mettre l'oscillateur sur la fréquence de 4MHz
      movwf PCON                         ; PCON B'
00000000' fréquence de 48KHz

;************************ configuration du registre OPTION_REG en bank 1 *********************** 
     
      movlw B'
10000000'                   ; résistanse hors service 
      movwf OPTION_REG                    ; 

;********************* configuration des registres TRISA & TRISB en bank 1 ********************* 

      movlw B'
00100000'                   ; B'00100000
      movwf TRISA                         ; 17(RA0),18(RA1),1(RA2),2(RA3),3(RA4),4(RA5),15(RA6),16(RA7)
                                           
      movlw B'
00000000'                   ; B'00000000
      movwf TRISB                         ; 6(RB0),7(RB1),8(RB2),9(RB3),10(RB4),11(RB5),12(RB6),13(RB7)

;**********************************************************************************************       

      BANKSEL CMCON                        ; on passe en bank 0

;************************ configuration du registre CMCON en bank 0 **************************
  
      movlw B'
00000111'                   ; le mode 111 pour utiliser RA0 RA1 RA2 RA3 en E/S
      movwf CMCON                         ; inactivation des comparateurs analogiques
                                        
;********************* configuration du registre INTCON en bank 0,1,2,3 ***********************

      movlw B'
00000000'                   ; interruption général hors service
      movwf INTCON                        ; 
  
;******************************* début du programme principal  ********************************
   
      clrf PORTA                          ; mise à zéro du PORTA
      clrf PORTB                          ; mise à zéro du PORTB

;********************** mettre à zéro les variables qu'
on va utiliser **************************

      movlw D'10'                         ; nombre de variable utilisé pour la multiplication 
      movwf loop1

      movlw H
'2C'                         ; adresse de départ de la première variable 
      movwf FSR  

      call efface_variable      

;-----------------------------------------------------------------------------------------------
  
      movlw D
'255'                        ; nombre à titre d'exemple 65535
      movwf multiplicande+0

      movlw D'
255'
      movwf multiplicande+1

      movlw D'
21'                         ; nombre à titre d'exemple 2837
      movwf multiplicateur
+0                      ;                                                       
 
      movlw D
'11'
      movwf multiplicateur+1

;-----------------------------------------------------------------------------------------------

     call multiplie                      ;   65535
                                         
;  x 2837 
terminer                                 
;  _______
     nop                                 
;  185922795  <-- résultat sur 32 bits, se trouve dans produit
     goto terminer                                          

;-----------------------------------------------------------------------------------------------
multiplie                                           
      btfsc multiplicateur
+0,0
      call impaire

paire                    
      movf multiplicateur
+0,
      xorlw D
'1'
      btfsc STATUS,Z
      return      

      bcf STATUS
,C
      rlf multiplicande
+0,F                                       
      rlf multiplicande
+1,F                                 
      rlf multiplicande
+2,F                                    
      rlf multiplicande
+3,F                                    


      bcf STATUS
,C
      rrf multiplicateur
+1,F
      rrf multiplicateur
+0,F    
      btfss multiplicateur
,0
      goto paire
      

impaire
      bcf STATUS
,C                               

      movf multiplicande
+0,W
      addwf produit
+0,F
 
       btfsc STATUS
,C
       call v1                
   
      movf multiplicande
+1,W
      addwf produit
+1,F

      btfsc STATUS
,C   
      call v2

      movf multiplicande
+2,W
      addwf produit
+2,F
    
      btfsc STATUS
,C
      call v3                      

      movf multiplicande
+3,W
      addwf produit
+3,F

      goto paire

;******************************************************************************************       

v1
      movlw B
'00000001'      
      bcf STATUS
,C
     
      addwf produit
+1,F   
      btfss STATUS
,C          
      return     
 
v2
      movlw B
'00000001'
      bcf STATUS,C
    
      addwf produit
+2,F   
      btfss STATUS
,C          
      return 

v3
      movlw B
'00000001'
      bcf STATUS,C
    
      addwf produit
+3,F   
      return  

;-----------------------------------------------------------------------------------------------
efface_variable
      clrf INDF  
      incf FSR
,F          
      decfsz loop1
,F
      goto efface_variable

      return

;-----------------------------------------------------------------------------------------------

    End



Fichier joint
Multiplication16.zip


A++
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le jeu. 21 févr. 2019 00:14, modifié 1 fois.
Quand la souris nargue le chat, c'est que son trou n'est pas loin.

Multiplication 16 bits par 16 bits
JJE
Passioné
Passioné
Messages : 259
Âge : 78
Enregistré en : novembre 2017
Localisation : Picardie

#5 Message par JJE » mer. 20 févr. 2019 10:05 lien vers la Data-Sheet : Cliquez ici

Bonjour Temps-X et tous,
Qui n'est jamais tombé sur ce piège des copier/coller trop rapides ?
Je suggère que tu précises qu'il est question là d'une multiplication d'entiers 16 bits non-signés, bien que ce soit assez évident avec les seuils que tu donnes. J'ai souvenir d'échanges sur le sujet signés/ non signés où certains ne semblaient pas s'y retrouver.
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Multiplication 16 bits par 16 bits
Jérémy
Administrateur du site
Administrateur du site
Messages : 2310
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » mer. 20 févr. 2019 18:53 lien vers la Data-Sheet : Cliquez ici

JJE a écrit :Source du message bien que ce soit assez évident avec les seuils que tu donnes

Euhhhhhh...... pas si évident que ca ! lol.

Je l'ai mis dans le raccourci en #1 . M e dire si il y a des modifications à apportées?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Multiplication 16 bits par 16 bits
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1162
Enregistré en : juillet 2016
Localisation : Terre

#7 Message par Temps-x » jeu. 21 févr. 2019 00:06 lien vers la Data-Sheet : Cliquez ici

Bonsoir Jérémy, JJE, et tout le forum,

JJE a écrit :Source du message Je suggère que tu précises qu'il est question là d'une multiplication d'entiers 16 bits non-signés


Jérémy a écrit :Source du message M e dire si il y a des modifications à apportées?


:+1: Jérémy qui à tout compris :sifflotte: l'a fait automatiquement, c'est parfait comme ça. :wink:

Merci ! à vous deux

A++
Quand la souris nargue le chat, c'est que son trou n'est pas loin.

Multiplication 16 bits par 16 bits
F6FCO
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 778
Âge : 65
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#8 Message par F6FCO » jeu. 21 févr. 2019 20:30 lien vers la Data-Sheet : Cliquez ici

Hello tous,
Tu pourrais nous mettre un algorigramme pour comprendre le fonctionnement ?
Une porte nand prend 2 bits en entrée... la cochonne !!! 8-)


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités