📄 nasm.vim
字号:
" Vim syntax file" Language: NASM - The Netwide Assembler (v0.98)" Maintainer: Manuel M.H. Stol <mmh.stol@gmx.net>" Last Change: 2001-05-07" Vim URL: http://www.vim.org/lang.html" NASM Home: http://www.cryogen.com/Nasm/" Setup Syntax:" Clear old syntax settingsif version < 600 syn clearelseif exists("b:current_syntax") finishendif" Assembler syntax is case insensetivesyn case ignore" Vim search and movement commands on identifersif version < 600 " Comments at start of a line inside which to skip search for indentifiers set comments=:; " Identifier Keyword characters (defines \k) set iskeyword=@,48-57,#,$,.,?,@-@,_,~else " Comments at start of a line inside which to skip search for indentifiers setlocal comments=:; " Identifier Keyword characters (defines \k) setlocal iskeyword=@,48-57,#,$,.,?,@-@,_,~endif" Comments:syn region nasmComment start=";" keepend end="$" contains=@nasmGrpInCommentssyn region nasmSpecialComment start=";\*\*\*" keepend end="$"syn keyword nasmInCommentTodo contained TODO FIXME XXX[XXXXX]syn cluster nasmGrpInComments contains=nasmInCommentTodosyn cluster nasmGrpComments contains=@nasmGrpInComments,nasmComment,nasmSpecialComment" Label Identifiers:" in NASM: 'Everything is a Label'" Definition Label = label defined by %[i]define or %[i]assign" Identifier Label = label defined as first non-keyword on a line or %[i]macrosyn match nasmLabelError "$\=\(\d\+\K\|[#\.@]\|\$\$\k\)\k*\>"syn match nasmLabel "\<\(\h\|[?@]\)\k*\>"syn match nasmLabel "[\$\~]\(\h\|[?@]\)\k*\>"lc=1" Labels starting with one or two '.' are specialsyn match nasmLocalLabel "\<\.\(\w\|[#$?@~]\)\k*\>"syn match nasmLocalLabel "\<\$\.\(\w\|[#$?@~]\)\k*\>"ms=s+1if !exists("nasm_no_warn") syn match nasmLabelWarn "\<\~\=\$\=[_\.][_\.\~]*\>"endifif exists("nasm_loose_syntax") syn match nasmSpecialLabel "\<\.\.@\k\+\>" syn match nasmSpecialLabel "\<\$\.\.@\k\+\>"ms=s+1 if !exists("nasm_no_warn") syn match nasmLabelWarn "\<\$\=\.\.@\(\d\|[#$\.~]\)\k*\>" endif " disallow use of nasm internal label format syn match nasmLabelError "\<\$\=\.\.@\d\+\.\k*\>"else syn match nasmSpecialLabel "\<\.\.@\(\h\|[?@]\)\k*\>" syn match nasmSpecialLabel "\<\$\.\.@\(\h\|[?@]\)\k*\>"ms=s+1endif" Labels can be dereferenced with '$' to destinguish them from reserved wordssyn match nasmLabelError "\<\$\K\k*\s*:"syn match nasmLabelError "^\s*\$\K\k*\>"syn match nasmLabelError "\<\~\s*\(\k*\s*:\|\$\=\.\k*\)"" Constants:syn match nasmStringError +["']+syn match nasmString +\("[^"]\{-}"\|'[^']\{-}'\)+syn match nasmBinNumber "\<[0-1]\+b\>"syn match nasmBinNumber "\<\~[0-1]\+b\>"lc=1syn match nasmOctNumber "\<\o\+q\>"syn match nasmOctNumber "\<\~\o\+q\>"lc=1syn match nasmDecNumber "\<\d\+\>"syn match nasmDecNumber "\<\~\d\+\>"lc=1syn match nasmHexNumber "\<\(\d\x*h\|0x\x\+\|\$\d\x*\)\>"syn match nasmHexNumber "\<\~\(\d\x*h\|0x\x\+\|\$\d\x*\)\>"lc=1syn match nasmFltNumber "\<\d\+\.\d*\(e[+-]\=\d\+\)\=\>"syn keyword nasmFltNumber Inf Infinity Indefinite NaN SNaN QNaNsyn match nasmNumberError "\<\~\s*\d\+\.\d*\(e[+-]\=\d\+\)\=\>"" Netwide Assembler Storage Directives:" Storage typessyn keyword nasmTypeError DF EXTRN FWORD RESF TBYTEsyn keyword nasmType FAR NEAR SHORTsyn keyword nasmType BYTE WORD DWORD QWORD DQWORD HWORD DHWORD TWORDsyn keyword nasmType CDECL FASTCALL NONE PASCAL STDCALLsyn keyword nasmStorage DB DW DD DQ DDQ DTsyn keyword nasmStorage RESB RESW RESD RESQ RESDQ RESTsyn keyword nasmStorage EXTERN GLOBAL COMMON" Structured storage typessyn match nasmTypeError "\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>"syn match nasmStructureLabel contained "\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>"" structures cannot be nested (yet) -> use: 'keepend' and 're='syn cluster nasmGrpCntnStruc contains=ALLBUT,@nasmGrpInComments,nasmMacroDef,@nasmGrpInMacros,@nasmGrpInPreCondits,nasmStructureDef,@nasmGrpInStrucssyn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnStrucsyn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4 end="^\s*ENDSTRUC\>"re=e-8 contains=@nasmGrpCntnStrucsyn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="\<ISTRUCT\=\>" end="\<IEND\(STRUCT\=\)\=\>" contains=@nasmGrpCntnStruc,nasmInStructure" union types are not part of nasm (yet)"syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnStruc"syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnStruc,nasmInStructuresyn match nasmInStructure contained "^\s*AT\>"hs=e-1syn cluster nasmGrpInStrucs contains=nasmStructure,nasmInStructure,nasmStructureLabel" PreProcessor Instructions:" NAsm PreProcs start with %, but % is not a charactersyn match nasmPreProcError "%{\=\(%\=\k\+\|%%\+\k*\|[+-]\=\d\+\)}\="if exists("nasm_loose_syntax") syn cluster nasmGrpNxtCtx contains=nasmStructureLabel,nasmLabel,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcErrorelse syn cluster nasmGrpNxtCtx contains=nasmStructureLabel,nasmLabel,nasmLabelError,nasmPreProcErrorendif" Multi-line macrosyn cluster nasmGrpCntnMacro contains=ALLBUT,@nasmGrpInComments,nasmStructureDef,@nasmGrpInStrucs,nasmMacroDef,@nasmGrpPreCondits,nasmMemReference,nasmInMacPreCondit,nasmInMacStrucDefsyn 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,nasmInMacStrucDefif exists("nasm_loose_syntax") syn match nasmInMacLabel contained "%\(%\k\+\>\|{%\k\+}\)" syn match nasmInMacLabel contained "%\($\+\(\w\|[#\.?@~]\)\k*\>\|{$\+\(\w\|[#\.?@~]\)\k*}\)" syn match nasmInMacPreProc contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=nasmStructureLabel,nasmLabel,nasmInMacParam,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcError if !exists("nasm_no_warn") syn match nasmInMacLblWarn contained "%\(%[$\.]\k*\>\|{%[$\.]\k*}\)" syn match nasmInMacLblWarn contained "%\($\+\(\d\|[#\.@~]\)\k*\|{\$\+\(\d\|[#\.@~]\)\k*}\)" hi link nasmInMacCatLabel nasmInMacLblWarn else hi link nasmInMacCatLabel nasmInMacLabel endifelse syn match nasmInMacLabel contained "%\(%\(\w\|[#?@~]\)\k*\>\|{%\(\w\|[#?@~]\)\k*}\)" syn match nasmInMacLabel contained "%\($\+\(\h\|[?@]\)\k*\>\|{$\+\(\h\|[?@]\)\k*}\)" hi link nasmInMacCatLabel nasmLabelErrorendifsyn match nasmInMacCatLabel contained "\d\K\k*"lc=1syn match nasmInMacLabel contained "\d}\k\+"lc=2if !exists("nasm_no_warn") syn match nasmInMacLblWarn contained "%\(\($\+\|%\)[_~][._~]*\>\|{\($\+\|%\)[_~][._~]*}\)"endifsyn match nasmInMacPreProc contained "^\s*%pop\>"hs=e-3syn match nasmInMacPreProc contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx" structures cannot be nested (yet) -> use: 'keepend' and 're='syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnMacrosyn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4 end="^\s*ENDSTRUC\>"re=e-8 contains=@nasmGrpCntnMacrosyn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="\<ISTRUCT\=\>" end="\<IEND\(STRUCT\=\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructure" union types are not part of nasm (yet)"syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnMacro"syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructuresyn 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,nasmInPreConditsyn match nasmInMacPreCondit contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtxsyn match nasmInMacPreCondit contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtxsyn match nasmInMacPreCondit contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtxsyn match nasmInMacParamNum contained "\<\d\+\.list\>"me=e-5syn match nasmInMacParamNum contained "\<\d\+\.nolist\>"me=e-7syn match nasmInMacDirective contained "\.\(no\)\=list\>"syn match nasmInMacMacro contained transparent "macro\s"lc=5 skipwhite nextgroup=nasmStructureLabelsyn match nasmInMacMacro contained "^\s*%rotate\>"hs=e-6syn match nasmInMacParam contained "%\([+-]\=\d\+\|{[+-]\=\d\+}\)"" nasm conditional macro operands/arguments" Todo: check feasebility; add too nasmGrpInMacros, etc."syn match nasmInMacCond contained "\<\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P[EO]\=\)\>"syn cluster nasmGrpInMacros contains=nasmMacro,nasmInMacMacro,nasmInMacParam,nasmInMacParamNum,nasmInMacDirective,nasmInMacLabel,nasmInMacLblWarn,nasmInMacMemRef,nasmInMacPreConDef,nasmInMacPreCondit,nasmInMacPreProc,nasmInMacStrucDef" Context pre-procs that are better used inside a macroif exists("nasm_ctx_outside_macro") syn region nasmPreConditDef transparent matchgroup=nasmCtxPreCondit start="^\s*%ifnctx\>"hs=e-6 start="^\s*%ifctx\>"hs=e-5 end="%endif\>" contains=@nasmGrpCntnPreCon syn match nasmCtxPreProc "^\s*%pop\>"hs=e-3 if exists("nasm_loose_syntax") syn match nasmCtxLocLabel "%$\+\(\w\|[#\.?@~]\)\k*\>" else syn match nasmCtxLocLabel "%$\+\(\h\|[?@]\)\k*\>" endif syn match nasmCtxPreProc "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx syn match nasmCtxPreCondit contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx syn match nasmCtxPreCondit contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx syn match nasmCtxPreCondit contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx if exists("nasm_no_warn") hi link nasmCtxPreCondit nasmPreCondit hi link nasmCtxPreProc nasmPreProc hi link nasmCtxLocLabel nasmLocalLabel else hi link nasmCtxPreCondit nasmPreProcWarn hi link nasmCtxPreProc nasmPreProcWarn hi link nasmCtxLocLabel nasmLabelWarn endifendif" Conditional assemblysyn cluster nasmGrpCntnPreCon contains=ALLBUT,@nasmGrpInComments,@nasmGrpInMacros,@nasmGrpInStrucssyn 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=@nasmGrpCntnPreConsyn match nasmInPreCondit contained "^\s*%el\(if\|se\)\>"hs=e-4syn match nasmInPreCondit contained "^\s*%elifid\>"hs=e-6syn match nasmInPreCondit contained "^\s*%elif\(def\|idn\|nid\|num\|str\)\>"hs=e-7syn match nasmInPreCondit contained "^\s*%elif\(n\(def\|idn\|num\|str\)\|idni\)\>"hs=e-8syn match nasmInPreCondit contained "^\s*%elifnidni\>"hs=e-9syn cluster nasmGrpInPreCondits contains=nasmPreCondit,nasmInPreCondit,nasmCtxPreConditsyn cluster nasmGrpPreCondits contains=nasmPreConditDef,@nasmGrpInPreCondits,nasmCtxPreProc,nasmCtxLocLabel" Other pre-processor statementssyn match nasmPreProc "^\s*%rep\>"hs=e-3syn match nasmPreProc "^\s*%line\>"hs=e-4syn match nasmPreProc "^\s*%\(clear\|error\)\>"hs=e-5syn match nasmPreProc "^\s*%endrep\>"hs=e-6syn match nasmPreProc "^\s*%exitrep\>"hs=e-7syn match nasmDefine "^\s*%undef\>"hs=e-5syn match nasmDefine "^\s*%\(assign\|define\)\>"hs=e-6syn match nasmDefine "^\s*%i\(assign\|define\)\>"hs=e-7syn match nasmInclude "^\s*%include\>"hs=e-7" Multiple pre-processor instructions on single line detection (obsolete)"syn match nasmPreProcError +^\s*\([^\t "%';][^"%';]*\|[^\t "';][^"%';]\+\)%\a\+\>+syn cluster nasmGrpPreProcs contains=nasmMacroDef,@nasmGrpInMacros,@nasmGrpPreCondits,nasmPreProc,nasmDefine,nasmInclude,nasmPreProcWarn,nasmPreProcError" Register Identifiers:" Register operands:syn match nasmGen08Register "\<[A-D][HL]\>"syn match nasmGen16Register "\<\([A-D]X\|[DS]I\|[BS]P\)\>"syn match nasmGen32Register "\<E\([A-D]X\|[DS]I\|[BS]P\)\>"syn match nasmSegRegister "\<[C-GS]S\>"syn match nasmSpcRegister "\<E\=IP\>"syn match nasmFpuRegister "\<ST\o\>"syn match nasmMmxRegister "\<MM\o\>"syn match nasmSseRegister "\<XMM\o\>"syn match nasmCtrlRegister "\<CR\o\>"syn match nasmDebugRegister "\<DR\o\>"syn match nasmTestRegister "\<TR\o\>"syn match nasmRegisterError "\<\(CR[15-9]\|DR[4-58-9]\|TR[0-28-9]\)\>"syn match nasmRegisterError "\<X\=MM[8-9]\>"syn match nasmRegisterError "\<ST\((\d)\|[8-9]\>\)"syn match nasmRegisterError "\<E\([A-D][HL]\|[C-GS]S\)\>"" Memory reference operand (address):syn match nasmMemRefError "[\[\]]"syn cluster nasmGrpCntnMemRef contains=ALLBUT,@nasmGrpComments,@nasmGrpPreProcs,@nasmGrpInStrucs,nasmMemReference,nasmMemRefErrorsyn match nasmInMacMemRef contained "\[[^;\[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParamsyn match nasmMemReference "\[[^;\[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel" Netwide Assembler Directives:" Compilation constantssyn keyword nasmConstant __BITS__ __DATE__ __FILE__ __FORMAT__ __LINE__syn keyword nasmConstant __NASM_MAJOR__ __NASM_MINOR__ __NASM_VERSION__syn keyword nasmConstant __TIME__" Instruction modifierssyn match nasmInstructnError "\<TO\>"syn match nasmInstrModifier "\(^\|:\)\s*[C-GS]S\>"ms=e-1syn keyword nasmInstrModifier A16 A32 O16 O32
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -