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.
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.
-
Rémi CoquetMembre actif
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.le 25/03/2009 à 12:45 -
Rémi CoquetMembre actifJe ne crois pas utile de justifier tout l'intérêt présenté par une syntaxe normalisée.
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...M'enfin,je vois mal nasm ou rosasm imposer la leur.
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.le 26/03/2009 à 9:44 -
ForthmanMembre 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çoisle 31/03/2009 à 9:09 -
ToutEnMasmMembre actifUn 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
La syntaxe fait partie de cette normalisation.le 25/03/2009 à 15:43 -
Rémi CoquetMembre actifMerci 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.le 25/03/2009 à 18:54 -
ToutEnMasmMembre actifJe 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.le 26/03/2009 à 8:55 -
ToutEnMasmMembre actifIl 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" !
le 26/03/2009 à 19:15 -
spidermarioMembre é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.le 27/03/2009 à 18:33 -
ToutEnMasmMembre actifCela 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.le 27/03/2009 à 21:20
-
Rémi CoquetMembre actifCette 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
11mov 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
5LP.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
6WM_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...).le 28/03/2009 à 12:32