Section courante

A propos

Section administrative du site

MASM

Macro Assembler
MS-DOS 2 Externe

Syntaxe

MASM
MASM source_file [,[object_file][,[list_file][,[cref_file]]]] [options] [;]

Paramètres

Nom Description
source_file Ce paramètre permet d'indiquer le nom du fichier contenant le code source du langage assembleur (extension par défaut = .ASM).
object_file Ce paramètre permet d'indiquer le nom du fichier destiné à recevoir le module objet assemblé (extension par défaut = .OBJ).
list_file Ce paramètre permet d'indiquer le nom du fichier ou du périphérique devant recevoir la liste de l'assembleur. La valeur par défaut est NUL. Si destination = fichier, extension par défaut = .LST.
cref_file Ce paramètre permet d'indiquer le nom du fichier de référence croisée devant recevoir des informations pour un traitement ultérieur par l'utilitaire CREF (par défaut = NUL). Si destination = fichier, extension par défaut = .CRF.
/A Ce paramètre permet d'écrire les segments de programme par ordre alphabétique.
/Bn Ce paramètre permet de définir la taille du tampon du fichier source en kilo-octets (1 à 63, par défaut = 32).
/C Ce paramètre permet de créer un fichier de référence croisée (.CRF).
/D Ce paramètre permet d'ajouter une liste de programmes de premier passage à list_file si un fichier de liste a été spécifié. La valeur par défaut = liste de seconde passe uniquement.
/Dsymbol Ce paramètre permet de définir le symbole comme une chaîne de caractères de texte nulle.
/E Ce paramètre permet d'assembler le code d'un émulateur 8087/80287.
/Ipath Ce paramètre permet de définir un répertoire dans lequel rechercher des fichiers d'inclusion.
/L Ce paramètre permet de créer un fichier de liste (.LST) avec des informations de numéro de ligne.
/ML Ce paramètre permet de préserver le respect de la casse dans tous les noms de symboles.
/MU Ce paramètre permet de convertir tous les noms minuscules en noms majuscules.
/MX Ce paramètre permet de conserver les minuscules dans les noms publics et externes uniquement.
/N Ce paramètre permet de supprimer la génération de tables de macros, structures, enregistrements, groupes, segments et symboles à la fin du fichier de liste.
/P Ce paramètre permet de vérifier le code impur en mode protégé 80286; n'a aucun effet à moins que la directive .286P ne soit incluse dans le fichier source.
/R Ce paramètre permet d'assembler le code d'un coprocesseur mathématique 8087/80287.
/S Ce paramètre permet d'organiser les segments de programme par ordre d'occurrence.
/T Ce paramètre permet de sélectionner le mode concis, supprimant tous les messages générés lors de l'assemblage, à l'exception des messages d'erreur.
/V Ce paramètre permet de sélectionner le mode détaillé, affichant le nombre de lignes et de symboles à la fin de l'assemblage.
/X Ce paramètre permet d'inclure de fausses conditions dans le fichier de liste.
/Z Ce paramètre permet d'afficher les lignes source avec des erreurs lors de l'assemblage.

Description

Cette commande permet de lancer le Macro Assembler. Ainsi, elle permet de convertir un programme de code source de langage de programmation assembleur en un module objet relocalisable.

Remarques

Liste des messages

Message Description
8087 opcode can't be emulated Un opcode 8087 ou les opérandes utilisés avec lui ont produit une instruction que l'émulateur ne peut pas prendre en charge.
Already defined locally Une tentative a été faite pour définir un symbole comme EXTRN ayant déjà été défini localement.
Already had ELSE clause Une tentative a été faite pour définir une clause ELSE dans une clause ELSE existante. (ELSE ne peut pas être imbriqué sans imbriquer IF ... ENDIF.)
Already have base register Plus d'un registre de base a été spécifié dans un opérande.
Already have index register Plusieurs registres d'index ont été spécifiés dans un opérande.
Block nesting error Un segment, une structure, une macro, un IRC, un IRP, un REPT ou une procédure imbriquée ne s'est pas terminé correctement.
Byte register is illegal Un registre d'octets a été utilisé de manière incorrecte dans une instruction.
Can't override ES segment Une tentative a été faite pour remplacer le segment ES dans une instruction dans laquelle ce remplacement n'est pas valide.
Can't reach with segment reg Aucune directive ASSUME n'a été donnée pour rendre la variable accessible.
Can't use EVEN on BYTE segment Une directive EVEN a été utilisée sur un segment déclaré être un segment d'octet.
Circular chain of EQU aliases Un alias EQU pointe finalement vers lui-même.
Constant was expected Une constante était attendue, mais un élément a été reçu ne correspondant pas à une constante.
CS register illegal usage Le registre CS a été utilisé de manière incorrecte dans l'une des instructions.
Data emitted with no segment Le code ne se trouvant pas dans un segment a tenté de générer des données.
Directive illegal in STRUC Toutes les instructions dans les blocs STRUC doivent être des commentaires précédés d'un point-virgule (;) ou l'une des directives de définition (DB, DW,...).
Division by 0 or overflow Une expression a été rencontrée ayant entraîné une division par 0 ou un nombre trop grand pour être représenté.
DUP is too large for linker L'imbrication des opérateurs DUP était telle qu'un enregistrement trop volumineux pour LINK a été créé.
End of file, no END directive Aucune instruction END n'a été rencontrée ou une erreur d'imbrication s'est produite.
Extra characters on line Des caractères superflus ont été détectés sur une ligne après que des informations suffisantes pour définir une instruction aient été interprétées.
extra file name ignored La ligne de commande contenait plus de quatre paramètres de nom de fichier.
Field cannot be overridden Une tentative a été faite pour donner une valeur à un champ ne pouvant pas être remplacée par une instruction d'initialisation STRUC.
Forced error Une erreur a été forcée avec la directive .ERR.
Forced error - expression equals 0 Une erreur a été forcée avec la directive .ERRE.
Forced error - expression not equal 0 Une erreur a été forcée avec la directive .ERRNZ.
Forced error - pass1 Une erreur a été forcée avec la directive .ERR1.
Forced error - pass2 Une erreur a été forcée avec la directive .ERR2.
Forced error - string blank Une erreur a été forcée avec la directive .ERRB.
Forced error - string not blank Une erreur a été forcée avec la directive .ERRNB.
Forced error - strings different Une erreur a été forcée avec la directive .ERRDIF.
Forced error - strings identical Une erreur a été forcée avec la directive .ERRIDN.
Forced error - symbol defined Une erreur a été forcée avec la directive .ERRDEF.
Forced error - symbol not defined Une erreur a été forcée avec la directive .ERRNDEF.
Forward reference is illegal Un élément était référencé dans l'opérande d'une directive EQU ou de signe égal (=) avant d'être défini.
Illegal register value Une valeur de registre spécifiée ne rentre pas dans le champ reg (c'est-à-dire que la valeur est supérieure à 7).
Illegal size for item La taille de l'élément référencé n'est pas valide. Cette erreur se produit également fréquemment lors d'une tentative d'assemblage de code source écrit pour les assembleurs avec une vérification de type moins stricte que celle de Microsoft Macro Assembler (comme les premières versions de l'assembleur IBM). Le problème peut généralement être résolu en remplaçant le type de l'opérande par l'opérateur PTR.
Illegal use of external Une variable déclarée externe a été utilisée de manière incorrecte.
Illegal use of register Une tentative a été faite pour utiliser un registre avec une instruction dans laquelle un registre ne peut pas être utilisé.
Illegal value for DUP count Le nombre DUP n'était pas une constante s'évaluant à un entier positif supérieur à zéro.
Improper operand type Un opérande a été utilisé d'une manière qui empêche la génération d'opcode.
Improper use of segment register Une tentative a été faite pour utiliser un registre de segment dans une instruction dans laquelle l'utilisation d'un registre de segment n'est pas autorisée.
Impure memory reference Une tentative de stockage des données dans le segment de code a été effectuée lorsque la directive .286P et le commutateur /P étaient en vigueur.
Index displ. must be constant Un déplacement d'index a été utilisé de manière incorrecte ou n'a pas été évalué à un nombre absolu ou à une adresse mémoire.
Internal error Une erreur de logique interne a été détectée dans l'assembleur.
Label can't have seg. override Un remplacement de segment a été utilisé de manière incorrecte.
Left operand must have segment Le contenu de l'opérande de droite nécessite qu'un segment soit spécifié dans l'opérande de gauche.
Line too long expanding symbol Un symbole défini par une directive EQU ou égal-signe (=) est si long que son expansion provoquera un débordement des tampons internes de l'assembleur. Ce message peut indiquer une macro de texte récursive.
Missing data; zero assumed Un opérande est absent d'une instruction et MASM suppose que sa valeur est zéro. Ceci est une erreur d'avertissement; le fichier objet n'est pas supprimé car il est avec des erreurs graves.
More values than defined with Trop de valeurs initiales ont été données lors de la définition d'une variable à l'aide d'un type REC ou STRUC.
Must be associated with code Un élément lié aux données a été utilisé lorsqu'un élément lié au code était attendu.
Must be associated with data Un élément lié au code a été utilisé lorsqu'un élément lié aux données était attendu.
Must be AX or AL Un registre autre que AX ou AL a été spécifié là où seuls ceux-ci sont acceptables.
Must be in segment block Une tentative a été faite pour générer du code par des instructions qui n'étaient pas contenues dans un segment.
Must be index or base register Une instruction nécessite un registre de base ou d'index, et un autre registre a été spécifié entre crochets ([]).
Must be record field name Un nom de champ d'enregistrement était attendu, mais quelque chose d'autre s'est produit.
Must be record or fieldname Un nom d'enregistrement ou un nom de champ était attendu, mais quelque chose d'autre s'est produit.
Must be register Un registre était attendu comme opérande, mais quelque chose d'autre a été rencontré.
Must be segment or group Un segment ou un groupe était attendu, mais quelque chose d'autre a été rencontré.
Must be structure field name Un nom de champ de structure était attendu, mais quelque chose d'autre s'est produit.
Must be symbol type Un BYTE, WORD, DWORD ou une désignation similaire était attendu, mais quelque chose d'autre a été rencontré.
Must be var, label or constant Une variable, une étiquette ou une constante était attendue, mais quelque chose d'autre a été rencontré.
Must have opcode after prefix Une instruction REP, REPE, REPNE, REPZ ou REPNZ n'était pas suivie du mnémonique d'une opération de chaîne.
Near JMP/CALL to different CS Une tentative a été faite pour effectuer un saut NEAR ou un appel à un emplacement dans un segment de code défini avec un ASSUME:CS différent.
No immediate mode Des données immédiates ont été fournies comme opérande pour une instruction ne pouvant pas utiliser de données immédiates. Par exemple, les données immédiates ne peuvent pas être déplacées directement avec une instruction MOV vers un registre de segment; il doit d'abord être déplacé dans un registre général puis copié dans le registre de segment.
No or unreachable CS Une tentative a été effectuée pour accéder à une étiquette inaccessible.
Normal type operand expected Un STRUC, BYTE, WORD ou un autre opérande non valide a été rencontré lorsqu'une étiquette de variable était attendue.
Not in conditional block Une instruction ENDIF ou ELSE a été rencontrée et aucune directive d'assemblage conditionnel précédente n'était active.
Not proper align/combine type Les paramètres SEGMENT sont incorrects. Vérifiez les types d'alignement et de combinaison pour vous assurer qu'ils sont valides.
One operand must be const L'opérateur d'addition n'a pas été utilisé correctement.
Only initialize list legal Une tentative a été faite pour utiliser un nom STRUC sans chevrons (<>).
Operand combination illegal Une instruction à deux opérandes a été spécifiée et la combinaison spécifiée n'était pas valide.
Operand must have segment Une directive SEG a été utilisée de manière incorrecte.
Operand must have size Un opérande a été rencontré nécessitant une taille spécifiée, mais aucun n'a été fourni. Souvent, cette erreur peut être corrigée en utilisant l'opérateur PTR pour spécifier un type de taille.
Operand not in IP segment Un opérande n'est pas accessible car il ne se trouve pas dans le dernier segment affecté à CS avec une directive ASSUME.
Operand types must match MASM a rencontré différents types ou tailles d'arguments dans un cas où ils doivent correspondre.
Operand was expected MASM attendait un opérande, mais un opérateur a été rencontré.
Operands must be same or 1 abs L'opérateur de soustraction n'a pas été utilisé correctement.
Operator was expected MASM attendait un opérateur, mais un opérande a été rencontré.
Out of memory La mémoire système est insuffisante pour terminer l'assemblage. Si un fichier de liste (.LST) ou de référence croisée (.CRF) était en cours de génération, réessayez l'assemblage en générant uniquement un fichier objet. Il peut également être nécessaire de modifier le programme source pour réduire la charge sur la table de symboles (en raccourcissant les noms ou en réduisant le nombre d'instructions EQU ou de macros, par exemple).
Override is of wrong type Une tentative d'utilisation d'un élément de données de taille incorrecte a été effectuée dans une instruction d'initialisation STRUC.
Override value is wrong length La valeur de remplacement d'un champ de structure est trop grande pour tenir dans le champ.
Override with DUP is illegal Une tentative d'utilisation du DUP pour remplacer dans une instruction d'initialisation STRUC a été effectuée.
Phase error between passes Le programme a des directives d'instructions ambiguës qui ont provoqué un changement de valeur de l'emplacement d'une étiquette dans le programme entre les première et deuxième passages de MASM. Une cause courante est une référence directe à un élément de données typé dans les instructions précédant l'étiquette ayant généré le message d'erreur de phase. Utilisez le commutateur /D pour produire une liste de premier passage pour aider à résoudre les erreurs de phase entre les passages.
Redefinition of symbol Ce message est affiché lors du premier passage lors de la deuxième déclaration d'un symbole ayant été défini à plusieurs endroits.
Reference to mult defined L'instruction fait référence à un symbole qui a été défini plusieurs fois.
Register already defined Une erreur interne a été détectée.
Relative jump out of range Un saut conditionnel fait référence à une étiquette qui est hors de la plage autorisée de -128 à +127 octets par rapport à l'instruction en cours. Le problème peut généralement être corrigé en inversant la condition du saut et en utilisant un saut inconditionnel (JMP) vers l'étiquette hors de portée.
Segment parameters are changed La liste des paramètres rencontrés pour un SEGMENT n'était pas identique à la liste spécifiée lors de la première utilisation du segment.
Shift count is negative Une expression de décalage a été générée, ce qui a entraîné un décompte de décalage négatif.
Should have been group name Un nom de groupe était attendu, mais quelque chose d'autre a été rencontré.
Symbol already different kind Une tentative a été faite pour redéfinir un symbole déjà défini.
Symbol has no segment Une tentative a été faite pour utiliser une variable avec SEG n'ayant pas de segment connu.
Symbol is already external Une tentative a été faite pour redéfinir un symbole comme local qui a déjà été défini comme externe.
Symbol is multi-defined Ce message s'affiche lors du deuxième passage à chaque déclaration d'un symbole défini à plusieurs endroits.
Symbol is reserved word Une tentative a été faite pour utiliser un mot MASM réservé comme symbole.
Symbol not defined Un symbole non défini a été utilisé.
Symbol type usage illegal Un symbole PUBLIC a été utilisé de manière incorrecte.
Syntax error La syntaxe de l'instruction ne correspond à aucune syntaxe reconnaissable.
Type illegal in context Le type spécifié est d'une taille inacceptable.
Unable to open input file filename Le fichier source spécifié est introuvable.
unknown switch letter La ligne de commande comprenait un commutateur non valide.
Unknown symbol type MASM ne reconnaît pas le type de taille spécifié dans une étiquette ou une déclaration externe. Réécrivez avec un type valide tel que BYTE, WORD ou NEAR.
Value is out of range Une valeur est trop grande pour son utilisation prévue.
Wrong type of register Une directive ou une instruction attendait un type de registre, mais un autre type a été rencontré.

Exemples

L'exemple suivadnt permet d'assembler le fichier source CLEAN.ASM dans l'unité de disque et le répertoire actuels et placer le module d'objet relocalisable résultant dans e fichier CLEAN.OBJ sans produire de liste ou de fichier de référence croisée :

MASM CLEAN; Enter

Le point-virgule après le premier paramètre oblige MASM à utiliser les valeurs par défaut pour le reste des paramètres. Pour assembler le fichier source CLEAN.ASM, placez le code objet dans un fichier nommé CLEAN.OBJ, créez un fichier liste nommé CLEAN.LST et placez les informations pour un traitement ultérieur par l'utilitaire CREF dans le fichier de référence croisée CLEAN.CRF, taper la commande suivante :

MASM CLEAN,CLEAN,CLEAN,CLEAN Enter

ou

MASM CLEAN,,CLEAN,CLEAN Enter

Pour utiliser MASM de manière interactive, entrez son nom sans paramètres :

MASM Enter

L'exemple suivant MASM demande alors toutes les informations nécessaires. Par exemple, la session interactive de la page suivante assemble le fichier BONJOUR.ASM dans le fichier BONJOUR.OBJ, ne produisant aucune liste ou fichier .CRF :

MASM Enter

on obtiendra un résultat ressemblant à ceci :

Microsoft (R) Macro Assembler Version 4.00
Copyright (C) Microsoft Corp 1981, 1983, 1984, 1985. All rights reserved

Source filename: [.ASM]: BONJOUR Enter
Object filename: [BONJOUR.OBJ]: Enter
Source listing [NUL.LST]: Enter
Cross-reference [NUL.CRF]: Enter

51004 Bytes symbol space free

    0 Warning Errors
    0 Severe Errors


Dernière mise à jour : Lundi, le 24 Mai 2021