1" Vim syntax file 2" Language: NASM - The Netwide Assembler (v0.98) 3" Maintainer: Andrii Sokolov <[email protected]> 4" Original Author: Manuel M.H. Stol <[email protected]> 5" Former Maintainer: Manuel M.H. Stol <[email protected]> 6" Contributors: Leonard König <[email protected]> (C string highlighting) 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][WD]\|1[0-5][WD]\)\>" 244syn match nasmSegRegister "\<[C-GS]S\>" 245syn match nasmSpcRegister "\<E\=IP\>" 246syn match nasmFpuRegister "\<ST\o\>" 247syn match nasmMmxRegister "\<MM\o\>" 248syn match nasmSseRegister "\<XMM\o\>" 249syn match nasmCtrlRegister "\<CR\o\>" 250syn match nasmDebugRegister "\<DR\o\>" 251syn match nasmTestRegister "\<TR\o\>" 252syn match nasmRegisterError "\<\(CR[15-9]\|DR[4-58-9]\|TR[0-28-9]\)\>" 253syn match nasmRegisterError "\<X\=MM[8-9]\>" 254syn match nasmRegisterError "\<ST\((\d)\|[8-9]\>\)" 255syn match nasmRegisterError "\<E\([A-D][HL]\|[C-GS]S\)\>" 256" Memory reference operand (address): 257syn match nasmMemRefError "[[\]]" 258syn cluster nasmGrpCntnMemRef contains=ALLBUT,@nasmGrpComments,@nasmGrpPreProcs,@nasmGrpInStrucs,nasmMemReference,nasmMemRefError 259syn match nasmInMacMemRef contained "\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParam 260syn match nasmMemReference "\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel 261 262 263 264" Netwide Assembler Directives: 265" Compilation constants 266syn keyword nasmConstant __BITS__ __DATE__ __FILE__ __FORMAT__ __LINE__ 267syn keyword nasmConstant __NASM_MAJOR__ __NASM_MINOR__ __NASM_VERSION__ 268syn keyword nasmConstant __TIME__ 269" Instruction modifiers 270syn match nasmInstructnError "\<TO\>" 271syn match nasmInstrModifier "\(^\|:\)\s*[C-GS]S\>"ms=e-1 272syn keyword nasmInstrModifier A16 A32 O16 O32 273syn match nasmInstrModifier "\<F\(ADD\|MUL\|\(DIV\|SUB\)R\=\)\s\+TO\>"lc=5,ms=e-1 274" the 'to' keyword is not allowed for fpu-pop instructions (yet) 275"syn match nasmInstrModifier "\<F\(ADD\|MUL\|\(DIV\|SUB\)R\=\)P\s\+TO\>"lc=6,ms=e-1 276" NAsm directives 277syn keyword nasmRepeat TIMES 278syn keyword nasmDirective ALIGN[B] INCBIN EQU NOSPLIT SPLIT 279syn keyword nasmDirective ABSOLUTE BITS SECTION SEGMENT 280syn keyword nasmDirective ENDSECTION ENDSEGMENT 281syn keyword nasmDirective __SECT__ 282" Macro created standard directives: (requires %include) 283syn case match 284syn keyword nasmStdDirective ENDPROC EPILOGUE LOCALS PROC PROLOGUE USES 285syn keyword nasmStdDirective ENDIF ELSE ELIF ELSIF IF 286"syn keyword nasmStdDirective BREAK CASE DEFAULT ENDSWITCH SWITCH 287"syn keyword nasmStdDirective CASE OF ENDCASE 288syn keyword nasmStdDirective DO ENDFOR ENDWHILE FOR REPEAT UNTIL WHILE EXIT 289syn case ignore 290" Format specific directives: (all formats) 291" (excluded: extension directives to section, global, common and extern) 292syn keyword nasmFmtDirective ORG 293syn keyword nasmFmtDirective EXPORT IMPORT GROUP UPPERCASE SEG WRT 294syn keyword nasmFmtDirective LIBRARY 295syn case match 296syn keyword nasmFmtDirective _GLOBAL_OFFSET_TABLE_ __GLOBAL_OFFSET_TABLE_ 297syn keyword nasmFmtDirective ..start ..got ..gotoff ..gotpc ..plt ..sym 298syn case ignore 299 300 301 302" Standard Instructions: 303syn match nasmInstructnError "\<\(F\=CMOV\|SET\)N\=\a\{0,2}\>" 304syn keyword nasmInstructnError CMPS MOVS LCS LODS STOS XLAT 305syn match nasmStdInstruction "\<MOV\>" 306syn match nasmInstructnError "\<MOV\s[^,;[]*\<CS\>\s*[^:]"he=e-1 307syn match nasmStdInstruction "\<\(CMOV\|J\|SET\)\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P[EO]\=\)\>" 308syn match nasmStdInstruction "\<POP\>" 309syn keyword nasmStdInstruction AAA AAD AAM AAS ADC ADD AND 310syn keyword nasmStdInstruction BOUND BSF BSR BSWAP BT[C] BTR BTS 311syn keyword nasmStdInstruction CALL CBW CDQ CLC CLD CMC CMP CMPSB CMPSD CMPSW CMPSQ 312syn keyword nasmStdInstruction CMPXCHG CMPXCHG8B CPUID CWD[E] CQO 313syn keyword nasmStdInstruction DAA DAS DEC DIV ENTER 314syn keyword nasmStdInstruction IDIV IMUL INC INT[O] IRET[D] IRETW IRETQ 315syn keyword nasmStdInstruction JCXZ JECXZ JMP 316syn keyword nasmStdInstruction LAHF LDS LEA LEAVE LES LFS LGS LODSB LODSD LODSQ 317syn keyword nasmStdInstruction LODSW LOOP[E] LOOPNE LOOPNZ LOOPZ LSS 318syn keyword nasmStdInstruction MOVSB MOVSD MOVSW MOVSX MOVSQ MOVZX MUL NEG NOP NOT 319syn keyword nasmStdInstruction OR POPA[D] POPAW POPF[D] POPFW POPFQ 320syn keyword nasmStdInstruction PUSH[AD] PUSHAW PUSHF[D] PUSHFW PUSHFQ 321syn keyword nasmStdInstruction RCL RCR RETF RET[N] ROL ROR 322syn keyword nasmStdInstruction SAHF SAL SAR SBB SCASB SCASD SCASW 323syn keyword nasmStdInstruction SHL[D] SHR[D] STC STD STOSB STOSD STOSW STOSQ SUB 324syn keyword nasmStdInstruction TEST XADD XCHG XLATB XOR 325syn keyword nasmStdInstruction LFENCE MFENCE SFENCE 326 327 328" System Instructions: (usually privileged) 329" Verification of pointer parameters 330syn keyword nasmSysInstruction ARPL LAR LSL VERR VERW 331" Addressing descriptor tables 332syn keyword nasmSysInstruction LLDT SLDT LGDT SGDT 333" Multitasking 334syn keyword nasmSysInstruction LTR STR 335" Coprocessing and Multiprocessing (requires fpu and multiple cpu's resp.) 336syn keyword nasmSysInstruction CLTS LOCK WAIT 337" Input and Output 338syn keyword nasmInstructnError INS OUTS 339syn keyword nasmSysInstruction IN INSB INSW INSD OUT OUTSB OUTSB OUTSW OUTSD 340" Interrupt control 341syn keyword nasmSysInstruction CLI STI LIDT SIDT 342" System control 343syn match nasmSysInstruction "\<MOV\s[^;]\{-}\<CR\o\>"me=s+3 344syn keyword nasmSysInstruction HLT INVD LMSW 345syn keyword nasmSseInstruction PREFETCHT0 PREFETCHT1 PREFETCHT2 PREFETCHNTA 346syn keyword nasmSseInstruction RSM SFENCE SMSW SYSENTER SYSEXIT UD2 WBINVD 347" TLB (Translation Lookahead Buffer) testing 348syn match nasmSysInstruction "\<MOV\s[^;]\{-}\<TR\o\>"me=s+3 349syn keyword nasmSysInstruction INVLPG 350 351" Debugging Instructions: (privileged) 352syn match nasmDbgInstruction "\<MOV\s[^;]\{-}\<DR\o\>"me=s+3 353syn keyword nasmDbgInstruction INT1 INT3 RDMSR RDTSC RDPMC WRMSR 354 355 356" Floating Point Instructions: (requires FPU) 357syn match nasmFpuInstruction "\<FCMOVN\=\([AB]E\=\|[CEPUZ]\)\>" 358syn keyword nasmFpuInstruction F2XM1 FABS FADD[P] FBLD FBSTP 359syn keyword nasmFpuInstruction FCHS FCLEX FCOM[IP] FCOMP[P] FCOS 360syn keyword nasmFpuInstruction FDECSTP FDISI FDIV[P] FDIVR[P] FENI FFREE 361syn keyword nasmFpuInstruction FIADD FICOM[P] FIDIV[R] FILD 362syn keyword nasmFpuInstruction FIMUL FINCSTP FINIT FIST[P] FISUB[R] 363syn keyword nasmFpuInstruction FLD[1] FLDCW FLDENV FLDL2E FLDL2T FLDLG2 364syn keyword nasmFpuInstruction FLDLN2 FLDPI FLDZ FMUL[P] 365syn keyword nasmFpuInstruction FNCLEX FNDISI FNENI FNINIT FNOP FNSAVE 366syn keyword nasmFpuInstruction FNSTCW FNSTENV FNSTSW FNSTSW 367syn keyword nasmFpuInstruction FPATAN FPREM[1] FPTAN FRNDINT FRSTOR 368syn keyword nasmFpuInstruction FSAVE FSCALE FSETPM FSIN FSINCOS FSQRT 369syn keyword nasmFpuInstruction FSTCW FSTENV FST[P] FSTSW FSUB[P] FSUBR[P] 370syn keyword nasmFpuInstruction FTST FUCOM[IP] FUCOMP[P] 371syn keyword nasmFpuInstruction FXAM FXCH FXTRACT FYL2X FYL2XP1 372 373 374" Multi Media Xtension Packed Instructions: (requires MMX unit) 375" Standard MMX instructions: (requires MMX1 unit) 376syn match nasmInstructnError "\<P\(ADD\|SUB\)U\=S\=[DQ]\=\>" 377syn match nasmInstructnError "\<PCMP\a\{0,2}[BDWQ]\=\>" 378syn keyword nasmMmxInstruction EMMS MOVD MOVQ 379syn keyword nasmMmxInstruction PACKSSDW PACKSSWB PACKUSWB PADDB PADDD PADDW 380syn keyword nasmMmxInstruction PADDSB PADDSW PADDUSB PADDUSW PAND[N] 381syn keyword nasmMmxInstruction PCMPEQB PCMPEQD PCMPEQW PCMPGTB PCMPGTD PCMPGTW 382syn keyword nasmMmxInstruction PMACHRIW PMADDWD PMULHW PMULLW POR 383syn keyword nasmMmxInstruction PSLLD PSLLQ PSLLW PSRAD PSRAW PSRLD PSRLQ PSRLW 384syn keyword nasmMmxInstruction PSUBB PSUBD PSUBW PSUBSB PSUBSW PSUBUSB PSUBUSW 385syn keyword nasmMmxInstruction PUNPCKHBW PUNPCKHDQ PUNPCKHWD 386syn keyword nasmMmxInstruction PUNPCKLBW PUNPCKLDQ PUNPCKLWD PXOR 387" Extended MMX instructions: (requires MMX2/SSE unit) 388syn keyword nasmMmxInstruction MASKMOVQ MOVNTQ 389syn keyword nasmMmxInstruction PAVGB PAVGW PEXTRW PINSRW PMAXSW PMAXUB 390syn keyword nasmMmxInstruction PMINSW PMINUB PMOVMSKB PMULHUW PSADBW PSHUFW 391 392 393" Streaming SIMD Extension Packed Instructions: (requires SSE unit) 394syn match nasmInstructnError "\<CMP\a\{1,5}[PS]S\>" 395syn match nasmSseInstruction "\<CMP\(N\=\(EQ\|L[ET]\)\|\(UN\)\=ORD\)\=[PS]S\>" 396syn keyword nasmSseInstruction ADDPS ADDSS ANDNPS ANDPS 397syn keyword nasmSseInstruction COMISS CVTPI2PS CVTPS2PI 398syn keyword nasmSseInstruction CVTSI2SS CVTSS2SI CVTTPS2PI CVTTSS2SI 399syn keyword nasmSseInstruction DIVPS DIVSS FXRSTOR FXSAVE LDMXCSR 400syn keyword nasmSseInstruction MAXPS MAXSS MINPS MINSS MOVAPS MOVHLPS MOVHPS 401syn keyword nasmSseInstruction MOVLHPS MOVLPS MOVMSKPS MOVNTPS MOVSS MOVUPS 402syn keyword nasmSseInstruction MULPS MULSS 403syn keyword nasmSseInstruction ORPS RCPPS RCPSS RSQRTPS RSQRTSS 404syn keyword nasmSseInstruction SHUFPS SQRTPS SQRTSS STMXCSR SUBPS SUBSS 405syn keyword nasmSseInstruction UCOMISS UNPCKHPS UNPCKLPS XORPS 406 407 408" Three Dimensional Now Packed Instructions: (requires 3DNow! unit) 409syn keyword nasmNowInstruction FEMMS PAVGUSB PF2ID PFACC PFADD PFCMPEQ PFCMPGE 410syn keyword nasmNowInstruction PFCMPGT PFMAX PFMIN PFMUL PFRCP PFRCPIT1 411syn keyword nasmNowInstruction PFRCPIT2 PFRSQIT1 PFRSQRT PFSUB[R] PI2FD 412syn keyword nasmNowInstruction PMULHRWA PREFETCH[W] 413 414 415" Vendor Specific Instructions: 416" Cyrix instructions (requires Cyrix processor) 417syn keyword nasmCrxInstruction PADDSIW PAVEB PDISTIB PMAGW PMULHRW[C] PMULHRIW 418syn keyword nasmCrxInstruction PMVGEZB PMVLZB PMVNZB PMVZB PSUBSIW 419syn keyword nasmCrxInstruction RDSHR RSDC RSLDT SMINT SMINTOLD SVDC SVLDT SVTS 420syn keyword nasmCrxInstruction WRSHR 421" AMD instructions (requires AMD processor) 422syn keyword nasmAmdInstruction SYSCALL SYSRET 423 424 425" Undocumented Instructions: 426syn match nasmUndInstruction "\<POP\s[^;]*\<CS\>"me=s+3 427syn keyword nasmUndInstruction CMPXCHG486 IBTS ICEBP INT01 INT03 LOADALL 428syn keyword nasmUndInstruction LOADALL286 LOADALL386 SALC SMI UD1 UMOV XBTS 429 430 431 432" Synchronize Syntax: 433syn sync clear 434syn sync minlines=50 "for multiple region nesting 435syn sync match nasmSync grouphere nasmMacroDef "^\s*%i\=macro\>"me=s-1 436syn sync match nasmSync grouphere NONE "^\s*%endmacro\>" 437 438 439" Define the default highlighting. 440" Only when an item doesn't have highlighting yet 441 442" Sub Links: 443hi def link nasmInMacDirective nasmDirective 444hi def link nasmInMacLabel nasmLocalLabel 445hi def link nasmInMacLblWarn nasmLabelWarn 446hi def link nasmInMacMacro nasmMacro 447hi def link nasmInMacParam nasmMacro 448hi def link nasmInMacParamNum nasmDecNumber 449hi def link nasmInMacPreCondit nasmPreCondit 450hi def link nasmInMacPreProc nasmPreProc 451hi def link nasmInPreCondit nasmPreCondit 452hi def link nasmInStructure nasmStructure 453hi def link nasmStructureLabel nasmStructure 454 455" Comment Group: 456hi def link nasmComment Comment 457hi def link nasmSpecialComment SpecialComment 458hi def link nasmInCommentTodo Todo 459 460" Constant Group: 461hi def link nasmString String 462hi def link nasmCString String 463hi def link nasmStringError Error 464hi def link nasmCStringEscape SpecialChar 465hi def link nasmCStringFormat SpecialChar 466hi def link nasmBinNumber Number 467hi def link nasmOctNumber Number 468hi def link nasmDecNumber Number 469hi def link nasmHexNumber Number 470hi def link nasmFltNumber Float 471hi def link nasmNumberError Error 472 473" Identifier Group: 474hi def link nasmLabel Identifier 475hi def link nasmLocalLabel Identifier 476hi def link nasmSpecialLabel Special 477hi def link nasmLabelError Error 478hi def link nasmLabelWarn Todo 479 480" PreProc Group: 481hi def link nasmPreProc PreProc 482hi def link nasmDefine Define 483hi def link nasmInclude Include 484hi def link nasmMacro Macro 485hi def link nasmPreCondit PreCondit 486hi def link nasmPreProcError Error 487hi def link nasmPreProcWarn Todo 488 489" Type Group: 490hi def link nasmType Type 491hi def link nasmStorage StorageClass 492hi def link nasmStructure Structure 493hi def link nasmTypeError Error 494 495" Directive Group: 496hi def link nasmConstant Constant 497hi def link nasmInstrModifier Operator 498hi def link nasmRepeat Repeat 499hi def link nasmDirective Keyword 500hi def link nasmStdDirective Operator 501hi def link nasmFmtDirective Keyword 502 503" Register Group: 504hi def link nasmCtrlRegister Special 505hi def link nasmDebugRegister Debug 506hi def link nasmTestRegister Special 507hi def link nasmRegisterError Error 508hi def link nasmMemRefError Error 509 510" Instruction Group: 511hi def link nasmStdInstruction Statement 512hi def link nasmSysInstruction Statement 513hi def link nasmDbgInstruction Debug 514hi def link nasmFpuInstruction Statement 515hi def link nasmMmxInstruction Statement 516hi def link nasmSseInstruction Statement 517hi def link nasmNowInstruction Statement 518hi def link nasmAmdInstruction Special 519hi def link nasmCrxInstruction Special 520hi def link nasmUndInstruction Todo 521hi def link nasmInstructnError Error 522 523 524let b:current_syntax = "nasm" 525 526" vim:ts=8 sw=4 527