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