# language definition file for assembler

comment start ";"

include "c_string.lang"

preproc = '^[[:blank:]]*\.([[:alnum:]]+)'
preproc = '^[[:blank:]]*([[:alnum:]]+):'

keyword = "aaa|aad|aam|aas|adc|add|and|arpl",
"bound|bsf|bsr|bswap|bt|btc|btr|bts",
"call|cbw|cdq|clc",
"cld|cli|clts|cmc|cmp|cmps|cmpsb|cmpsd|cmpsw|cmpxchg|cwd|cwde",
"daa|das|dec|div",
"enter|esc",
"f2xm1|fabs|fadd|faddp|fbld|fbstp|fchs|fclex|fcom|fcomp",
"fcompp|fcos|fdecstp|fdisi|fdiv|fdivp|fdivr|fdivrp|feni",
"ffree|fiadd|ficom|ficomp|fidiv|fidivr|fild|fimul|fincstp",
"finit|fist|fistp|fisub|fisubr|fld|fld1",
"fldcw|fldenv|fldl2e|fldl2t|fldlg2|fldln2|fldpi|fldz|fmul|fmulp",
"fnclex|fndisi|fneni|fninit|fnop",
"fnsave|fnstcw|fnstenv|fnstsw|fpatan|fprem|fprem1",
"fptan|frndint|frstor|fsave|fscale|fsetpm|fsin",
"fsincos|fsqrt|fst|fstcw|fstenv|fstp|fstsw|fsub|fsubp",
"fsubr|fsubrp|ftst|fucom|fucomp|fucompp|fwait",
"fxam|fxch|fxtract|fyl2x|fyl2xp1",
"hlt",
"idiv|imul|in|inc|insb|insd|insw|int|into|invd|invlpg|iret|iretd",
"ja|jae|jb|jbe|jc|jcxz|je|jecxz|jg|jge|jl|jle|jmp|jna|jnae|jnb|jnbe",
"jnc|jne|jng|jnge|jnl|jnle|jno|jnp|jns|jnz|jo|jp|jpe|jpo|js|jz",
"lahf|lar|lds|lea|leave|les|lfs|lgdt|lgs|lidt|lldt|lmsw|lock|lods",
"lodsb|lodsd|lodsw|loop|loopd|loopde|loopdne|loopdnz|loopdz|loope",
"loopne|loopnz|loopz|lsl|lss|ltr",
"mov|movs|movsb|movsd|movsw|movsx|movzx|mul|mod",
"neg|nop|not",
"or|out|outsb|outsd|outsw|offset",
"pop|popa|popad|popf|popfd|push|pusha|pushad|pushf|pushfd|ptr",
"rcl|rcr|rep|repe|repne|repnz|repz|ret|retf|retn|rol|ror",
"sahf|sal|sar|sbb|scas|scasb|scasd|scasw|segcs|segds|seges",
"segfs|seggs|segss|seta|setae|setb|setbe",
"setc|sete|setg|setge|setl|setle|setna|setnae|setnb|setnbe",
"setnc|setne|setng|setnge|setnl|setnle",
"setno|setnp|setns|setnz|seto|setp|setpe|setpo|sets",
"setz|sgdt|shl|shld|shr|shrd|sidt|sldt|smsw|stc",
"std|sti|stos|stosb|stosd|stosw|str|sub",
"test|type",
"verr|verw",
"wait|wbinvd|xadd|xchg|xlat|xor",
"assume|comment|db|dd|dq|dt|dw|end|endm|endp|ends",
"eq|equ|exitm|ex|trn|far|ge|group|gt|include|label|large",
"le|length|local|lt|macro|mask|name|near|org|page",
"proc|public|purge|record|rept|seg|segment|short",
"size|small|struc|subttl|symtype|this|title|width"
nonsensitive

variable = "ah|al|ax|bh|bl|bp|bx|ch|cl|cs|cx|dh|di|dl|ds",
  "dx|eax|ebp|ebx|ecx|edi|edx",
  "eip|es|esi|esp|fs|gs|shl|shr|si|sp|ss|st" nonsensitive

type = "byte|dword|high|low|qword|tbyte|word"

number = '0([0-9a-fA-F]+)([hHlLuU]*)'

number = '((?:0x|0X)[0-9a-fA-F]+|\d*[\.\_]?\d+(?:[eE][\-\+]\d+)?[hHlLuU]*)'

include "symbols.lang"
include "number.lang"