IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

Le , par ToutEnMasm

37PARTAGES

0  0 
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.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de 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.
1  0 
Avatar de 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.
1  0 
Avatar de Forthman
Membre chevronné https://www.developpez.com
Le 31/03/2009 à 9:09
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
1  0 
Avatar de 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.
0  0 
Avatar de 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
[RIP_INFO:
dwError: DWORD ?
dwType: DWORD ?]

Ou, pour des évocations plus lisibles au sein du source:
Code : Sélectionner tout
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.
0  0 
Avatar de 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.
0  0 
Avatar de 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" !
0  0 
Avatar de spidermario
Membre éprouvé 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.
0  0 
Avatar de 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.
0  0 
Avatar de 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...).
0  0