Developpez.com - Rubrique Assembleur

Le Club des Développeurs et IT Pro

De la normalisation du langage Assembleur

Une syntaxe unique pour tous les assembleurs ?

Le 2009-03-21 17:15:59, par ToutEnMasm, Membre actif
Bonjour,

Personnellement, je favoriserais les assembleurs répondant à une syntaxe normalisée comme MASM, TASM, ...
Le C donne l'exemple en se prétendant un langage indépendant des compilateurs (?..!), c'est vrai en partie.
Certains compilateurs Asm donnent franchement dans le particularisme syntaxique (NASM...) ou dans le particularisme fonctionnel (Rosasm).
L'Assembleur mérite mieux que ça.
  Discussion forum
18 commentaires
  • Rémi Coquet
    Membre actif
    Envoyé par ToutEnMasm
    personnellement,je favoriserais les assembleurs répondant a une syntaxe normalisée comme masm,tasm,.....
    le c donne l'exemple en se prétendant un langage indépendant des compilateurs (?..!),c'est vrai en partie.
    Certains compilateurs asm donnent franchement dans le particularisme syntaxique,nasm... ou dans le particularisme fonctionnel comme rosasm.
    L'asm mérite mieux que ça.

    Salut,

    Je ne comprends pas très bien le sens de ta (tes) réflexion(s) et j'ai besoin de précisions sur ce que tu veux vraiment dire:

    - Qu'appelles-tu (considères-tu) syntaxe normalisée (sur quelles bases, pourquoi etc.) ?

    - Le c donne l'exemple (de quoi ?)

    - En quoi le c est-il un script indépendant des compilateurs ? (Tu veux j'imagine, dire: Indépendant de la machine et/ou de l'OS cible ? Ce qui, comme chacun sait, est un fantasme et non une réalité de travail dans le monde réèl)

    Tu sembles critiquer le particularisme syntaxique ou fonctionnel (ce qui n'est pas vraiment la même chose) de certains éditeurs:

    - Que trouves-tu gênant, hormis la possibilité de choisir, de définir, ses propres conventions d'écritures, dans ces divers efforts ?

    - En quoi de nouvelles fonctionnalités sont-elles de mauvaises choses ?

    - Si elles ne sont pas de mauvaises choses elles sont forcément nouvelles, donc non-normalisées (voir de futurs nouvelles normes) ; Peux-tu préciser ?

    L'assembleur mérite mieux que cela, bien:

    - Quoi ?

    Je te remercie par avance pour tes précisions et éclaircissements.
  • Rémi Coquet
    Membre actif
    Je ne crois pas utile de justifier tout l'intérêt présenté par une syntaxe normalisée.
    Ce n'est nul par la question, mais: Qu'est-ce qu'une syntaxe normalisée en assembleur ?
    Tu ne réponds donc pas directement mais tu affirmes clairement qu'en dehors de MASM rien n'a de valeur même propositionnelle.

    En assembleur,le choix est facile à faire,il n'y pas de droit d'auteurs dessus.
    La syntaxe de masm tend à faire la norme...
    Un peu capillo-tractée la déclaration mais c'est ton avis, je le prends comme tel (sur les droits, je pense que tu t'égares un peu mais bon...)

    M'enfin,je vois mal nasm ou rosasm imposer la leur.
    Quels que soient les noms (cela importe peu en fait), tous ces excellents outils ont "imposé" leur syntaxe à tous ceux qui les utilisent, ce qui fait quand-même un très grand nombre de personnes hors normes et "indignes de l'assembleur" !
    Je comprends que tu fasses des choix syntaxiques liés à l'outil que tu utilises mais de là à les imposer comme norme, c'est excessif non ?
    (Mais non pas MASM ou Microsoft...)

    Je regrette un peu le manque d'argumentation construite qui aurait pu amener un peu d'aide aux divers lecteurs.
  • Forthman
    Membre chevronné
    Faudrait peut-être arrêter d'épiloguer sur le terme "indigne"

    Ce que moi j'en ai compris : l'assembleur n'est pas digne d'être écrit n'importe comment.
    Sous entendu il faudrait que TOUS les programmeurs assembleur puissent facilement comprendre le fonctionnement d'un bout de code écrit par d'autres

    Sur ce point je suis plutôt d'accord, si l'assembleur était normalisé, je pense
    qu'il aurait plus de succès.
    Il n'y a qu'à voir le nombre de questions de débutants : "je n'arrive pas à compiler un programme"
    Dans 99% des cas, les réponses sont du style :
    "ce programme a été écrit pour xxx et tu utilise xxx, il faut donc modifier ...etc..."

    a+ François
  • ToutEnMasm
    Membre actif
    Un petit exemple
    Code :
    1
    2
    3
    4
    5
    6
    ;masm,tasm ,jwasm..++ syntax
    
    RIP_INFO	STRUCT
    	dwError DWORD ?
    	dwType DWORD ?
    RIP_INFO		ENDS
    Code :
    1
    2
    3
    4
    5
    6
    ;nasm syntax
    
    STRUC RIP_INFO
    .dwError RESD 1
    .dwType RESD 1
    ENDSTRUC
    Pour le c, j'ai bien dit langage indépendant des compilateurs, pas d'autres choses.
    La syntaxe fait partie de cette normalisation.
  • Rémi Coquet
    Membre actif
    Merci pour ta réponse.
    Il me manque cependant pas mal d'éléments.

    Je te remercie pour l'exemple de déclaration de Datas virtuels sous forme de structures. J'imagine que le 1 indique le nombre de DWORD (ce qui ne serait pas complètement idiot dans de nombreux cas, puisqu'il s'agit de datas virtuels).
    Je pense que ce que tu déclares: "Certains compilateurs asm donnent franchement dans le particularisme syntaxique,nasm", est dû au "RESD" au lieu du "DWORD". Je suis d'accord avec toi sur le fait que ce genre de raccourcis n'est pas des plus lisibles. REP DWORD aurait gagné en lisibilité s'il est bien question de cela.

    Serais-tu néanmoins prêts à "tolérer":
    Code :
    1
    [RIP_INFO:
    dwError: DWORD ?
    dwType: DWORD ?]

    Ou, pour des évocations plus lisibles au sein du source:
    Code :
    1
    [STRUC.RIP_INFO:
    dwError: DWORD ?
    dwType: DWORD ?]

    J'imagine que la suppression de RIP_INFO ENDS pour un cadre de déclaration [...] reste "digne" d'un l'assembleur ? (Pour les compilateurs, c'est un autre domaine).

    Tu sembles apprécier particulièrement MASM (pas de problème), je comprends donc que tu fasses le rapprochement avec le C et les compilateurs (de scripts). MASM étant en effet un compilateur (créé avant toutes choses dans ce but par Microsoft), utilisable à la manière d'un assembleur, certes, mais cette particularité l'entraîne vers d'autres désavantages et sa syntaxe est loin d'être "normalisée" ou parfaite. Elle est plus proche des scripts (pour des raisons évidentes mentionnées plus haut) et utilise des mots clés inexistants en assembleur, qui ne sont justifiable que dans un compilateur. Le code généré n'est donc pas toujours forcément celui qui est écrit (les encapsulations n'apparaissent pas dans ton source (comme en C donc) mais le code dé-assemblé montre que cette encapsulations à bien lieu, et ce dans le mécanisme de substitution du compilateur.
    Il me semble que cela est plus préjudiciable à un véritable "assemblage" qu'une syntaxe (je te l'accorde dans l'exemple cité) plus ou moins pertinente. Je dis cela parque que cela est le corps de ton argumentation.

    Il me semble que le but de la syntaxe, est d'augmenter le plus possible la lisibilité du source et donc faciliter sa maintenance.
    Quand tu dis: "je favoriserais les assembleurs répondant a une syntaxe normalisée comme masm,tasm"

    Vu que TASM est un peu inutilisable au jour d'aujourd'hui, pourrais-tu citer un autre nom à coté de MASM ? Sinon, ton propos semblera vouloir signifier: "Je favoriserais masm que je considère comme la norme" ce qui serait somme-toute un peu excessif, non ?
    Il ne serait plus question de favoriser dans ce cas là mais d'imposer, comme normatif, ce qui est très différent et réclame quelques explications.
    Je sais que rédiger prend un peu plus de temps mais il serait agréable que tu répondes un peu plus amplement à mes précédentes questions.
    Le but étant de mieux comprendre les raisons profondes des (t)ces doléances, que je comprends, elles, fort bien.
  • ToutEnMasm
    Membre actif
    Je ne crois pas utile de justifier tout l'intérêt présenté par une syntaxe normalisée.
    Le genre de détails comme préférer vous une "," içi ou un ";" là sont sans intérêt.
    Une syntaxe c'est un peu comme de rouler à gauche ou à droite,il faut faire un choix.
    En assembleur,le choix est facile à faire,il n'y pas de droit d'auteurs dessus.
    La syntaxe de masm tend à faire la norme,on peut trouver ça excessif,je suis d'accord.Le rôle de microsoft est aussi excessif , je suis d'accord.
    M'enfin,je vois mal nasm ou rosasm imposer la leur.
  • ToutEnMasm
    Membre actif
    Il ne faut pas mal interpréter mes propos

    quand-même un très grand nombre de personnes hors normes et "indignes de l'assembleur" !
  • spidermario
    Membre éprouvé
    C'est également comme ça que je le comprends.

    Si ce n'est pas ce que tu as voulu dire, alors reformule tes pensées.
  • ToutEnMasm
    Membre actif
    Cela veut dire clairement que le langage asm mérite d'être aussi normalisé que le C.Il n'y a rien a chercher d'autre.
  • Rémi Coquet
    Membre actif
    Cette forme est nettement plus aimable, effectivement, mais la reformulation et "l'ouverture" était indispensable à la proposition.

    Pour ma part je travaille à la rédation d'un assembleur à syntaxe dynamique:

    Tu peux ecrires par exemple:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    mov registre [contenu de Lp]
    mov registre, [contenut de Lp]
    mov registre, D$Lp
    mov registre D$Lp
     
    Mov registre [contenu de Lp],
          registre [contenu de Lp],
          registre [contenu de Lp],
          registre registre,
          [contenu LP] constante,
          B$Lp al

    etc. (évidement, le mélange des syntaxes au sein d'un même source est déconseillé pour des questions de lisibilité, mais ce n'est pas impossible...)

    et une convention de préfixes assez complète pour les déclaration noms de Labels (qui ne tous forcément que des Lp):
    Code :
    1
    2
    3
    4
    5
    LP.MaVariable ; Ce Lp pointe sur un Lp
    DU.MaVariable ; Ce Lp pointe sur un DWORD Unsigned
    BS.MaVariable ; Ce Lp pointe sur un BYTE Signed
    STR.A.MaChaine ; Ce Lp pointe sur une chaîne ASCII
    STR.U.MaChaine ; Ce Lp pointe sur un chaîne UNICODE

    Les constantes sont déclarés en MAJUSCULES et acceptent les underscores:
    Code :
    1
    2
    3
    4
    5
    6
    WM_COMMAND 0_111 (ou 0111 ou 0111hex etc.)
     
    BYTE 1
    WORD (2*BYTE)
    DWORD (2*WORD) etc.
    BOTTOM (3*DWORD)

    Est-ce que cela te pose des problèmes ?

    Lesquels ?

    Pourquoi ?

    Que proposes-tu (vous)? (hormis de refaire MASM ce qui n'apporterai rien à personne...).