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