blob: 0f81ceb5a9496fb73ebeb6a4f122f97304a1dba0 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: NASM - The Netwide Assembler (v0.98)
Bram Moolenaar4a748032010-09-30 21:47:56 +02003" Maintainer: Andriy Sokolov <andriy145@gmail.com>
4" Original Author: Manuel M.H. Stol <Manuel.Stol@allieddata.nl>
5" Former Maintainer: Manuel M.H. Stol <Manuel.Stol@allieddata.nl>
Bram Moolenaar5dc62522012-02-13 00:05:22 +01006" Last Change: 2012 Feb 7
Bram Moolenaar4a748032010-09-30 21:47:56 +02007" NASM Home: http://www.nasm.us/
Bram Moolenaar071d4272004-06-13 20:20:40 +00008
9
10
11" Setup Syntax:
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020012" quit when a syntax file was already loaded
13if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000014 finish
15endif
16" Assembler syntax is case insensetive
17syn case ignore
18
19
20
21" Vim search and movement commands on identifers
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020022" Comments at start of a line inside which to skip search for indentifiers
23setlocal comments=:;
24" Identifier Keyword characters (defines \k)
25setlocal iskeyword=@,48-57,#,$,.,?,@-@,_,~
Bram Moolenaar071d4272004-06-13 20:20:40 +000026
27
28" Comments:
29syn region nasmComment start=";" keepend end="$" contains=@nasmGrpInComments
30syn region nasmSpecialComment start=";\*\*\*" keepend end="$"
31syn keyword nasmInCommentTodo contained TODO FIXME XXX[XXXXX]
32syn cluster nasmGrpInComments contains=nasmInCommentTodo
33syn cluster nasmGrpComments contains=@nasmGrpInComments,nasmComment,nasmSpecialComment
34
35
36
37" Label Identifiers:
38" in NASM: 'Everything is a Label'
39" Definition Label = label defined by %[i]define or %[i]assign
40" Identifier Label = label defined as first non-keyword on a line or %[i]macro
Bram Moolenaar5dc62522012-02-13 00:05:22 +010041syn match nasmLabelError "$\=\(\d\+\K\|[#.@]\|\$\$\k\)\k*\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000042syn match nasmLabel "\<\(\h\|[?@]\)\k*\>"
43syn match nasmLabel "[\$\~]\(\h\|[?@]\)\k*\>"lc=1
44" Labels starting with one or two '.' are special
45syn match nasmLocalLabel "\<\.\(\w\|[#$?@~]\)\k*\>"
46syn match nasmLocalLabel "\<\$\.\(\w\|[#$?@~]\)\k*\>"ms=s+1
47if !exists("nasm_no_warn")
Bram Moolenaar5dc62522012-02-13 00:05:22 +010048 syn match nasmLabelWarn "\<\~\=\$\=[_.][_.\~]*\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000049endif
50if exists("nasm_loose_syntax")
51 syn match nasmSpecialLabel "\<\.\.@\k\+\>"
52 syn match nasmSpecialLabel "\<\$\.\.@\k\+\>"ms=s+1
53 if !exists("nasm_no_warn")
54 syn match nasmLabelWarn "\<\$\=\.\.@\(\d\|[#$\.~]\)\k*\>"
55 endif
56 " disallow use of nasm internal label format
57 syn match nasmLabelError "\<\$\=\.\.@\d\+\.\k*\>"
58else
59 syn match nasmSpecialLabel "\<\.\.@\(\h\|[?@]\)\k*\>"
60 syn match nasmSpecialLabel "\<\$\.\.@\(\h\|[?@]\)\k*\>"ms=s+1
61endif
62" Labels can be dereferenced with '$' to destinguish them from reserved words
63syn match nasmLabelError "\<\$\K\k*\s*:"
64syn match nasmLabelError "^\s*\$\K\k*\>"
65syn match nasmLabelError "\<\~\s*\(\k*\s*:\|\$\=\.\k*\)"
66
67
68
69" Constants:
70syn match nasmStringError +["']+
71syn match nasmString +\("[^"]\{-}"\|'[^']\{-}'\)+
72syn match nasmBinNumber "\<[0-1]\+b\>"
73syn match nasmBinNumber "\<\~[0-1]\+b\>"lc=1
74syn match nasmOctNumber "\<\o\+q\>"
75syn match nasmOctNumber "\<\~\o\+q\>"lc=1
76syn match nasmDecNumber "\<\d\+\>"
77syn match nasmDecNumber "\<\~\d\+\>"lc=1
78syn match nasmHexNumber "\<\(\d\x*h\|0x\x\+\|\$\d\x*\)\>"
79syn match nasmHexNumber "\<\~\(\d\x*h\|0x\x\+\|\$\d\x*\)\>"lc=1
80syn match nasmFltNumber "\<\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
81syn keyword nasmFltNumber Inf Infinity Indefinite NaN SNaN QNaN
82syn match nasmNumberError "\<\~\s*\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
83
84
Bram Moolenaar071d4272004-06-13 20:20:40 +000085" Netwide Assembler Storage Directives:
86" Storage types
87syn keyword nasmTypeError DF EXTRN FWORD RESF TBYTE
88syn keyword nasmType FAR NEAR SHORT
89syn keyword nasmType BYTE WORD DWORD QWORD DQWORD HWORD DHWORD TWORD
90syn keyword nasmType CDECL FASTCALL NONE PASCAL STDCALL
91syn keyword nasmStorage DB DW DD DQ DDQ DT
92syn keyword nasmStorage RESB RESW RESD RESQ RESDQ REST
93syn keyword nasmStorage EXTERN GLOBAL COMMON
94" Structured storage types
95syn match nasmTypeError "\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>"
96syn match nasmStructureLabel contained "\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>"
97" structures cannot be nested (yet) -> use: 'keepend' and 're='
98syn cluster nasmGrpCntnStruc contains=ALLBUT,@nasmGrpInComments,nasmMacroDef,@nasmGrpInMacros,@nasmGrpInPreCondits,nasmStructureDef,@nasmGrpInStrucs
99syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnStruc
100syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4 end="^\s*ENDSTRUC\>"re=e-8 contains=@nasmGrpCntnStruc
101syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="\<ISTRUCT\=\>" end="\<IEND\(STRUCT\=\)\=\>" contains=@nasmGrpCntnStruc,nasmInStructure
102" union types are not part of nasm (yet)
103"syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnStruc
104"syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnStruc,nasmInStructure
105syn match nasmInStructure contained "^\s*AT\>"hs=e-1
106syn cluster nasmGrpInStrucs contains=nasmStructure,nasmInStructure,nasmStructureLabel
107
108
109
110" PreProcessor Instructions:
111" NAsm PreProcs start with %, but % is not a character
112syn match nasmPreProcError "%{\=\(%\=\k\+\|%%\+\k*\|[+-]\=\d\+\)}\="
113if exists("nasm_loose_syntax")
114 syn cluster nasmGrpNxtCtx contains=nasmStructureLabel,nasmLabel,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcError
115else
116 syn cluster nasmGrpNxtCtx contains=nasmStructureLabel,nasmLabel,nasmLabelError,nasmPreProcError
117endif
118
119" Multi-line macro
120syn cluster nasmGrpCntnMacro contains=ALLBUT,@nasmGrpInComments,nasmStructureDef,@nasmGrpInStrucs,nasmMacroDef,@nasmGrpPreCondits,nasmMemReference,nasmInMacPreCondit,nasmInMacStrucDef
121syn region nasmMacroDef matchgroup=nasmMacro keepend start="^\s*%macro\>"hs=e-5 start="^\s*%imacro\>"hs=e-6 end="^\s*%endmacro\>"re=e-9 contains=@nasmGrpCntnMacro,nasmInMacStrucDef
122if exists("nasm_loose_syntax")
123 syn match nasmInMacLabel contained "%\(%\k\+\>\|{%\k\+}\)"
124 syn match nasmInMacLabel contained "%\($\+\(\w\|[#\.?@~]\)\k*\>\|{$\+\(\w\|[#\.?@~]\)\k*}\)"
125 syn match nasmInMacPreProc contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=nasmStructureLabel,nasmLabel,nasmInMacParam,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcError
126 if !exists("nasm_no_warn")
127 syn match nasmInMacLblWarn contained "%\(%[$\.]\k*\>\|{%[$\.]\k*}\)"
128 syn match nasmInMacLblWarn contained "%\($\+\(\d\|[#\.@~]\)\k*\|{\$\+\(\d\|[#\.@~]\)\k*}\)"
129 hi link nasmInMacCatLabel nasmInMacLblWarn
130 else
131 hi link nasmInMacCatLabel nasmInMacLabel
132 endif
133else
134 syn match nasmInMacLabel contained "%\(%\(\w\|[#?@~]\)\k*\>\|{%\(\w\|[#?@~]\)\k*}\)"
135 syn match nasmInMacLabel contained "%\($\+\(\h\|[?@]\)\k*\>\|{$\+\(\h\|[?@]\)\k*}\)"
136 hi link nasmInMacCatLabel nasmLabelError
137endif
138syn match nasmInMacCatLabel contained "\d\K\k*"lc=1
139syn match nasmInMacLabel contained "\d}\k\+"lc=2
140if !exists("nasm_no_warn")
141 syn match nasmInMacLblWarn contained "%\(\($\+\|%\)[_~][._~]*\>\|{\($\+\|%\)[_~][._~]*}\)"
142endif
143syn match nasmInMacPreProc contained "^\s*%pop\>"hs=e-3
144syn match nasmInMacPreProc contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx
145" structures cannot be nested (yet) -> use: 'keepend' and 're='
146syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnMacro
147syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4 end="^\s*ENDSTRUC\>"re=e-8 contains=@nasmGrpCntnMacro
148syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="\<ISTRUCT\=\>" end="\<IEND\(STRUCT\=\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructure
149" union types are not part of nasm (yet)
150"syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnMacro
151"syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructure
152syn region nasmInMacPreConDef contained transparent matchgroup=nasmInMacPreCondit start="^\s*%ifnidni\>"hs=e-7 start="^\s*%if\(idni\|n\(ctx\|def\|idn\|num\|str\)\)\>"hs=e-6 start="^\s*%if\(ctx\|def\|idn\|nid\|num\|str\)\>"hs=e-5 start="^\s*%ifid\>"hs=e-4 start="^\s*%if\>"hs=e-2 end="%endif\>" contains=@nasmGrpCntnMacro,nasmInMacPreCondit,nasmInPreCondit
Bram Moolenaar4a748032010-09-30 21:47:56 +0200153" Todo: allow STRUC/ISTRUC to be used inside preprocessor conditional block
Bram Moolenaar071d4272004-06-13 20:20:40 +0000154syn match nasmInMacPreCondit contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx
155syn match nasmInMacPreCondit contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx
156syn match nasmInMacPreCondit contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx
157syn match nasmInMacParamNum contained "\<\d\+\.list\>"me=e-5
158syn match nasmInMacParamNum contained "\<\d\+\.nolist\>"me=e-7
159syn match nasmInMacDirective contained "\.\(no\)\=list\>"
160syn match nasmInMacMacro contained transparent "macro\s"lc=5 skipwhite nextgroup=nasmStructureLabel
161syn match nasmInMacMacro contained "^\s*%rotate\>"hs=e-6
162syn match nasmInMacParam contained "%\([+-]\=\d\+\|{[+-]\=\d\+}\)"
163" nasm conditional macro operands/arguments
164" Todo: check feasebility; add too nasmGrpInMacros, etc.
165"syn match nasmInMacCond contained "\<\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P[EO]\=\)\>"
166syn cluster nasmGrpInMacros contains=nasmMacro,nasmInMacMacro,nasmInMacParam,nasmInMacParamNum,nasmInMacDirective,nasmInMacLabel,nasmInMacLblWarn,nasmInMacMemRef,nasmInMacPreConDef,nasmInMacPreCondit,nasmInMacPreProc,nasmInMacStrucDef
167
168" Context pre-procs that are better used inside a macro
169if exists("nasm_ctx_outside_macro")
170 syn region nasmPreConditDef transparent matchgroup=nasmCtxPreCondit start="^\s*%ifnctx\>"hs=e-6 start="^\s*%ifctx\>"hs=e-5 end="%endif\>" contains=@nasmGrpCntnPreCon
171 syn match nasmCtxPreProc "^\s*%pop\>"hs=e-3
172 if exists("nasm_loose_syntax")
Bram Moolenaar5dc62522012-02-13 00:05:22 +0100173 syn match nasmCtxLocLabel "%$\+\(\w\|[#.?@~]\)\k*\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174 else
175 syn match nasmCtxLocLabel "%$\+\(\h\|[?@]\)\k*\>"
176 endif
177 syn match nasmCtxPreProc "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx
178 syn match nasmCtxPreCondit contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx
179 syn match nasmCtxPreCondit contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx
180 syn match nasmCtxPreCondit contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx
181 if exists("nasm_no_warn")
182 hi link nasmCtxPreCondit nasmPreCondit
183 hi link nasmCtxPreProc nasmPreProc
184 hi link nasmCtxLocLabel nasmLocalLabel
185 else
186 hi link nasmCtxPreCondit nasmPreProcWarn
187 hi link nasmCtxPreProc nasmPreProcWarn
188 hi link nasmCtxLocLabel nasmLabelWarn
189 endif
190endif
191
192" Conditional assembly
193syn cluster nasmGrpCntnPreCon contains=ALLBUT,@nasmGrpInComments,@nasmGrpInMacros,@nasmGrpInStrucs
194syn region nasmPreConditDef transparent matchgroup=nasmPreCondit start="^\s*%ifnidni\>"hs=e-7 start="^\s*%if\(idni\|n\(def\|idn\|num\|str\)\)\>"hs=e-6 start="^\s*%if\(def\|idn\|nid\|num\|str\)\>"hs=e-5 start="^\s*%ifid\>"hs=e-4 start="^\s*%if\>"hs=e-2 end="%endif\>" contains=@nasmGrpCntnPreCon
195syn match nasmInPreCondit contained "^\s*%el\(if\|se\)\>"hs=e-4
196syn match nasmInPreCondit contained "^\s*%elifid\>"hs=e-6
197syn match nasmInPreCondit contained "^\s*%elif\(def\|idn\|nid\|num\|str\)\>"hs=e-7
198syn match nasmInPreCondit contained "^\s*%elif\(n\(def\|idn\|num\|str\)\|idni\)\>"hs=e-8
199syn match nasmInPreCondit contained "^\s*%elifnidni\>"hs=e-9
200syn cluster nasmGrpInPreCondits contains=nasmPreCondit,nasmInPreCondit,nasmCtxPreCondit
201syn cluster nasmGrpPreCondits contains=nasmPreConditDef,@nasmGrpInPreCondits,nasmCtxPreProc,nasmCtxLocLabel
202
203" Other pre-processor statements
Bram Moolenaar4a748032010-09-30 21:47:56 +0200204syn match nasmPreProc "^\s*%\(rep\|use\)\>"hs=e-3
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205syn match nasmPreProc "^\s*%line\>"hs=e-4
Bram Moolenaar4a748032010-09-30 21:47:56 +0200206syn match nasmPreProc "^\s*%\(clear\|error\|fatal\)\>"hs=e-5
207syn match nasmPreProc "^\s*%\(endrep\|strlen\|substr\)\>"hs=e-6
208syn match nasmPreProc "^\s*%\(exitrep\|warning\)\>"hs=e-7
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209syn match nasmDefine "^\s*%undef\>"hs=e-5
210syn match nasmDefine "^\s*%\(assign\|define\)\>"hs=e-6
211syn match nasmDefine "^\s*%i\(assign\|define\)\>"hs=e-7
Bram Moolenaar4a748032010-09-30 21:47:56 +0200212syn match nasmDefine "^\s*%unmacro\>"hs=e-7
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213syn match nasmInclude "^\s*%include\>"hs=e-7
Bram Moolenaar4a748032010-09-30 21:47:56 +0200214" Todo: Treat the line tail after %fatal, %error, %warning as text
Bram Moolenaar071d4272004-06-13 20:20:40 +0000215
216" Multiple pre-processor instructions on single line detection (obsolete)
217"syn match nasmPreProcError +^\s*\([^\t "%';][^"%';]*\|[^\t "';][^"%';]\+\)%\a\+\>+
218syn cluster nasmGrpPreProcs contains=nasmMacroDef,@nasmGrpInMacros,@nasmGrpPreCondits,nasmPreProc,nasmDefine,nasmInclude,nasmPreProcWarn,nasmPreProcError
219
220
221
222" Register Identifiers:
223" Register operands:
224syn match nasmGen08Register "\<[A-D][HL]\>"
225syn match nasmGen16Register "\<\([A-D]X\|[DS]I\|[BS]P\)\>"
226syn match nasmGen32Register "\<E\([A-D]X\|[DS]I\|[BS]P\)\>"
Bram Moolenaar4a748032010-09-30 21:47:56 +0200227syn match nasmGen64Register "\<R\([A-D]X\|[DS]I\|[BS]P\|[89]\|1[0-5]\|[89][WD]\|1[0-5][WD]\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228syn match nasmSegRegister "\<[C-GS]S\>"
229syn match nasmSpcRegister "\<E\=IP\>"
230syn match nasmFpuRegister "\<ST\o\>"
231syn match nasmMmxRegister "\<MM\o\>"
232syn match nasmSseRegister "\<XMM\o\>"
233syn match nasmCtrlRegister "\<CR\o\>"
234syn match nasmDebugRegister "\<DR\o\>"
235syn match nasmTestRegister "\<TR\o\>"
236syn match nasmRegisterError "\<\(CR[15-9]\|DR[4-58-9]\|TR[0-28-9]\)\>"
237syn match nasmRegisterError "\<X\=MM[8-9]\>"
238syn match nasmRegisterError "\<ST\((\d)\|[8-9]\>\)"
239syn match nasmRegisterError "\<E\([A-D][HL]\|[C-GS]S\)\>"
240" Memory reference operand (address):
Bram Moolenaar5dc62522012-02-13 00:05:22 +0100241syn match nasmMemRefError "[[\]]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000242syn cluster nasmGrpCntnMemRef contains=ALLBUT,@nasmGrpComments,@nasmGrpPreProcs,@nasmGrpInStrucs,nasmMemReference,nasmMemRefError
Bram Moolenaar5dc62522012-02-13 00:05:22 +0100243syn match nasmInMacMemRef contained "\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParam
244syn match nasmMemReference "\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel
Bram Moolenaar071d4272004-06-13 20:20:40 +0000245
246
247
248" Netwide Assembler Directives:
249" Compilation constants
250syn keyword nasmConstant __BITS__ __DATE__ __FILE__ __FORMAT__ __LINE__
251syn keyword nasmConstant __NASM_MAJOR__ __NASM_MINOR__ __NASM_VERSION__
252syn keyword nasmConstant __TIME__
253" Instruction modifiers
254syn match nasmInstructnError "\<TO\>"
255syn match nasmInstrModifier "\(^\|:\)\s*[C-GS]S\>"ms=e-1
256syn keyword nasmInstrModifier A16 A32 O16 O32
257syn match nasmInstrModifier "\<F\(ADD\|MUL\|\(DIV\|SUB\)R\=\)\s\+TO\>"lc=5,ms=e-1
258" the 'to' keyword is not allowed for fpu-pop instructions (yet)
259"syn match nasmInstrModifier "\<F\(ADD\|MUL\|\(DIV\|SUB\)R\=\)P\s\+TO\>"lc=6,ms=e-1
260" NAsm directives
261syn keyword nasmRepeat TIMES
262syn keyword nasmDirective ALIGN[B] INCBIN EQU NOSPLIT SPLIT
263syn keyword nasmDirective ABSOLUTE BITS SECTION SEGMENT
264syn keyword nasmDirective ENDSECTION ENDSEGMENT
265syn keyword nasmDirective __SECT__
266" Macro created standard directives: (requires %include)
267syn case match
268syn keyword nasmStdDirective ENDPROC EPILOGUE LOCALS PROC PROLOGUE USES
269syn keyword nasmStdDirective ENDIF ELSE ELIF ELSIF IF
270"syn keyword nasmStdDirective BREAK CASE DEFAULT ENDSWITCH SWITCH
271"syn keyword nasmStdDirective CASE OF ENDCASE
272syn keyword nasmStdDirective DO ENDFOR ENDWHILE FOR REPEAT UNTIL WHILE EXIT
273syn case ignore
274" Format specific directives: (all formats)
275" (excluded: extension directives to section, global, common and extern)
276syn keyword nasmFmtDirective ORG
277syn keyword nasmFmtDirective EXPORT IMPORT GROUP UPPERCASE SEG WRT
278syn keyword nasmFmtDirective LIBRARY
279syn case match
280syn keyword nasmFmtDirective _GLOBAL_OFFSET_TABLE_ __GLOBAL_OFFSET_TABLE_
281syn keyword nasmFmtDirective ..start ..got ..gotoff ..gotpc ..plt ..sym
282syn case ignore
283
284
285
286" Standard Instructions:
287syn match nasmInstructnError "\<\(F\=CMOV\|SET\)N\=\a\{0,2}\>"
288syn keyword nasmInstructnError CMPS MOVS LCS LODS STOS XLAT
289syn match nasmStdInstruction "\<MOV\>"
290syn match nasmInstructnError "\<MOV\s[^,;[]*\<CS\>\s*[^:]"he=e-1
291syn match nasmStdInstruction "\<\(CMOV\|J\|SET\)\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P[EO]\=\)\>"
292syn match nasmStdInstruction "\<POP\>"
293syn keyword nasmStdInstruction AAA AAD AAM AAS ADC ADD AND
294syn keyword nasmStdInstruction BOUND BSF BSR BSWAP BT[C] BTR BTS
Bram Moolenaar4a748032010-09-30 21:47:56 +0200295syn keyword nasmStdInstruction CALL CBW CDQ CLC CLD CMC CMP CMPSB CMPSD CMPSW CMPSQ
296syn keyword nasmStdInstruction CMPXCHG CMPXCHG8B CPUID CWD[E] CQO
Bram Moolenaar071d4272004-06-13 20:20:40 +0000297syn keyword nasmStdInstruction DAA DAS DEC DIV ENTER
Bram Moolenaar4a748032010-09-30 21:47:56 +0200298syn keyword nasmStdInstruction IDIV IMUL INC INT[O] IRET[D] IRETW IRETQ
Bram Moolenaar071d4272004-06-13 20:20:40 +0000299syn keyword nasmStdInstruction JCXZ JECXZ JMP
Bram Moolenaar4a748032010-09-30 21:47:56 +0200300syn keyword nasmStdInstruction LAHF LDS LEA LEAVE LES LFS LGS LODSB LODSD LODSQ
Bram Moolenaar071d4272004-06-13 20:20:40 +0000301syn keyword nasmStdInstruction LODSW LOOP[E] LOOPNE LOOPNZ LOOPZ LSS
Bram Moolenaar4a748032010-09-30 21:47:56 +0200302syn keyword nasmStdInstruction MOVSB MOVSD MOVSW MOVSX MOVSQ MOVZX MUL NEG NOP NOT
303syn keyword nasmStdInstruction OR POPA[D] POPAW POPF[D] POPFW POPFQ
304syn keyword nasmStdInstruction PUSH[AD] PUSHAW PUSHF[D] PUSHFW PUSHFQ
Bram Moolenaar071d4272004-06-13 20:20:40 +0000305syn keyword nasmStdInstruction RCL RCR RETF RET[N] ROL ROR
306syn keyword nasmStdInstruction SAHF SAL SAR SBB SCASB SCASD SCASW
Bram Moolenaar4a748032010-09-30 21:47:56 +0200307syn keyword nasmStdInstruction SHL[D] SHR[D] STC STD STOSB STOSD STOSW STOSQ SUB
Bram Moolenaar071d4272004-06-13 20:20:40 +0000308syn keyword nasmStdInstruction TEST XADD XCHG XLATB XOR
Bram Moolenaar4a748032010-09-30 21:47:56 +0200309syn keyword nasmStdInstruction LFENCE MFENCE SFENCE
Bram Moolenaar071d4272004-06-13 20:20:40 +0000310
311
312" System Instructions: (usually privileged)
313" Verification of pointer parameters
314syn keyword nasmSysInstruction ARPL LAR LSL VERR VERW
315" Addressing descriptor tables
316syn keyword nasmSysInstruction LLDT SLDT LGDT SGDT
317" Multitasking
318syn keyword nasmSysInstruction LTR STR
319" Coprocessing and Multiprocessing (requires fpu and multiple cpu's resp.)
320syn keyword nasmSysInstruction CLTS LOCK WAIT
321" Input and Output
322syn keyword nasmInstructnError INS OUTS
323syn keyword nasmSysInstruction IN INSB INSW INSD OUT OUTSB OUTSB OUTSW OUTSD
324" Interrupt control
325syn keyword nasmSysInstruction CLI STI LIDT SIDT
326" System control
327syn match nasmSysInstruction "\<MOV\s[^;]\{-}\<CR\o\>"me=s+3
328syn keyword nasmSysInstruction HLT INVD LMSW
329syn keyword nasmSseInstruction PREFETCHT0 PREFETCHT1 PREFETCHT2 PREFETCHNTA
330syn keyword nasmSseInstruction RSM SFENCE SMSW SYSENTER SYSEXIT UD2 WBINVD
331" TLB (Translation Lookahead Buffer) testing
332syn match nasmSysInstruction "\<MOV\s[^;]\{-}\<TR\o\>"me=s+3
333syn keyword nasmSysInstruction INVLPG
334
335" Debugging Instructions: (privileged)
336syn match nasmDbgInstruction "\<MOV\s[^;]\{-}\<DR\o\>"me=s+3
337syn keyword nasmDbgInstruction INT1 INT3 RDMSR RDTSC RDPMC WRMSR
338
339
340" Floating Point Instructions: (requires FPU)
341syn match nasmFpuInstruction "\<FCMOVN\=\([AB]E\=\|[CEPUZ]\)\>"
342syn keyword nasmFpuInstruction F2XM1 FABS FADD[P] FBLD FBSTP
343syn keyword nasmFpuInstruction FCHS FCLEX FCOM[IP] FCOMP[P] FCOS
344syn keyword nasmFpuInstruction FDECSTP FDISI FDIV[P] FDIVR[P] FENI FFREE
345syn keyword nasmFpuInstruction FIADD FICOM[P] FIDIV[R] FILD
346syn keyword nasmFpuInstruction FIMUL FINCSTP FINIT FIST[P] FISUB[R]
347syn keyword nasmFpuInstruction FLD[1] FLDCW FLDENV FLDL2E FLDL2T FLDLG2
348syn keyword nasmFpuInstruction FLDLN2 FLDPI FLDZ FMUL[P]
349syn keyword nasmFpuInstruction FNCLEX FNDISI FNENI FNINIT FNOP FNSAVE
350syn keyword nasmFpuInstruction FNSTCW FNSTENV FNSTSW FNSTSW
351syn keyword nasmFpuInstruction FPATAN FPREM[1] FPTAN FRNDINT FRSTOR
352syn keyword nasmFpuInstruction FSAVE FSCALE FSETPM FSIN FSINCOS FSQRT
353syn keyword nasmFpuInstruction FSTCW FSTENV FST[P] FSTSW FSUB[P] FSUBR[P]
354syn keyword nasmFpuInstruction FTST FUCOM[IP] FUCOMP[P]
355syn keyword nasmFpuInstruction FXAM FXCH FXTRACT FYL2X FYL2XP1
356
357
358" Multi Media Xtension Packed Instructions: (requires MMX unit)
359" Standard MMX instructions: (requires MMX1 unit)
360syn match nasmInstructnError "\<P\(ADD\|SUB\)U\=S\=[DQ]\=\>"
361syn match nasmInstructnError "\<PCMP\a\{0,2}[BDWQ]\=\>"
362syn keyword nasmMmxInstruction EMMS MOVD MOVQ
363syn keyword nasmMmxInstruction PACKSSDW PACKSSWB PACKUSWB PADDB PADDD PADDW
364syn keyword nasmMmxInstruction PADDSB PADDSW PADDUSB PADDUSW PAND[N]
365syn keyword nasmMmxInstruction PCMPEQB PCMPEQD PCMPEQW PCMPGTB PCMPGTD PCMPGTW
366syn keyword nasmMmxInstruction PMACHRIW PMADDWD PMULHW PMULLW POR
367syn keyword nasmMmxInstruction PSLLD PSLLQ PSLLW PSRAD PSRAW PSRLD PSRLQ PSRLW
368syn keyword nasmMmxInstruction PSUBB PSUBD PSUBW PSUBSB PSUBSW PSUBUSB PSUBUSW
369syn keyword nasmMmxInstruction PUNPCKHBW PUNPCKHDQ PUNPCKHWD
370syn keyword nasmMmxInstruction PUNPCKLBW PUNPCKLDQ PUNPCKLWD PXOR
371" Extended MMX instructions: (requires MMX2/SSE unit)
372syn keyword nasmMmxInstruction MASKMOVQ MOVNTQ
373syn keyword nasmMmxInstruction PAVGB PAVGW PEXTRW PINSRW PMAXSW PMAXUB
374syn keyword nasmMmxInstruction PMINSW PMINUB PMOVMSKB PMULHUW PSADBW PSHUFW
375
376
377" Streaming SIMD Extension Packed Instructions: (requires SSE unit)
378syn match nasmInstructnError "\<CMP\a\{1,5}[PS]S\>"
379syn match nasmSseInstruction "\<CMP\(N\=\(EQ\|L[ET]\)\|\(UN\)\=ORD\)\=[PS]S\>"
380syn keyword nasmSseInstruction ADDPS ADDSS ANDNPS ANDPS
381syn keyword nasmSseInstruction COMISS CVTPI2PS CVTPS2PI
382syn keyword nasmSseInstruction CVTSI2SS CVTSS2SI CVTTPS2PI CVTTSS2SI
383syn keyword nasmSseInstruction DIVPS DIVSS FXRSTOR FXSAVE LDMXCSR
384syn keyword nasmSseInstruction MAXPS MAXSS MINPS MINSS MOVAPS MOVHLPS MOVHPS
385syn keyword nasmSseInstruction MOVLHPS MOVLPS MOVMSKPS MOVNTPS MOVSS MOVUPS
386syn keyword nasmSseInstruction MULPS MULSS
387syn keyword nasmSseInstruction ORPS RCPPS RCPSS RSQRTPS RSQRTSS
388syn keyword nasmSseInstruction SHUFPS SQRTPS SQRTSS STMXCSR SUBPS SUBSS
389syn keyword nasmSseInstruction UCOMISS UNPCKHPS UNPCKLPS XORPS
390
391
392" Three Dimensional Now Packed Instructions: (requires 3DNow! unit)
393syn keyword nasmNowInstruction FEMMS PAVGUSB PF2ID PFACC PFADD PFCMPEQ PFCMPGE
394syn keyword nasmNowInstruction PFCMPGT PFMAX PFMIN PFMUL PFRCP PFRCPIT1
395syn keyword nasmNowInstruction PFRCPIT2 PFRSQIT1 PFRSQRT PFSUB[R] PI2FD
396syn keyword nasmNowInstruction PMULHRWA PREFETCH[W]
397
398
399" Vendor Specific Instructions:
400" Cyrix instructions (requires Cyrix processor)
401syn keyword nasmCrxInstruction PADDSIW PAVEB PDISTIB PMAGW PMULHRW[C] PMULHRIW
402syn keyword nasmCrxInstruction PMVGEZB PMVLZB PMVNZB PMVZB PSUBSIW
403syn keyword nasmCrxInstruction RDSHR RSDC RSLDT SMINT SMINTOLD SVDC SVLDT SVTS
404syn keyword nasmCrxInstruction WRSHR
405" AMD instructions (requires AMD processor)
406syn keyword nasmAmdInstruction SYSCALL SYSRET
407
408
409" Undocumented Instructions:
410syn match nasmUndInstruction "\<POP\s[^;]*\<CS\>"me=s+3
411syn keyword nasmUndInstruction CMPXCHG486 IBTS ICEBP INT01 INT03 LOADALL
412syn keyword nasmUndInstruction LOADALL286 LOADALL386 SALC SMI UD1 UMOV XBTS
413
414
415
416" Synchronize Syntax:
417syn sync clear
418syn sync minlines=50 "for multiple region nesting
419syn sync match nasmSync grouphere nasmMacroDef "^\s*%i\=macro\>"me=s-1
420syn sync match nasmSync grouphere NONE "^\s*%endmacro\>"
421
422
423" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200424" Only when an item doesn't have highlighting yet
425command -nargs=+ HiLink hi def link <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000426
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200427" Sub Links:
428HiLink nasmInMacDirective nasmDirective
429HiLink nasmInMacLabel nasmLocalLabel
430HiLink nasmInMacLblWarn nasmLabelWarn
431HiLink nasmInMacMacro nasmMacro
432HiLink nasmInMacParam nasmMacro
433HiLink nasmInMacParamNum nasmDecNumber
434HiLink nasmInMacPreCondit nasmPreCondit
435HiLink nasmInMacPreProc nasmPreProc
436HiLink nasmInPreCondit nasmPreCondit
437HiLink nasmInStructure nasmStructure
438HiLink nasmStructureLabel nasmStructure
Bram Moolenaar071d4272004-06-13 20:20:40 +0000439
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200440" Comment Group:
441HiLink nasmComment Comment
442HiLink nasmSpecialComment SpecialComment
443HiLink nasmInCommentTodo Todo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000444
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200445" Constant Group:
446HiLink nasmString String
447HiLink nasmStringError Error
448HiLink nasmBinNumber Number
449HiLink nasmOctNumber Number
450HiLink nasmDecNumber Number
451HiLink nasmHexNumber Number
452HiLink nasmFltNumber Float
453HiLink nasmNumberError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000454
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200455" Identifier Group:
456HiLink nasmLabel Identifier
457HiLink nasmLocalLabel Identifier
458HiLink nasmSpecialLabel Special
459HiLink nasmLabelError Error
460HiLink nasmLabelWarn Todo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000461
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200462" PreProc Group:
463HiLink nasmPreProc PreProc
464HiLink nasmDefine Define
465HiLink nasmInclude Include
466HiLink nasmMacro Macro
467HiLink nasmPreCondit PreCondit
468HiLink nasmPreProcError Error
469HiLink nasmPreProcWarn Todo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000470
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200471" Type Group:
472HiLink nasmType Type
473HiLink nasmStorage StorageClass
474HiLink nasmStructure Structure
475HiLink nasmTypeError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000476
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200477" Directive Group:
478HiLink nasmConstant Constant
479HiLink nasmInstrModifier Operator
480HiLink nasmRepeat Repeat
481HiLink nasmDirective Keyword
482HiLink nasmStdDirective Operator
483HiLink nasmFmtDirective Keyword
Bram Moolenaar071d4272004-06-13 20:20:40 +0000484
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200485" Register Group:
486HiLink nasmCtrlRegister Special
487HiLink nasmDebugRegister Debug
488HiLink nasmTestRegister Special
489HiLink nasmRegisterError Error
490HiLink nasmMemRefError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000491
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200492" Instruction Group:
493HiLink nasmStdInstruction Statement
494HiLink nasmSysInstruction Statement
495HiLink nasmDbgInstruction Debug
496HiLink nasmFpuInstruction Statement
497HiLink nasmMmxInstruction Statement
498HiLink nasmSseInstruction Statement
499HiLink nasmNowInstruction Statement
500HiLink nasmAmdInstruction Special
501HiLink nasmCrxInstruction Special
502HiLink nasmUndInstruction Todo
503HiLink nasmInstructnError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000504
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200505delcommand HiLink
Bram Moolenaar071d4272004-06-13 20:20:40 +0000506
507let b:current_syntax = "nasm"
508
509" vim:ts=8 sw=4