De la normalisation du langage Assembleur
Une syntaxe unique pour tous les assembleurs ?

Le , 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.


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Rémi Coquet Rémi Coquet - Membre actif https://www.developpez.com
le 25/03/2009 à 12:45
Citation Envoyé par ToutEnMasm  Voir le message
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.
Avatar de ToutEnMasm ToutEnMasm - Membre actif https://www.developpez.com
le 25/03/2009 à 15:43
Un petit exemple
Code : Sélectionner tout
1
2
3
4
5
6
;masm,tasm ,jwasm..++ syntax 
 
RIP_INFO	STRUCT 
	dwError DWORD ? 
	dwType DWORD ? 
RIP_INFO		ENDS
Code : Sélectionner tout
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.
Avatar de Rémi Coquet Rémi Coquet - Membre actif https://www.developpez.com
le 25/03/2009 à 18:54
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 : Sélectionner tout
1
2
3
[RIP_INFO: 
dwError: DWORD ? 
dwType: DWORD ?]

Ou, pour des évocations plus lisibles au sein du source:
Code : Sélectionner tout
1
2
3
[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.
Avatar de ToutEnMasm ToutEnMasm - Membre actif https://www.developpez.com
le 26/03/2009 à 8:55
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.
Avatar de Rémi Coquet Rémi Coquet - Membre actif https://www.developpez.com
le 26/03/2009 à 9:44
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.
Avatar de ToutEnMasm ToutEnMasm - Membre actif https://www.developpez.com
le 26/03/2009 à 19:15
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" !

Avatar de spidermario spidermario - Membre éclairé https://www.developpez.com
le 27/03/2009 à 18:33
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.
Avatar de ToutEnMasm ToutEnMasm - Membre actif https://www.developpez.com
le 27/03/2009 à 21:20
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.
Avatar de Rémi Coquet Rémi Coquet - Membre actif https://www.developpez.com
le 28/03/2009 à 12:32
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 : Sélectionner tout
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 : Sélectionner tout
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 : Sélectionner tout
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...).
Avatar de ToutEnMasm ToutEnMasm - Membre actif https://www.developpez.com
le 28/03/2009 à 15:43
Salut,
Il y a un truc que j'aime bien dans le c++ et que je ne retrouve pas dans masm , c'est la distinction entre pointeur , pointeur de pointeur et valeur.
En c++ une adresse * value ,une valeur value (reduction je passe le &).
c++ ** value , fait explicitement référence à une variable contenant une adresse .
Et la on sait comment traiter automatiquement ce type de donnnée.
Il faut au moins trois lignes en assembleur pour retrouver la valeur.

avec ** on sait que l'on rentre dans un type d'adressage style interface.
Et l'on sait comment retrouver le pointeur sur la donnée cité plus haut.

Pour rester dans le sujet , un assembleur devrait aussi proposer une macro pour faire des appels com aussi simples a utiliser qu'un appel d'api.
Offres d'emploi IT
Développeur électronique
SILKHOM - Rhône Alpes - Lyon (69000)
Ingénieur confirmé développement double compétence MAINFRAME
Norsys Sophia-Antipolis - Provence Alpes Côte d'Azur - Sophia-Antipolis
programmeur circuit intégré (assembleur)
GD-Audio - Belgique - Bruxelles

Voir plus d'offres Voir la carte des offres IT
Responsable bénévole de la rubrique Assembleur : Alcatîz -