1" Vim syntax file 2" Language: NASM - The Netwide Assembler (v0.98) 3" Maintainer: Andrii 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" Contributors: Leonard König <leonard.r.koenig@gmail.com> (C string highlighting), Peter Stanhope <dev.rptr@gmail.com> (Add missing 64-bit mode registers) 7" Last Change: 2017 Jan 23 8" NASM Home: http://www.nasm.us/ 9 10 11 12" Setup Syntax: 13" quit when a syntax file was already loaded 14if exists("b:current_syntax") 15 finish 16endif 17" Assembler syntax is case insensetive 18syn case ignore 19 20 21 22" Vim search and movement commands on identifers 23" 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,#,$,.,?,@-@,_,~ 27 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 42syn match nasmLabelError "$\=\(\d\+\K\|[#.@]\|\$\$\k\)\k*\>" 43syn 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") 49 syn match nasmLabelWarn "\<\~\=\$\=[_.][_.\~]*\>" 50endif 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: 71syn 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 84syn match nasmString +\("[^"]\{-}"\|'[^']\{-}'\)+ 85" Highlight C escape- and format-sequences within ``-strings 86syn match nasmCString +\(`[^`]\{-}`\)+ contains=nasmCStringEscape,nasmCStringFormat extend 87syn case ignore 88syn 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 101" 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 169" Todo: allow STRUC/ISTRUC to be used inside preprocessor conditional block 170syn 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") 189 syn match nasmCtxLocLabel "%$\+\(\w\|[#.?@~]\)\k*\>" 190 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 220syn match nasmPreProc "^\s*%\(rep\|use\)\>"hs=e-3 221syn match nasmPreProc "^\s*%line\>"hs=e-4 222syn 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 225syn 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 228syn match nasmDefine "^\s*%unmacro\>"hs=e-7 229syn match nasmInclude "^\s*%include\>"hs=e-7 230" Todo: Treat the line tail after %fatal, %error, %warning as text 231 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\)\>" 243syn 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\)\>" 245syn 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): 258syn match nasmMemRefError "[[\]]" 259syn cluster nasmGrpCntnMemRef contains=ALLBUT,@nasmGrpComments,@nasmGrpPreProcs,@nasmGrpInStrucs,nasmMemReference,nasmMemRefError 260syn match nasmInMacMemRef contained "\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParam 261syn match nasmMemReference "\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel 262 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 312syn keyword nasmStdInstruction CALL CBW CDQ CLC CLD CMC CMP CMPSB CMPSD CMPSW CMPSQ 313syn keyword nasmStdInstruction CMPXCHG CMPXCHG8B CPUID CWD[E] CQO 314syn keyword nasmStdInstruction DAA DAS DEC DIV ENTER 315syn keyword nasmStdInstruction IDIV IMUL INC INT[O] IRET[D] IRETW IRETQ 316syn keyword nasmStdInstruction JCXZ JECXZ JMP 317syn keyword nasmStdInstruction LAHF LDS LEA LEAVE LES LFS LGS LODSB LODSD LODSQ 318syn keyword nasmStdInstruction LODSW LOOP[E] LOOPNE LOOPNZ LOOPZ LSS 319syn 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 322syn keyword nasmStdInstruction RCL RCR RETF RET[N] ROL ROR 323syn keyword nasmStdInstruction SAHF SAL SAR SBB SCASB SCASD SCASW 324syn keyword nasmStdInstruction SHL[D] SHR[D] STC STD STOSB STOSD STOSW STOSQ SUB 325syn keyword nasmStdInstruction TEST XADD XCHG XLATB XOR 326syn keyword nasmStdInstruction LFENCE MFENCE SFENCE 327 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. 441" Only when an item doesn't have highlighting yet 442 443" Sub Links: 444hi 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 455 456" Comment Group: 457hi def link nasmComment Comment 458hi def link nasmSpecialComment SpecialComment 459hi def link nasmInCommentTodo Todo 460 461" Constant Group: 462hi def link nasmString String 463hi def link nasmCString String 464hi def link nasmStringError Error 465hi def link nasmCStringEscape SpecialChar 466hi def link nasmCStringFormat SpecialChar 467hi 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 473 474" Identifier Group: 475hi def link nasmLabel Identifier 476hi def link nasmLocalLabel Identifier 477hi def link nasmSpecialLabel Special 478hi def link nasmLabelError Error 479hi def link nasmLabelWarn Todo 480 481" PreProc Group: 482hi 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 489 490" Type Group: 491hi def link nasmType Type 492hi def link nasmStorage StorageClass 493hi def link nasmStructure Structure 494hi def link nasmTypeError Error 495 496" Directive Group: 497hi 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 503 504" Register Group: 505hi def link nasmCtrlRegister Special 506hi def link nasmDebugRegister Debug 507hi def link nasmTestRegister Special 508hi def link nasmRegisterError Error 509hi def link nasmMemRefError Error 510 511" Instruction Group: 512hi 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 523 524 525let b:current_syntax = "nasm" 526 527" vim:ts=8 sw=4 528