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