Microsoft Macro Assembler BNF 文法
このページには、MASM 文法の BNF の説明が含まれています。 リファレンスに対する補足として提供されており、完全であるとは限りません。 キーワード、パラメーター、演算などの詳細については、リファレンスを参照してください。
BNF の使用方法について説明するために、次の図には、非終端要素 typedefDir
から始まる TYPEDEF
ディレクティブの定義が示されています。
各水平方向の中かっこの下にあるエントリは、NEAR16
、NEAR32
、FAR16
、FAR32
などの終端要素です。 または、さらに定義することができる qualifier
、qualifiedType
、distance
、protoSpec
などの非終端要素です。 typedefDir
定義内の斜体になっている各非終端要素は、BNF 内のエントリでもあります。 3 つの縦方向のドットは、非終端要素の分岐定義を示しています。わかりやすくするために、この図については説明しません。
BNF 文法では、再帰的な定義が許可されます。 たとえば、文法では qualifiedType
に可能な定義として qualifiedType
を使用します。これは、qualifier
の定義のコンポーネントでもあります。 "|" 記号は、別の式 (endOfLine
| comment
など) の間の選択肢を指定します。 二重中かっこは、⟦ macroParmList
⟧ などの省略可能なパラメーターを指定します。 角かっこは、実際にはソース コードには表示されません。
MASM 非終端要素
;;
endOfLine
| comment
=Dir
id
=
immExpr
;;
addOp
+
| -
aExpr
term
| aExpr
&&
term
altId
id
alpha
任意の大文字または小文字 (A から Z)、または @ _ $ ?
の 4 つの文字のいずれか
arbitraryText
charList
asmInstruction
mnemonic
⟦ exprList
⟧
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
0 から 255 の範囲の、改行を除く序数を持つ任意の文字 (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
digits
⟦ radixOverride
⟧
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
| .XCREF
⟦ idList
⟧
| .NOCREF
⟦ idList
⟧
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
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
| e10
⟦ expr
⟧
| 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
END
⟦ immExpr
⟧ ;;
endpDir
procId
ENDP
;;
endsDir
id
ENDS
;;
equDir
textMacroId
EQU
equType
;;
equType
immExpr
| textLiteral
errorDir
errorOpt
;;
errorOpt
.ERR
⟦ textItem
⟧
| .ERRE
constExpr
⟦ optText
⟧
| .ERRNZ
constExpr
⟦ optText
⟧
| .ERRB
textItem
⟦ optText
⟧
| .ERRNB
textItem
⟦ optText
⟧
| .ERRDEF
id
⟦ optText
⟧
| .ERRNDEF
id
⟦ optText
⟧
| .ERRDIF
textItem
,
textItem
⟦ optText
⟧
| .ERRDIFI
textItem
,
textItem
⟦ optText
⟧
| .ERRIDN
textItem
,
textItem
⟦ optText
⟧
| .ERRIDNI
textItem
,
textItem
⟦ optText
⟧
| .ERR1
⟦ textItem
⟧
| .ERR2
⟦ textItem
⟧
exitDir
.EXIT
⟦ expr
⟧ ;;
exitmDir
:
EXITM
| EXITM
textItem
exponent
E
⟦ sign
⟧ 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
最大長は 247 文字。
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
| procDir
⟦ localDirList
⟧ ⟦ inSegDirList
⟧ endpDir
| invokeDir
| generalDir
instrPrefix
REP
| REPE
| REPZ
| REPNE
| REPNZ
| LOCK
instruction
⟦ instrPrefix
⟧ asmInstruction
invokeArg
register
::
register
| expr
| ADDR
expr
invokeDir
INVOKE
expr
⟦ ,
⟦ ;;
⟧ invokeList
⟧;;
invokeList
invokeArg
| invokeList
,
⟦ ;;
⟧invokeArg
keyword
予約語。
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
id
MACRO
⟦ 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
命令名。
modelDir
.MODEL
memOption
⟦ ,
modelOptlist
⟧;;
modelOpt
langType
| stackOption
modelOptlist
modelOpt
| modelOptlist
,
modelOpt
module
⟦ directiveList
⟧ endDir
mulOp
*
| /
| MOD
nameDir
NAME
id
;;
nearfar
NEAR
| FAR
nestedStruct
structHdr
⟦ id
⟧ ;;
structBody
ENDS
;;
offsetDir
offsetDirType
;;
offsetDirType
EVEN
| ORG
immExpr
| ALIGN
⟦ constExpr
⟧
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
PAGE
⟦ pageExpr
⟧ ;;
pageExpr
+
|⟦ pageLength
⟧ ⟦ ,
pageWidth
⟧
pageLength
constExpr
pageWidth
constExpr
parm
parmId
⟦ :
qualifiedType
⟧
| parmId
⟦ constExpr
⟧ ⟦ :
qualifiedType
⟧
parmId
id
parmList
parm
| parmList
,
⟦ ;;
⟧parm
parmType
REQ
| =
textLiteral
| VARARG
pOptions
⟦ distance
⟧ ⟦ langType
⟧ ⟦ oVisibility
⟧
primary
expr
binaryOp
expr
| flagName
| expr
procDir
procId
PROC
⟦ 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
.CODE
⟦ segId
⟧
| .DATA
| .DATA?
| .CONST
| .FARDATA
⟦ segId
⟧
| .FARDATA?
⟦ segId
⟧
| .STACK
⟦ constExpr
⟧
segId
id
segIdList
segId
| segIdList
,
segId
segmentDef
segmentDir
⟦ inSegDirList
⟧ endsDir
| simpleSegDir
⟦ inSegDirList
⟧ ⟦ endsDir
⟧
segmentDir
segId
SEGMENT
⟦ 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
quote
⟦ stext
⟧ quote
stringChar
quote
quote
|引用符を除く任意の文字。
structBody
structItem
;;
| structBody
structItem
;;
structDir
structTag
structHdr
⟦ fieldAlign
⟧
⟦ ,
NONUNIQUE
⟧ ;;
structBody
structTag
ENDS
;;
structHdr
STRUC
| STRUCT
| UNION
structInstance
<
⟦ fieldInitList
⟧ >
| {
⟦ ;;
⟧ ⟦ fieldInitList
⟧ ⟦ ;;
⟧ }
| constExpr
DUP
( 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
CATSTR
⟦ textList
⟧
| TEXTEQU
⟦ textList
⟧
| SIZESTR
textItem
| SUBSTR
textItem
,
textStart
⟦ ,
textLen
⟧
| INSTR
⟦ textStart
,
⟧ 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
;;
.UNTILCXZ
⟦ cxzExpr
⟧ ;;
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