xref: /vim-8.2.3635/runtime/syntax/masm.vim (revision 910f66f9)
1" Vim syntax file
2" Language:	Microsoft Assembler (80x86)
3" Maintainer:	Rob Brady <[email protected]>
4" Last Change:	$Date$
5" URL: http://www.datatone.com/~robb/vim/syntax/masm.vim
6" $Revision$
7
8" For version 5.x: Clear all syntax items
9" For version 6.x: Quit when a syntax file was already loaded
10if version < 600
11  syntax clear
12elseif exists("b:current_syntax")
13  finish
14endif
15
16syn case ignore
17
18
19" syn match masmType "\.word"
20
21syn match masmIdentifier	"[a-z_$][a-z0-9_$]*"
22syn match masmLabel		"^[A-Z_$][A-Z0-9_$]*:"he=e-1
23
24syn match masmDecimal		"\d*"
25syn match masmBinary		"[0-1]\+b"  "put this before hex or 0bfh dies!
26syn match masmHexadecimal	"[0-9]\x*h"
27syn match masmFloat		"[0-9]\x*r"
28
29syn match masmComment		";.*"
30syn region masmString		start=+'+ end=+'+
31
32syn keyword masmOperator	AND BYTE PTR CODEPTR DATAPTR DUP DWORD EQ FAR
33syn keyword masmOperator	FWORD GE GT HIGH LARGE LE LOW LT MOD NE NEAR
34syn keyword masmOperator	NOT OFFSET OR PROC PWORD QWORD SEG SHORT TBYTE
35syn keyword masmOperator	TYPE WORD PARA
36syn keyword masmDirective	ALIGN ARG ASSUME CODESEG COMM
37syn keyword masmDirective	CONST DATASEG DB DD DF DISPLAY DOSSEG DP
38syn keyword masmDirective	DQ DT DW ELSE ELSEIF EMUL END ENDIF ENDM ENDP
39syn keyword masmDirective	ENDS ENUM EQU PROC PUBLIC PUBLICDLL RADIX
40syn keyword masmDirective	EXTRN FARDATA GLOBAL RECORD SEGMENT SMALLSTACK
41syn keyword masmDirective	GROUP IF IF1 IF2 IFB IFDEF IFDIF IFDIFI
42syn keyword masmDirective	IFE IFIDN IFIDNI IFNB IFNDEF INCLUDE INCLUDLIB
43syn keyword masmDirective	LABEL LARGESTACK STACK STRUC SUBTTL TITLE
44syn keyword masmDirective	MODEL NAME NOEMUL UNION USES VERSION
45syn keyword masmDirective	ORG FLAT
46syn match   masmDirective	"\.model"
47syn match   masmDirective	"\.186"
48syn match   masmDirective	"\.286"
49syn match   masmDirective	"\.286c"
50syn match   masmDirective	"\.286p"
51syn match   masmDirective	"\.287"
52syn match   masmDirective	"\.386"
53syn match   masmDirective	"\.386c"
54syn match   masmDirective	"\.386p"
55syn match   masmDirective	"\.387"
56syn match   masmDirective	"\.486"
57syn match   masmDirective	"\.486c"
58syn match   masmDirective	"\.486p"
59syn match   masmDirective	"\.8086"
60syn match   masmDirective	"\.8087"
61syn match   masmDirective	"\.ALPHA"
62syn match   masmDirective	"\.CODE"
63syn match   masmDirective	"\.DATA"
64
65syn keyword masmRegister	AX BX CX DX SI DI BP SP
66syn keyword masmRegister	ES DS SS CS
67syn keyword masmRegister	AH BH CH DH AL BL CL DL
68syn keyword masmRegister	EAX EBX ECX EDX ESI EDI EBP ESP
69
70
71" these are current as of the 486 - don't have any pentium manuals handy
72syn keyword masmOpcode		AAA AAD AAM AAS ADC ADD AND ARPL BOUND BSF
73syn keyword masmOpcode		BSR BSWAP BT BTC BTR BTS BSWAP BT BTC BTR
74syn keyword masmOpcode		BTS CALL CBW CDQ CLC CLD CLI CLTS CMC CMP
75syn keyword masmOpcode		CMPS CMPSB CMPSW CMPSD CMPXCHG CWD CWDE DAA
76syn keyword masmOpcode		DAS DEC DIV ENTER HLT IDIV IMUL IN INC INS
77syn keyword masmOpcode		INSB INSW INSD INT INTO INVD INVLPG IRET
78syn keyword masmOpcode		IRETD JA JAE JB JBE JC JCXZ JECXZ JE JZ JG
79syn keyword masmOpcode		JGE JL JLE JNA JNAE JNB JNBE JNC JNE JNG JNGE
80syn keyword masmOpcode		JNL JNLE JNO JNP JNS JNZ JO JP JPE JPO JS JZ
81syn keyword masmOpcode		JMP LAHF LAR LEA LEAVE LGDT LIDT LGS LSS LFS
82syn keyword masmOpcode		LODS LODSB LODSW LODSD LOOP LOOPE LOOPZ LOONE
83syn keyword masmOpcode		LOOPNE RETF RETN
84syn keyword masmOpcode		LDS LES LLDT LMSW LOCK LSL LTR MOV MOVS MOVSB
85syn keyword masmOpcode		MOVSW MOVSD MOVSX MOVZX MUL NEG NOP NOT OR
86syn keyword masmOpcode		OUT OUTS OUTSB OUTSW OUTSD POP POPA POPD
87syn keyword masmOpcode		POPF POPFD PUSH PUSHA PUSHAD PUSHF PUSHFD
88syn keyword masmOpcode		RCL RCR ROL ROR REP REPE REPZ REPNE REPNZ
89syn keyword masmOpcode		RET SAHF SAL SAR SHL SHR SBB SCAS SCASB
90syn keyword masmOpcode		SCASW SCASD SETA SETAE SETB SETBE SETC SETE
91syn keyword masmOpcode		SETG SETGE SETL SETLE SETNA SETNAE SETNB
92syn keyword masmOpcode		SETNBE SETNC SETNE SETNG SETNGE SETNL SETNLE
93syn keyword masmOpcode		SETNO SETNP SETNS SETNZ SETO SETP SETPE SETPO
94syn keyword masmOpcode		SETS SETZ SGDT SIDT SHLD SHRD SLDT SMSW STC
95syn keyword masmOpcode		STD STI STOS STOSB STOSW STOSD STR SUB TEST
96syn keyword masmOpcode		VERR VERW WAIT WBINVD XADD XCHG XLAT XLATB XOR
97
98" floating point coprocessor as of 487
99syn keyword masmOpFloat		F2XM1 FABS FADD FADDP FBLD FBSTP FCHS FCLEX
100syn keyword masmOpFloat		FNCLEX FCOM FCOMP FCOMPP FCOS FDECSTP FDISI
101syn keyword masmOpFloat		FNDISI FDIV FDIVP FDIVR FDIVRP FENI FNENI
102syn keyword masmOpFloat		FFREE FIADD FICOM FICOMP FIDIV FIDIVR FILD
103syn keyword masmOpFloat		FIMUL FINCSTP FINIT FNINIT FIST FISTP FISUB
104syn keyword masmOpFloat		FISUBR FLD FLDCW FLDENV FLDLG2 FLDLN2 FLDL2E
105syn keyword masmOpFloat		FLDL2T FLDPI FLDZ FLD1 FMUL FMULP FNOP FPATAN
106syn keyword masmOpFloat		FPREM FPREM1 FPTAN FRNDINT FRSTOR FSAVE
107syn keyword masmOpFloat		FNSAVE FSCALE FSETPM FSIN FSINCOS FSQRT FST
108syn keyword masmOpFloat		FSTCW FNSTCW FSTENV FNSTENV FSTP FSTSW FNSTSW
109syn keyword masmOpFloat		FSUB FSUBP FSUBR FSUBRP FTST FUCOM FUCOMP
110syn keyword masmOpFloat		FUCOMPP FWAIT FXAM FXCH FXTRACT FYL2X FYL2XP1
111syn match   masmOpFloat		"FSTSW[ \t]\+AX"
112syn match   masmOpFloat		"FNSTSW[ \t]\+AX"
113
114" Define the default highlighting.
115" For version 5.7 and earlier: only when not done already
116" For version 5.8 and later: only when an item doesn't have highlighting yet
117if version >= 508 || !exists("did_masm_syntax_inits")
118  if version < 508
119    let did_masm_syntax_inits = 1
120    command -nargs=+ HiLink hi link <args>
121  else
122    command -nargs=+ HiLink hi def link <args>
123  endif
124
125  " The default methods for highlighting.  Can be overridden later
126  HiLink masmLabel	Label
127  HiLink masmComment	Comment
128  HiLink masmDirective	Statement
129  HiLink masmOperator	Statement
130  HiLink masmString	String
131
132  HiLink masmHexadecimal Number
133  HiLink masmDecimal	Number
134  HiLink masmBinary	Number
135  HiLink masmFloat	Number
136
137  HiLink masmIdentifier Identifier
138
139  delcommand HiLink
140endif
141
142let b:current_syntax = "masm"
143
144" vim: ts=8
145