Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa pagina contiene una descrizione BNF della grammatica MASM. Viene fornito come supplemento al riferimento e non è garantito che sia completo. Consultare il riferimento per informazioni complete su parole chiave, parametri, operazioni e così via.
Per illustrare l'uso del BNF, il diagramma seguente illustra la definizione della TYPEDEF direttiva, a partire da typedefDir.

Le voci sotto ogni parentesi graffa orizzontale sono terminali, ad esempio NEAR16, NEAR32FAR16, e FAR32. In alternativa, sono non determinili, ad qualifieresempio , qualifiedTypedistance, e protoSpec che possono essere ulteriormente definiti. Ogni carattere non deterministico corsivo nella typedefDir definizione è anche una voce nel BNF. Tre punti verticali indicano una definizione di diramazione per un non deterministico che, per semplicità, questa figura non illustra.
La grammatica BNF consente definizioni ricorsive. Ad esempio, la grammatica usa qualifiedType come possibile definizione per qualifiedType, che è anche un componente della definizione per qualifier. Il simbolo "|" specifica una scelta tra espressioni alternative, ad esempio endOfLine | comment. Le parentesi graffe doppie specificano un parametro facoltativo, ad esempio ⟦ macroParmList ⟧. Le parentesi quadre non vengono effettivamente visualizzate nel codice sorgente.
MASM non determinili
;;
endOfLine | comment
=Dir
id = immExpr ;;
addOp
+ | -
aExpr
term | aExpr && term
altId
id
alpha
Qualsiasi lettera maiuscola o minuscola (A-Z) o uno di questi quattro caratteri: @ _ $ ?
arbitraryText
charList
asmInstruction
mnemonicexprList ⟦ ⟧
assumeDir
ASSUME assumeList ;;
| ASSUME NOTHING ;;
assumeList
assumeRegister | assumeList , assumeRegister
assumeReg
register : assumeVal
assumeRegister
assumeSegReg | assumeReg
assumeSegReg
segmentRegister : assumeSegVal
assumeSegVal
frameExpr | NOTHING | ERROR
assumeVal
qualifiedType | NOTHING | ERROR
bcdConst
sign ⟦ ⟧decNumber
binaryOp
== | != | >= | <= | > | < | &
bitDef
bitFieldId: bitFieldSize = constExpr ⟦ ⟧
bitDefList
bitDef | bitDefList, ;; ⟦ ⟧bitDef
bitFieldId
id
bitFieldSize
constExpr
blockStatements
directiveList
| .CONTINUE.IF cExpr ⟦ ⟧
| .BREAK.IF cExpr ⟦ ⟧
bool
TRUE | FALSE
byteRegister
AL | AH | CL | CH | DL | DH | BL | BH | R8B | R9B | R10B | R11B | R12B | R13B | R14B | R15B
cExpr
aExpr | cExpr || aExpr
character
Qualsiasi carattere con ordinale nell'intervallo da 0 a 255 ad eccezione del avanzamento riga (10).
charList
character | charList character
className
string
commDecl
nearfar ⟦ ⟧ ⟦ langType ⟧ id : commType
: constExpr ⟦ ⟧
commDir
COMM
commList ;;
comment
; text ;;
commentDir
COMMENT delimiter
text
text delimiter text ;;
commList
commDecl | commList , commDecl
commType
type | constExpr
constant
digitsradixOverride ⟦ ⟧
constExpr
expr
contextDir
PUSHCONTEXT contextItemList ;;
| POPCONTEXT contextItemList ;;
contextItem
ASSUMES | RADIX | LISTING | CPU | ALL
contextItemList
contextItem | contextItemList , contextItem
controlBlock
whileBlock | repeatBlock
controlDir
controlIf | controlBlock
controlElseif
.ELSEIF cExpr ;;
directiveList
controlElseif ⟦ ⟧
controlIf
.IF cExpr ;;
directiveList
controlElseif ⟦ ⟧
.ELSE⟦ ;;
directiveList⟧
.ENDIF ;;
coprocessor
.8087 | .287 | .387 | .NO87
crefDir
crefOption ;;
crefOption
.CREF
| .XCREFidList ⟦ ⟧
| .NOCREFidList ⟦ ⟧
cxzExpr
expr
| ! expr
| expr == expr
| expr != expr
dataDecl
DB | DW | DD | DF | DQ | DT | dataType | typeId
dataDir
id ⟦ ⟧ dataItem ;;
dataItem
dataDecl scalarInstList
| structTag structInstList
| typeId structInstList
| unionTag structInstList
| recordTag recordInstList
dataType
BYTE | SBYTE | WORD | SWORD | DWORD | SDWORD | FWORD | QWORD | SQWORD | TBYTE | OWORD | REAL4 | REAL8 | REAL10 | MMWORD | XMMWORD | YMMWORD
decdigit
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
decNumber
decdigit
| decNumber decdigit
delimiter
Qualsiasi carattere tranne whiteSpaceCharacter
digits
decdigit
| digits decdigit
| digits hexdigit
directive
generalDir | segmentDef
directiveList
directive | directiveList directive
distance
nearfar | NEAR16 | NEAR32 | FAR16 | FAR32
e01
e01 orOp e02 | e02
e02
e02 AND e03 | e03
e03
NOT e04 | e04
e04
e04 relOp e05 | e05
e05
e05 addOp e06 | e06
e06
e06 mulOp e07 | e06 shiftOp e07 | e07
e07
e07 addOp e08 | e08
e08
HIGH e09
| LOW e09
| HIGHWORD e09
| LOWWORD e09
| e09
e09
OFFSET e10
| SEG e10
| LROFFSET e10
| TYPE e10
| THIS e10
| e09 PTR e10
| e09 : e10
| e10
e10
e10 . e11
| e10expr ⟦ ⟧
| e11
e11
( expr )
| expr ⟦ ⟧
| WIDTH id
| MASK id
| SIZE sizeArg
| SIZEOF sizeArg
| LENGTH id
| LENGTHOF id
| recordConst
| string
| constant
| type
| id
| $
| segmentRegister
| register
| ST
| ST ( expr )
echoDir
ECHO arbitraryText ;;
%OUT arbitraryText ;;
elseifBlock
elseifStatement ;;
directiveList
elseifBlock ⟦ ⟧
elseifStatement
ELSEIF constExpr
| ELSEIFE constExpr
| ELSEIFB textItem
| ELSEIFNB textItem
| ELSEIFDEF id
| ELSEIFNDEF id
| ELSEIFDIF textItem , textItem
| ELSEIFDIFI textItem , textItem
| ELSEIFIDN textItem , textItem
| ELSEIFIDNI textItem , textItem
| ELSEIF1
| ELSEIF2
endDir
ENDimmExpr ⟦ ⟧;;
endpDir
procId ENDP ;;
endsDir
id ENDS ;;
equDir
textMacroId EQU equType ;;
equType
immExpr | textLiteral
errorDir
errorOpt ;;
errorOpt
.ERRtextItem ⟦ ⟧
| .ERREconstExpr optText ⟦ ⟧
| .ERRNZconstExpr optText ⟦ ⟧
| .ERRBtextItem optText ⟦ ⟧
| .ERRNBtextItem optText ⟦ ⟧
| .ERRDEFid optText ⟦ ⟧
| .ERRNDEFid optText ⟦ ⟧
| .ERRDIFtextItem , textItem optText ⟦ ⟧
| .ERRDIFItextItem , textItem optText ⟦ ⟧
| .ERRIDNtextItem , textItem optText ⟦ ⟧
| .ERRIDNItextItem , textItem optText ⟦ ⟧
| .ERR1textItem ⟦ ⟧
| .ERR2textItem ⟦ ⟧
exitDir
.EXITexpr ⟦ ⟧;;
exitmDir
: EXITM | EXITM textItem
exponent
Esign ⟦ ⟧decNumber
expr
SHORT e05
| .TYPE e01
| OPATTR e01
| e01
exprList
expr | exprList , expr
externDef
langType ⟦ ⟧ id ⟦ ( altId ) ⟧ : externType
externDir
externKey externList ;;
externKey
EXTRN | EXTERN | EXTERNDEF
externList
externDef | externList, ;; ⟦ ⟧externDef
externType
ABS | qualifiedType
fieldAlign
constExpr
fieldInit
initValue ⟦ ⟧ |structInstance
fieldInitList
fieldInit | fieldInitList, ;; ⟦ ⟧fieldInit
fileChar
delimiter
fileCharList
fileChar | fileCharList fileChar
fileSpec
fileCharList | textLiteral
flagName
ZERO? | CARRY? | OVERFLOW? | SIGN? | PARITY?
floatNumber
sign ⟦ ⟧ decNumber . ⟦ decNumber ⟧ ⟦ exponent ⟧
| digits R
| digits r
forcDir
FORC | IRPC
forDir
FOR | IRP
forParm
id: forParmType ⟦ ⟧
forParmType
REQ | = textLiteral
fpuRegister
ST expr
frameExpr
SEG id
| DGROUP : id
| segmentRegister : id
| id
generalDir
modelDir | segOrderDir | nameDir
| includeLibDir | commentDir
| groupDir | assumeDir
| structDir | recordDir | typedefDir
| externDir | publicDir | commDir | protoTypeDir
| equDir | =Dir | textDir
| contextDir | optionDir | processorDir
| radixDir
| titleDir | pageDir | listDir
| crefDir | echoDir
| ifDir | errorDir | includeDir
| macroDir | macroCall | macroRepeat | purgeDir
| macroWhile | macroFor | macroForc
| aliasDir
gpRegister
AX | EAX | CX | ECX | DX | EDX | BX | EBX
| DI | EDI | SI | ESI | BP | EBP | SP | ESP
| R8W | R8D | R9W | R9D | R12D | R13W | R13D | R14W | R14D
groupDir
groupId GROUP segIdList
groupId
id
hexdigit
a | b | c | d | e | f
| A | B | C | D | E | F
id
alpha
| id alpha
| id decdigit
La lunghezza massima è di 247 caratteri.
idList
id | idList , id
ifDir
ifStatement ;;
directiveList
elseifBlock ⟦ ⟧
ELSE⟦ ;;
directiveList ⟧ ;;
ifStatement
IF constExpr
| IFE constExpr
| IFB textItem
| IFNB textItem
| IFDEF id
| IFNDEF id
| IFDIF textItem , textItem
| IFDIFI textItem , textItem
| IFIDN textItem , textItem
| IFIDNI textItem , textItem
| IF1
| IF2
immExpr
expr
includeDir
INCLUDE fileSpec ;;
includeLibDir
INCLUDELIB fileSpec ;;
initValue
immExpr
| string
| ?
| constExpr DUP ( scalarInstList )
| floatNumber
| bcdConst
inSegDir
labelDef ⟦ ⟧inSegmentDir
inSegDirList
inSegDir | inSegDirList inSegDir
inSegmentDir
instruction
| dataDir
| controlDir
| startupDir
| exitDir
| offsetDir
| labelDir
| procDirlocalDirList ⟦ ⟧ ⟦ inSegDirList ⟧endpDir
| invokeDir
| generalDir
instrPrefix
REP | REPE | REPZ | REPNE | REPNZ | LOCK
instruction
instrPrefix ⟦ ⟧asmInstruction
invokeArg
register :: register
| expr
| ADDR expr
invokeDir
INVOKEexpr , ⟦ ⟦ ;; ⟧ invokeList ⟧;;
invokeList
invokeArg | invokeList, ;; ⟦ ⟧invokeArg
keyword
Qualsiasi parola riservata.
keywordList
keyword | keyword keywordList
labelDef
id : | id :: | @@:
labelDir
id LABEL qualifiedType ;;
langType
C | PASCAL | FORTRAN | BASIC | SYSCALL | STDCALL
listDir
listOption ;;
listOption
.LIST
| .NOLIST
| .XLIST
| .LISTALL
| .LISTIF
| .LFCOND
| .NOLISTIF
| .SFCOND
| .TFCOND
| .LISTMACROALL | .LALL
| .NOLISTMACRO | .SALL
| .LISTMACRO | .XALL
localDef
LOCAL idList ;;
localDir
LOCAL parmList ;;
localDirList
localDir | localDirList localDir
localList
localDef | localList localDef
macroArg
% constExpr
| % textMacroId
| % macroFuncId ( macroArgList )
| string
| arbitraryText
| < arbitraryText >
macroArgList
macroArg | macroArgList , macroArg
macroBody
localList ⟦ ⟧macroStmtList
macroCall
id macroArgList ;;
| id ( macroArgList )
macroDir
idMACRO macroParmList ⟦ ⟧;;
macroBody
ENDM ;;
macroFor
forDir forParm , < macroArgList > ;;
macroBody
ENDM ;;
macroForc
forcDir id , textLiteral ;;
macroBody
ENDM ;;
macroFuncId
id
macroId
macroProcId | macroFuncId
macroIdList
macroId | macroIdList , macroId
macroLabel
id
macroParm
id: parmType ⟦ ⟧
macroParmList
macroParm | macroParmList, ;; ⟦ ⟧macroParm
macroProcId
id
macroRepeat
repeatDir constExpr ;;
macroBody
ENDM ;;
macroStmt
directive
| exitmDir
| : macroLabel
| GOTO macroLabel
macroStmtList
macroStmt ;;
| macroStmtList macroStmt ;;
macroWhile
WHILE constExpr ;;
macroBody
ENDM ;;
mapType
ALL | NONE | NOTPUBLIC
memOption
TINY | SMALL | MEDIUM | COMPACT | LARGE | HUGE | FLAT
mnemonic
Nome istruzione.
modelDir
.MODELmemOption , modelOptlist⟦ ⟧;;
modelOpt
langType | stackOption
modelOptlist
modelOpt | modelOptlist , modelOpt
module
directiveList ⟦ ⟧endDir
mulOp
* | / | MOD
nameDir
NAME id ;;
nearfar
NEAR | FAR
nestedStruct
structHdrid ⟦ ⟧;;
structBody
ENDS ;;
offsetDir
offsetDirType ;;
offsetDirType
EVEN
| ORG immExpr
| ALIGNconstExpr ⟦ ⟧
offsetType
GROUP | SEGMENT | FLAT
oldRecordFieldList
constExpr ⟦ ⟧ | oldRecordFieldList , ⟦ constExpr ⟧
optionDir
OPTION optionList ;;
optionItem
CASEMAP : mapType
| DOTNAME | NODOTNAME
| EMULATOR | NOEMULATOR
| EPILOGUE : macroId
| EXPR16 | EXPR32
| LANGUAGE : langType
| LJMP | NOLJMP
| M510 | NOM510
| NOKEYWORD : < keywordList >
| NOSIGNEXTEND
| OFFSET : offsetType
| OLDMACROS | NOOLDMACROS
| OLDSTRUCTS | NOOLDSTRUCTS
| PROC : oVisibility
| PROLOGUE : macroId
| READONLY | NOREADONLY
| SCOPED | NOSCOPED
| SEGMENT : segSize
| SETIF2 : bool
optionList
optionItem | optionList, ;; ⟦ ⟧optionItem
optText
, textItem
orOp
OR | XOR
oVisibility
PUBLIC | PRIVATE | EXPORT
pageDir
PAGEpageExpr ⟦ ⟧;;
pageExpr
+ | pageLength ⟦ ⟧ ⟦ , pageWidth ⟧
pageLength
constExpr
pageWidth
constExpr
parm
parmId: qualifiedType ⟦ ⟧
| parmIdconstExpr ⟦ ⟧ ⟦ : qualifiedType ⟧
parmId
id
parmList
parm | parmList, ;; ⟦ ⟧parm
parmType
REQ | = textLiteral | VARARG
pOptions
distance ⟦ ⟧ ⟦ langType ⟧ ⟦ oVisibility ⟧
primary
expr binaryOp expr | flagName | expr
procDir
procIdPROC pOptions ⟦ ⟧ ⟦ < macroArgList > ⟧
usesRegs ⟦ ⟧ ⟦ procParmList ⟧
processor
| .386 | .386p | .486 | .486P
| .586 | .586P | .686 | .686P | .387
processorDir
processor ;;
| coprocessor ;;
procId
id
procItem
instrPrefix | dataDir | labelDir | offsetDir | generalDir
procParmList
, ⟦ ⟦ ;; ⟧ parmList ⟧
, ⟦ ⟦ ;; ⟧ parmId :VARARG ⟧
protoArg
id ⟦ ⟧ : qualifiedType
protoArgList
, ⟦ ⟦ ;; ⟧ protoList ⟧
, ⟦ ⟦ ;; ⟧ ⟦ id ⟧ :VARARG ⟧
protoList
protoArg
| protoList, ;; ⟦ ⟧protoArg
protoSpec
distance ⟦ ⟧ ⟦ langType ⟧ ⟦ protoArgList ⟧
| typeId
protoTypeDir
id PROTO protoSpec
pubDef
langType ⟦ ⟧id
publicDir
PUBLIC pubList ;;
pubList
pubDef | pubList, ;; ⟦ ⟧pubDef
purgeDir
PURGE macroIdList
qualifiedType
type
| distance ⟦ ⟧ PTR ⟦ qualifiedType ⟧
qualifier
qualifiedType | PROTO protoSpec
quote
" | '
qwordRegister
RAX | RCX | RDX | RBX | RSP | RBP | RSI | RDI
| R8 | R9 | R10 | R11 | R12 | R13 | R14 | R15
radixDir
.RADIX constExpr ;;
radixOverride
h | o | q | t | y
| H | O | Q | T | Y
recordConst
recordTag { oldRecordFieldList }
| recordTag < oldRecordFieldList >
recordDir
recordTag RECORD bitDefList ;;
recordFieldList
constExpr ⟦ ⟧ | recordFieldList , ⟦ ;; ⟧ ⟦ constExpr ⟧
recordInstance
{;; ⟦ ⟧ recordFieldList ⟦ ;; ⟧}
| < oldRecordFieldList >
| constExpr DUP ( recordInstance )
recordInstList
recordInstance | recordInstList, ;; ⟦ ⟧recordInstance
recordTag
id
register
specialRegister | gpRegister | byteRegister | qwordRegister | fpuRegister | SIMDRegister | segmentRegister
regList
register | regList register
relOp
EQ | NE | LT | LE | GT | GE
repeatBlock
.REPEAT ;;
blockStatements ;;untilDir ;;
repeatDir
REPEAT | REPT
scalarInstList
initValue
| scalarInstList, ;; ⟦ ⟧initValue
segAlign
BYTE | WORD | DWORD | PARA | PAGE
segAttrib
PUBLIC | STACK | COMMON | MEMORY | AT constExpr | PRIVATE
segDir
.CODEsegId ⟦ ⟧
| .DATA
| .DATA?
| .CONST
| .FARDATAsegId ⟦ ⟧
| .FARDATA?segId ⟦ ⟧
| .STACKconstExpr ⟦ ⟧
segId
id
segIdList
segId
| segIdList , segId
segmentDef
segmentDirinSegDirList ⟦ ⟧ endsDirsimpleSegDir | ⟦ inSegDirList ⟧ ⟦ ⟧ endsDir
segmentDir
segIdSEGMENT segOptionList ⟦ ⟧;;
segmentRegister
CS | DS | ES | FS | GS | SS
segOption
segAlign
| segRO
| segAttrib
| segSize
| className
segOptionList
segOption | segOptionList segOption
segOrderDir
.ALPHA | .SEQ | .DOSSEG | DOSSEG
segRO
READONLY
segSize
USE16 | USE32 | FLAT
shiftOp
SHR | SHL
sign
+ | -
simdRegister
MM0 | MM1 | MM2 | MM3 | MM4 | MM5 | MM6 | MM7
| xmmRegister
| YMM0 | YMM1 | YMM2 | YMM3 | YMM4 | YMM5 | YMM6 | YMM7
| YMM8 | YMM9 | YMM10 | YMM11 | YMM12 | YMM13 | YMM14 | YMM15
simpleExpr
( cExpr ) | primary
simpleSegDir
segDir ;;
sizeArg
id | type | e10
specialChars
: | . | [ | ] | ( | ) | < | > | { | }
| + | - | / | * | & | % | !
| ' | \ | = | ; | , | "
| whiteSpaceCharacter
| endOfLine
specialRegister
CR0 | CR2 | CR3
| DR0 | DR1 | DR2 | DR3 | DR6 | DR7
| TR3 | TR4 | TR5 | TR6 | TR7
stackOption
NEARSTACK | FARSTACK
startupDir
.STARTUP ;;
stext
stringChar | stext stringChar
string
quotestext ⟦ ⟧quote
stringChar
quotequote | Qualsiasi carattere tranne virgolette.
structBody
structItem ;;
| structBody structItem ;;
structDir
structTagstructHdr fieldAlign ⟦ ⟧
, NONUNIQUE ⟦ ⟧;;
structBody
structTag ENDS ;;
structHdr
STRUC | STRUCT | UNION
structInstance
<fieldInitList ⟦ ⟧>
| {;; ⟦ ⟧ ⟦ fieldInitList ⟧ ⟦ ;; ⟧}
| constExprDUP ( structInstList )
structInstList
structInstance | structInstList, ;; ⟦ ⟧structInstance
structItem
dataDir
| generalDir
| offsetDir
| nestedStruct
structTag
id
term
simpleExpr | ! simpleExpr
text
textLiteral | text character | ! character text | character | ! character
textDir
id textMacroDir ;;
textItem
textLiteral | textMacroId | % constExpr
textLen
constExpr
textList
textItem | textList, ;; ⟦ ⟧textItem
textLiteral
< text > ;;
textMacroDir
CATSTRtextList ⟦ ⟧
| TEXTEQUtextList ⟦ ⟧
| SIZESTR textItem
| SUBSTRtextItem , textStart , textLen ⟦ ⟧
| INSTRtextStart , ⟦ ⟧ textItem , textItem
textMacroId
id
textStart
constExpr
titleDir
titleType arbitraryText ;;
titleType
TITLE | SUBTITLE | SUBTTL
type
structTag
| unionTag
| recordTag
| distance
| dataType
| typeId
typedefDir
typeId TYPEDEF qualifier
typeId
id
unionTag
id
untilDir
.UNTIL cExpr ;;
.UNTILCXZcxzExpr ⟦ ⟧;;
usesRegs
USES regList
whileBlock
.WHILE cExpr ;;
blockStatements ;;
.ENDW
whiteSpaceCharacter
ASCII 8, 9, 11–13, 26, 32
xmmRegister
XMM0 | XMM1 | XMM2 | XMM3 | XMM4 | XMM5 | XMM6 | XMM7
| XMM8 | XMM9 | XMM10 | XMM11 | XMM12 | XMM13 | XMM14 | XMM15