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