Universal-Assembly-Syntax-H.../syntaxes/asm.tmLanguage.json

385 lines
15 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
"name": "x86/x64/ARM Assembly",
"patterns": [
{ "include": "#comments" },
{ "include": "#strings" },
{ "include": "#constants" },
{ "include": "#registers" },
{ "include": "#instructions" },
{ "include": "#directives" },
{ "include": "#data_labels" },
{ "include": "#labels" },
{ "include": "#sections" },
{ "include": "#memory_operands" },
{ "include": "#operators" },
{ "include": "#symbols" },
{ "include": "#functions" },
{ "include": "#structure" },
{ "include": "#macros" }
],
"repository": {
"comments": {
"patterns": [
{
"name": "comment.line.semicolon.x86asm",
"match": ";.*$"
},
{
"name": "comment.block.x86asm",
"begin": "/\\*",
"end": "\\*/"
}
]
},
"directives": {
"patterns": [
{
"name": "keyword.control.directive.define.x86asm",
"match": "%define\\b"
},
{
"name": "keyword.control.directive.assign.x86asm",
"match": "%assign\\b"
},
{
"name": "keyword.control.directive.equ.x86asm",
"match": "\\bequ\\b"
},
{
"name": "keyword.control.directive.nasm.x86asm",
"match": "%(if|ifdef|ifndef|else|elif|endif|include|macro|endmacro|rep|endrep|exitrep|rotate|push|pop|local|undef|strlen|substr|arg|stacksize|use16|use32|use64)\\b"
},
{
"name": "keyword.control.directive.x86asm",
"match": "\\.(file|cfi_[a-zA-Z_]+|gcc_except_table|ctors|ascii|lcomm|byte|ident|align|rdata|rodata|comment|tbss|init|fini|note|debug|intel_syntax)\\b"
},
{
"name": "keyword.control.directive.offset.x86asm",
"match": "\\bOFFSET\\b"
},
{
"name": "keyword.control.directive.uleb128.x86asm",
"match": "\\.uleb128\\b"
},
{
"name": "keyword.control.directive.def.x86asm",
"match": "\\.def\\b"
},
{
"name": "keyword.control.directive.long.x86asm",
"match": "\\.long\\b"
},
{
"name": "keyword.control.directive.scl.x86asm",
"match": "\\.scl\\b"
},
{
"name": "keyword.control.directive.type.x86asm",
"match": "\\.type\\b"
},
{
"name": "keyword.control.directive.endef.x86asm",
"match": "\\.endef\\b"
},
{
"name": "keyword.control.directive.globl.x86asm",
"match": "\\.globl\\b"
},
{
"name": "keyword.control.directive.space.x86asm",
"match": "\\.space\\b"
},
{
"name": "keyword.control.directive.intel_syntax.x86asm",
"match": "\\.intel_syntax\\b"
},
{
"name": "keyword.control.directive.extern.x86asm",
"match": "\\bextern\\b"
},
{
"name": "keyword.control.directive.global.x86asm",
"match": "\\bglobal\\b"
},
{
"name": "keyword.control.directive.weak.x86asm",
"match": "\\.weak\\b"
},
{
"name": "keyword.control.directive.hidden.x86asm",
"match": "\\.hidden\\b"
},
{
"name": "keyword.control.directive.protected.x86asm",
"match": "\\.protected\\b"
},
{
"name": "keyword.control.directive.internal.x86asm",
"match": "\\.internal\\b"
},
{
"name": "keyword.control.directive.default.x86asm",
"match": "\\bdefault\\b"
},
{
"name": "keyword.control.directive.rel.x86asm",
"match": "\\brel\\b"
}
]
},
"data_labels": {
"patterns": [
{
"name": "markup.deleted.data.label.x86asm",
"match": "^\\s*([a-zA-Z_][a-zA-Z0-9_]*):(?=\\s*(resb|resw|resd|resq|db|dw|dd|dq|times))"
},
{
"name": "markup.deleted.data.label.x86asm",
"match": "\\b(list\\d*\\w*|\\w*Size|\\w*size)\\b"
}
]
},
"labels": {
"patterns": [
{
"name": "entity.name.function.label.x86asm",
"match": "^\\s*\\.[a-zA-Z_][a-zA-Z0-9_]*:"
},
{
"name": "entity.name.function.label.x86asm",
"match": "^\\s*[a-zA-Z_][a-zA-Z0-9_]*:"
},
{
"name": "entity.name.tag.label.x86asm",
"match": "^\\s*L[a-zA-Z0-9_]+:"
}
]
},
"sections": {
"patterns": [
{
"name": "keyword.control.section.квс",
"match": "\\.(текст|данные|бнд)\\b"
},
{
"name": "keyword.control.section.x86asm",
"match": "\\.(section .(text|data|bss|tbss|tcomm))\\b"
},
{
"name": "keyword.control.section.x86asm",
"match": "\\.(text|data|bss|tbss|tcomm|rodata)\\b"
}
]
},
"instructions": {
"patterns": [
{
"name": "keyword.control.instruction.квс",
"match": "\\b(переместить_имм|переместить|загрузить|сохранить|загрузить_байт_из_памяти|сохранить_байт|загрузить_адрес|переместить_сулями|переместить_со_знаком|загрузить_байт|сравнить_с|сравнить|сравнить_байт|проверить|прибавить|прибавить_непосредственно|прибавить_байт|вычесть|вычесть_непосредственно|вычесть_байт|увеличить|уменьшить|умножить|умножить_знаковое|разделить|разделить_знаковое|и|или|исключающее_или|инвертировать|отрицать|переход|короткий_переход|переход_если_равно|переход_если_неравно|переход_если_меньше|переход_если_больше|переход_если_меньше_или_равно|переход_если_больше_или_равно|переход_если_перенос|переход_если_нет_переноса|переход_если_ноль|переход_если_неоль|короткий_переход_если_равноороткий_переход_если_неравноороткий_переход_если_меньшеороткий_переход_если_большеороткий_переход_если_меньше_или_равноороткий_переход_если_больше_или_равноороткий_переход_если_переносороткий_переход_если_нет_переносаороткий_переход_если_ноль|короткий_переход_если_неоль|вызвать|вернуться|втолкнуть|вытолкнуть|втолкнуть_непосредственно|втолкнуть_байт|сдвиг_влево|сдвиг_вправо|сдвиг_арифметический_вправоращать_влеворащать_вправо|цикл|обменять|вызов_системы|прервать|войти_в_систему|остановить|нет_операции|отладка|переместить_байт|переместить_слово|сравнить_байты|сканировать_байт|установить_перенос|сбросить_перенос|установить_направление|сбросить_направление|втолкнуть_флаги|вытолкнуть_флаги|ввод_байта|вывод_байта|идентифицировать_процессор|прочитать_счётчик)\\b"
},
{
"name": "keyword.control.instruction.x86asm",
"match": "\\b(?i)(mov|push|pop|call|ret|leave|jmp|je|jne|jz|jnz|jbe|jae|ja|jb|jge|jg|jl|jle|jo|jno|js|jns|jc|jnc|jp|jnp|add|sub|mul|div|imul|idiv|and|or|xor|xchg|lea|cmp|test|inc|dec|shl|shr|sal|sar|rol|ror|rcl|rcr|movzx|movsx|movsxd|nop|enter|int|syscall|sysret|hlt|in|out|rdmsr|wrmsr|cbw|cwd|cdq|cqo|rep|repe|repz|repne|repnz|loop|loope|loopz|loopne|loopnz|clc|stc|cli|sti|cld|std|lahf|sahf|pushf|popf|pusha|popa|pushad|popad)\\b"
},
{
"name": "keyword.control.instruction.sse.x86asm",
"match": "\\b(?i)(movq|movd|movdqa|movdqu|movaps|movups|movapd|movupd|movss|movsd|movhps|movlps|movhpd|movlpd|xorps|xorpd|andps|andpd|orps|orpd|addps|addpd|addss|addsd|subps|subpd|subss|subsd|mulps|mulpd|mulss|mulsd|divps|divpd|divss|divsd|maxps|maxpd|maxss|maxsd|minps|minpd|minss|minsd|cmpps|cmppd|cmpss|cmpsd|comiss|comisd|ucomiss|ucomisd|cvtps2pd|cvtpd2ps|cvtps2dq|cvtpd2dq|cvtdq2ps|cvtdq2pd|cvtss2sd|cvtsd2ss|cvtss2si|cvtsd2si|cvttss2si|cvttsd2si|cvtsi2ss|cvtsi2sd)\\b"
},
{
"name": "keyword.control.instruction.avx.x86asm",
"match": "\\b(?i)(vzeroupper|vzeroall|vmovdqa|vmovdqu|vmovaps|vmovups|vmovapd|vmovupd|vaddps|vaddpd|vaddss|vaddsd|vsubps|vsubpd|vsubss|vsubsd|vmulps|vmulpd|vmulss|vmulsd|vdivps|vdivpd|vdivss|vdivsd|vxorps|vxorpd|vandps|vandpd|vorps|vorpd|vcmpps|vcmppd|vcmpss|vcmpsd|vbroadcastss|vbroadcastsd|vinsertf128|vextractf128|vperm2f128|vblendps|vblendpd|vshufps|vshufpd)\\b"
}
]
},
"registers": {
"patterns": [
{
"name": "variable.language.register.квс",
"match": "\\b(раикс|рсикс|рдикс|рбикс|рсипи|рбипи|рсиай|рдиай|р8|р9|р10|р11|р12|р13|р14|р15|еаикс|есикс|едикс|ебикс|есипи|ебипи|есиай|едиай|р8д|р9д|р10д|р11д|р12д|р13д|р14д|р15д|аикс|сикс|дикс|бикс|эсп|бипи|эс|ди|р8в|р9в|р10в|р11в|р12в|р13в|р14в|р15в|ал|кл|дл|бл|спл|бпл|сил|дил|р8б|р9б|р10б|р11б|р12б|р13б|р14б|р15б|аш|чш|дш|бш)\\b"
},
{
"name": "variable.language.register.simd.x86asm",
"match": "\\b(?i)(xmm(?:[0-9]|1[0-5])|ymm(?:[0-9]|[12][0-9]|3[01])|zmm(?:[0-9]|[12][0-9]|3[01]))\\b"
},
{
"name": "variable.language.register.mask.x86asm",
"match": "\\b(?i)k[0-7]\\b"
},
{
"name": "variable.language.register.tile.x86asm",
"match": "\\b(?i)tmm[0-7]\\b"
},
{
"name": "variable.language.register.x86asm",
"match": "\\b(?i)(rax|rbx|rcx|rdx|rsi|rdi|rbp|rsp|r8|r9|r10|r11|r12|r13|r14|r15|eax|ebx|ecx|edx|esi|edi|ebp|esp|ax|bx|cx|dx|si|di|bp|sp|al|bl|cl|dl|spl|bpl|sil|dil|ah|bh|ch|dh|eip|rip|eflags|rflags|cr[0-4]|dr[0-7]|tr[3-6]|cs|ds|ss|es|fs|gs)\\b"
}
]
},
"constants": {
"patterns": [
{
"name": "constant.numeric.hex.x86asm",
"match": "\\b(0x[0-9A-Fa-f]+)\\b"
},
{
"name": "constant.numeric.decimal.x86asm",
"match": "\\b([0-9]+)\\b"
}
]
},
"strings": {
"patterns": [
{
"name": "string.quoted.double.x86asm",
"begin": "\"",
"end": "\"",
"patterns": [
{
"name": "constant.character.escape.x86asm",
"match": "\\\\."
}
]
},
{
"name": "string.quoted.single.x86asm",
"match": "'([^'\\\\]|\\\\.)*'"
},
{
"name": "string.quoted.single.x86asm",
"begin": "'",
"end": "'",
"patterns": [
{
"name": "constant.character.escape.x86asm",
"match": "\\\\."
}
]
}
]
},
"memory_operands": {
"patterns": [
{
"name": "support.type.memory.size.x86asm",
"match": "\\b(BYTE|WORD|DWORD|QWORD|XMMWORD|YMMWORD|ZMMWORD)\\s+PTR\\b"
},
{
"name": "support.type.memory.size.x86asm",
"match": "\\b(TBYTE|TWORD|DQWORD|OWORD|FWORD)\\b"
},
{
"name": "support.type.memory.size.x86asm",
"match": "\\b(byte|word|dword|qword|xmmword|ymmword|zmmword|tbyte|tword|dqword|oword|fword)\\b"
},
{
"name": "punctuation.definition.bracket.square.begin.x86asm",
"match": "\\[",
"push": [
{
"name": "punctuation.definition.bracket.square.end.x86asm",
"match": "\\]",
"pop": true
},
{ "include": "#registers" },
{ "include": "#operators" },
{ "include": "#constants" },
{
"name": "entity.name.memory_operand.inside_brackets.x86asm",
"match": "[^\\]]+"
}
]
}
]
},
"operators": {
"patterns": [
{
"name": "keyword.operator.arithmetic.x86asm",
"match": "[+\\-*/%]"
},
{
"name": "keyword.operator.logical.x86asm",
"match": "[&|^~]"
},
{
"name": "keyword.operator.comparison.x86asm",
"match": "[<>=!]"
},
{
"name": "punctuation.separator.comma.x86asm",
"match": ","
}
]
},
"symbols": {
"patterns": [
{
"name": "entity.name.function.x86asm",
"match": "\\b([a-zA-Z_][a-zA-Z0-9_]*|__[a-zA-Z0-9_]+)\\b"
},
{
"name": "entity.name.label.x86asm",
"match": "\\b(L[a-zA-Z0-9_]+|FLAT:[a-zA-Z_][a-zA-Z0-9_]*)\\b"
}
]
},
"structure": {
"patterns": [
{
"name": "entity.name.structure.x86asm",
"match": "\\bSTRUC\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b"
},
{
"name": "variable.parameter.structure_member.x86asm",
"match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\s+OFFSET\\s*\\b"
},
{
"name": "constant.numeric.size.x86asm",
"match": "\\b([0-9]+)\\s*:\\s*([0-9]+)\\b"
}
]
},
"directive_definitions": {
"patterns": [
{
"name": "keyword.control.directive.def.x86asm",
"begin": "\\.def\\s+",
"end": ";",
"patterns": [
{
"name": "entity.name.function.x86asm",
"match": "([a-zA-Z_][a-zA-Z0-9_]*)"
},
{
"name": "keyword.control.directive.scl.x86asm",
"match": "\\.scl\\s+([0-9]+)"
},
{
"name": "keyword.control.directive.type.x86asm",
"match": "\\.type\\s+([0-9]+)"
},
{
"name": "keyword.control.directive.endef.x86asm",
"match": "\\.endef"
}
]
}
]
},
"macros": {
"patterns": [
{
"name": "keyword.control.macro.x86asm",
"match": "\\b(macro|endm)\\b"
},
{
"name": "entity.name.macro.x86asm",
"match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\s+macro\\b"
}
]
}
},
"scopeName": "source.x86asm"
}