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