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

Arithmétique n bits Introduction
JJE
Passioné
Passioné
Messages : 357
Âge : 79
Enregistré en : novembre 2017
Localisation : Picardie

#1 Message par JJE » mer. 24 juil. 2019 18:15

Bonjour à tous,
Ce sujet a déjà fait l'objet de plusieurs sujets dans différents sous-forums, en se limitant en général à une opération (multiplication) et des entiers 16 bits.
Je reprends en généralisant à des entiers de n*8 bits signés ou non et à l'ensemble ou presque des opérateurs arithmétiques unaires ou binaires.
Mon objectif est de fournir un outil, clef en main, qui permette à l'utilisateur d'intégrer à son application une ou plusieurs des fonctionnalités proposées dont voici la liste :
     Initialisation avec un littéral
     Mise à 0
     Incrémentation
     Décrémentation
     Extension du bit de signe
     Tronquabilité
     Opposé
     Copier
     Addition
     Soustraction
     Multiplication
     Division
     Modulo
     Comparaison
     Conversion Ascii hexa
     Conversion Ascii décimal
Ce premier post d'introduction a pour but de présenter les techniques mises en oeuvre pour minimiser l'espace programme et données utilisées par le module et de présenter sa mise en oeuvre.
Dans le fichier joint
FantasPic 1.zip
, vous trouverez deux projets
    test Anb_Var.mcp illustrant le paragraphe précédent
    test AnBS_MovlTo.mcp une application sur la première fonctionnalité mentionnée
1 - test Anb_Var.mcp
Bien qu'il ne fasse pratiquement rien, ce projet est important parce qu'il décrit l'organisation d'un programme source exploitant ce module.

Code : Tout sélectionner

    #DEFINE NbPages 1
    include "callx.inc"
    include "BNK.inc"


introduit deux modules dont il a été question sur ce site et sur lesquels je ne reviens pas

Code : Tout sélectionner

    include "AnB.inc"
    
    
#DEFINE AnB_NbOctets .10
    #DEFINE AnBS_MetQuoi AnB_MetRien ; AnB_MetRien | AnB_MetIncf 
    #DEFINE AnBU_MetQuoi AnB_MetAdd
    include "AnB.inc"

introduit le module lui-même, avec cette bizarerie du double incules AnB.inc, sur lequel je reviens ci-dessous
La suite est très classique, définition de quelques macros, de quelqies constantes et description de l'espace de données du programme qui se termine par

Code : Tout sélectionner


    AnB_Installe    MYDATA_FIN
, 0x100


Instanciation de la macro AnB_Installe qui est en fait le nerf de la guerre.
Rien d'autre, à partir de cette ligne, les fonctionnalités installées sont utilisables, voir le deuxième projet.

1.1Minimiser le code installé

C'est le rôle des trois lignes suivantes

Code : Tout sélectionner

    #DEFINE AnBS_MetQuoi AnB_MetRien ; AnB_MetRien | AnB_MetIncf 
    #DEFINE AnBU_MetQuoi AnB_MetAdd
    include "AnB.inc"

Dans les deux premières, on définit deux constantes AnBS_MetQuoi et AnBU_MetQuoi qui sont chacune un ensemble de flags armés si la fonctionnalité doit être installée. Ces flags sont définis par une étiquette qui a été définie par le include précédent.
Le fichier AnB.inc a la structure suivante :

Code : Tout sélectionner

    ifndef   AnB_Param
    
; Constantes servant à définir les inclusions partielles
    
; pour le code
    
#define AnB_MetMovlf 0x01
    .../...
    #define AnB_MetRien 0x8000
    
    
#define   AnB_Param
    
    else    
; ndef   AnB_Param
    

Lors du premier include, la constante AnB_Param n'étant pas définie, seule le début du fichier est inclus, mais comme elle se termine par un #define AnB_Param, au deuxième include, c'est la suite (jusqu'à la fin) ou on trouve le endif associé qui est lue.
Le début de cette deuxième partie est un test sur les constantes qui, si elles ne sont pas définies se voient attribuer une valeur qui permet d'intégrer toutes les fonctionnalités.
Suivent une centaine de ligne qui évitent à l'utilisateur de demander une fonctionnalité particulière parce qu'elle est utilisée par l'une de celles demandées : exemple

Code : Tout sélectionner

        if (_AnBS_MetQuoi & AnB_MetCopy) != 0
            if 
(_AnBS_MetQuoi  & AnB_MetExpand)==|| (_AnBS_MetQuoi  & AnB_MetIsTronquable) == 0
_AnBS_MetQuoi  set _AnBS_MetQuoi  
| AnB_MetExpand | AnB_MetIsTronquable
_AnBS_MetQuoi_Mod 
+= 1
             endif 
        endif

si l'utilisateur a demandé AnB_MetCopy sans demander l'une ou l'autre AnB_MetExpand ou AnB_MetIsTronquable, on lui ajoute et on s'en souvient _AnBS_MetQuoi_Mod += 1 pour boucler dans une boucle while tant qu'il y a eu des ajouts. En sortie de cette boucle, toutes les fonctionnalités nécessaires à celles demandées sont ajoutées, il n'y a plus à craindre d'erreur d'assemblage.
On peut alors calculer la variable d'assemblage AnBS_UseDATA qui mémorise les variables nécessaires aux fonctionnalités.
Les lignes suivantes servent à définir les variables nécessaires aux fonctionnalités demandées. Jusqu'en ligne 280, on définit quelques variables dépendant de la taille max des entiers demandés par l'utilisateur en particulier NbOReels qui est le nombre d'octets réellement attribué aux variables du module pour contenir les variables de la taille demandée par l'utilisateur. Ces variables ont pour fonction de faciliter la gestion du registre FSR.
Jusqu'en ligne 780 sont définies une série de macro sans difficulté dont la fonction principale est de faciliter la lecture (et l'écriture du code).
Arrive en fin :

1.2La macro AnB_Installe
Son premier paramètre permet de préciser l'adresse en mémoir de données où l'utilisateur veut mettre les données du module, le deuxième l'adresse en mémoire programme pour mettre le code du module
Les données du module respectent la structure suivante :
[list=]
AnB_O1 NbOReels octets
AnB_O2 NbOReels octets
AnB_Aux 2*NbOReels octets
Anb_Serv NbOReels octets
8 octets de travail pour les sous-programmes
[/list]
Pour une gestion sereine de FSR, il est nécessaire que la zone des données du module soit installée à une adresse convenable satisfaisant le masque calculé à l'inclusion du module. c'est le rôle de ce petit bout de code qui calcule la première adresse V2 postérieure à l'adresse passée en paramètre satisfaisant la contrainte.

Code : Tout sélectionner

       #DEFINE  _AnB_Installe_Invoquée
        variable V2 = V
    if 
(_AnBS_MetQuoi & AnBS_UseDATA ) != 0
        while 
(V2 & masque) != 0x0
V2
+= 1
        endw 

On déclare alors l'espace de données par une directive CBLOCK classique qui réserve NbOReels*AnBS_UseDATA + 8 octets
Suivent la définition de quelques étiquettes facilitant l'utilisation de cet espace de données.
Pour terminer, un test impose que l'espace de données du module réside dans une même banque.
Les deux dernières lignes de cette macro

Code : Tout sélectionner

    org Ad_Code
    
    _AnB_Code
    

installent le code à l'adresse passée en paramètre

1.3 le programme de test
Il permet d'observer dans le listing d'assemblage la taille du code installé en modifiant les paramètres AnBS_MetQuoi et AnBU_MetQuoi et d'observer dans le fichier .lst les valeurs des variables AnB_DATA et AnB_FIN_DATA en modifiant les paramètres AnBS_MetQuoi et AnBU_MetQuoiet AnB_NbOctets

Test AnB_Movlx
Toutes les macros Anb_Movl n'ont besoin ni d'espace mémoire du module, ni de code, l'instanciation de AnB_Installe est donc inutile.
La principale différence est la possibilité d'activer l'IT timer0 qui permet de compter le nombre de cycles nécessaires à l'exécution d'une macro du module.
Pour vérifier le fonctionnement, dans MPLABn choisir comme debugger MPLAB SIM et exécuter en pas à pas. une vue sur File Register permet de voir les variables traitées.
Une seule séquence mérite une remarque

Code : Tout sélectionner

  AnBU_Movl8To  Var1, 0xD2
  AnBU_Movl16To  Var1
, 0xD234
  AnBU_Movl24To  Var1
, 0xD23456
  
; dans l'instruction suivante, si on garde AnBU_, la macro plante
  ; en considérant 0xD2345678 comme un nombre négatif. Comme la 
  ; constante occupe les 4 octets, on peut utiliser AnBS_ sans 
  ; dommage
  AnBS_Movl32To  Var1, 0xD2345678

bien que le fichier d'aide dise
Note: Intermediate values in constant expressions are treated as 32-bit unsigned integers. Whenever an attempt is made to place a constant in a field for which it is too large, a truncation warning will be issued.


Suite sur les autres fonctionnalités dans les jours qui viennent.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Cordialement

JJE

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

Arithmétique n bits Introduction
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1493
Âge : 69
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » jeu. 25 juil. 2019 10:59

bonjour JJE,


je vois que tu abats un énorme travail .

Est-tu en train de faire un nouveau langage de programmation ?
en encapsulant l'ASM traditionnel.

Pour ma part, je prefere rester sur le classique , qui est d'usage
déja assez lourd à apprendre, mais qui garde un air familier quelque soit le Processeur utilisé.
..6502, Z80,8086,PIC

Voyons par la suite , si la communauté ASM t'encourage à poursuivre dans cette voie.
car je suis finalement mal placé, vu que j'utilise (maintenant) surtout le C .
Aides toi, le ciel ou Fantastpic t'aideras

Arithmétique n bits Introduction
F6FCO
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 879
Âge : 65
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#3 Message par F6FCO » jeu. 25 juil. 2019 13:05

Bonjour tous,

Une super idée que tu as là JJE, j'aime bien le concept de code clé en main/caisse à outils réutilisable.
Pour la forme puisque PaulFjujo l'a dit je ne peux que ré-enchérir :wink: . Sans vouloir te froisser et sans ouvrir de polémique JJE je préfère moi aussi le beau code ASM, simple et bien aligné qui me rappelle les premiers ordinateurs personnels quand je codais sur les Z80, 6502 et 68000.
C'est d'ailleurs cette nostalgie qui m'a fait revenir à l'asm plutôt qu'au C et pour ma part je n'ai pas envie de le dénaturer en le faisant ressembler à un langage évolué.
Une porte nand prend 2 bits en entrée... cochonne va !!! :langue:

Arithmétique n bits Introduction
JJE
Passioné
Passioné
Messages : 357
Âge : 79
Enregistré en : novembre 2017
Localisation : Picardie

#4 Message par JJE » ven. 26 juil. 2019 14:45

ma machine est en rideau, j'utilise cella de ma femme avec Chrome sous W10 et là catastrophe, notre site si bien présenté d'habitude, n'a plus aucub graphique, ni mise en page ...
Quelqu'un connait-il ce pb ?
Cordialement

JJE

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

Arithmétique n bits Introduction
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 209
Âge : 64
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#5 Message par Claudius » ven. 26 juil. 2019 18:23

Bonjour JJE et à tous,

Tente de mettre à jour Chrome car pas de problème avec:

Google Chrome
Google Chrome est à jour
Version 75.0.3770.142 (Build officiel) (64 bits)

Arithmétique n bits Introduction
satinas
Passioné
Passioné
Messages : 420
Enregistré en : novembre 2015

#6 Message par satinas » ven. 26 juil. 2019 19:34

Bonjour,
si l'adresse du site est en https, essaye en http
Google retourne l'adresse https

Arithmétique n bits Introduction
Jérémy
Administrateur du site
Administrateur du site
Messages : 2371
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#7 Message par Jérémy » ven. 26 juil. 2019 21:06

Oui le https:// provoque des erreurs. il faut que je trouve le temps de faire la, modification. .... un jour peut être un jour.......
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Arithmétique n bits Introduction
F6FCO
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 879
Âge : 65
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#8 Message par F6FCO » ven. 26 juil. 2019 22:14

Bonsoir JJE et les autres,
Cà m'arrive souvent, du texte au lieu du forum graphique, j'enlève le "s" de https et je retombe sous mon Fantaspic vert. Je suis sous W7.
Une porte nand prend 2 bits en entrée... cochonne va !!! :langue:

Arithmétique n bits Introduction
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1367
Enregistré en : juillet 2016
Localisation : Terre

#9 Message par Temps-x » ven. 26 juil. 2019 22:38

Bonsoir JJE

Essai avec cette adresse : www.fantaspic.fr

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Arithmétique n bits Introduction
JJE
Passioné
Passioné
Messages : 357
Âge : 79
Enregistré en : novembre 2017
Localisation : Picardie

#10 Message par JJE » sam. 27 juil. 2019 06:43

merci à tous pour ces conseils, finalement je viens de réactiver un vieux portable qui rame sous W10 mais affiche correctement FantasPic à qui je souhaite un bon anniversaire :bravo:
Cordialement

JJE

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


Retourner vers « Langage ASM »

Qui est en ligne

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