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

385 lines
15 KiB
JSON
Raw Normal View History

2024-10-13 02:06:05 +03:00
{
2024-10-13 06:29:35 +03:00
"$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" },
2024-10-13 06:29:35 +03:00
{ "include": "#labels" },
{ "include": "#sections" },
2025-07-04 05:48:01 +03:00
{ "include": "#memory_operands" },
{ "include": "#operators" },
2024-10-13 06:29:35 +03:00
{ "include": "#symbols" },
{ "include": "#functions" },
2024-10-13 06:55:03 +03:00
{ "include": "#structure" },
{ "include": "#macros" }
2024-10-13 06:29:35 +03:00
],
"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"
},
2024-10-13 06:29:35 +03:00
{
"name": "keyword.control.directive.x86asm",
2024-10-13 07:34:06 +03:00
"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"
2024-10-13 06:55:03 +03:00
},
{
"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",
2024-10-13 07:12:28 +03:00
"match": "\\bextern\\b"
2024-10-13 06:55:03 +03:00
},
{
"name": "keyword.control.directive.global.x86asm",
2024-10-13 07:12:28 +03:00
"match": "\\bglobal\\b"
2024-10-13 06:55:03 +03:00
},
{
"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"
2024-10-13 07:12:28 +03:00
},
{
"name": "keyword.control.directive.default.x86asm",
"match": "\\bdefault\\b"
},
{
"name": "keyword.control.directive.rel.x86asm",
"match": "\\brel\\b"
2024-10-13 06:29:35 +03:00
}
]
},
"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"
}
]
},
2024-10-13 06:29:35 +03:00
"labels": {
"patterns": [
{
"name": "entity.name.function.label.x86asm",
2025-07-04 05:48:01 +03:00
"match": "^\\s*\\.[a-zA-Z_][a-zA-Z0-9_]*:"
},
2024-10-13 06:29:35 +03:00
{
"name": "entity.name.function.label.x86asm",
2025-07-04 05:48:01 +03:00
"match": "^\\s*[a-zA-Z_][a-zA-Z0-9_]*:"
2024-10-13 06:29:35 +03:00
},
{
"name": "entity.name.tag.label.x86asm",
2025-07-04 05:48:01 +03:00
"match": "^\\s*L[a-zA-Z0-9_]+:"
2024-10-13 06:29:35 +03:00
}
]
},
"sections": {
"patterns": [
{
"name": "keyword.control.section.квс",
"match": "\\.(текст|данные|бнд)\\b"
},
2024-10-13 06:29:35 +03:00
{
"name": "keyword.control.section.x86asm",
2024-10-13 07:34:06 +03:00
"match": "\\.(section .(text|data|bss|tbss|tcomm))\\b"
},
{
"name": "keyword.control.section.x86asm",
"match": "\\.(text|data|bss|tbss|tcomm|rodata)\\b"
2024-10-13 06:29:35 +03:00
}
]
},
"instructions": {
"patterns": [
{
"name": "keyword.control.instruction.квс",
"match": "\\b(переместить_имм|переместить|загрузить|сохранить|загрузить_байт_из_памяти|сохранить_байт|загрузить_адрес|переместить_сулями|переместить_со_знаком|загрузить_байт|сравнить_с|сравнить|сравнить_байт|проверить|прибавить|прибавить_непосредственно|прибавить_байт|вычесть|вычесть_непосредственно|вычесть_байт|увеличить|уменьшить|умножить|умножить_знаковое|разделить|разделить_знаковое|и|или|исключающее_или|инвертировать|отрицать|переход|короткий_переход|переход_если_равно|переход_если_неравно|переход_если_меньше|переход_если_больше|переход_если_меньше_или_равно|переход_если_больше_или_равно|переход_если_перенос|переход_если_нет_переноса|переход_если_ноль|переход_если_неоль|короткий_переход_если_равноороткий_переход_если_неравноороткий_переход_если_меньшеороткий_переход_если_большеороткий_переход_если_меньше_или_равноороткий_переход_если_больше_или_равноороткий_переход_если_переносороткий_переход_если_нет_переносаороткий_переход_если_ноль|короткий_переход_если_неоль|вызвать|вернуться|втолкнуть|вытолкнуть|втолкнуть_непосредственно|втолкнуть_байт|сдвиг_влево|сдвиг_вправо|сдвиг_арифметический_вправоращать_влеворащать_вправо|цикл|обменять|вызов_системы|прервать|войти_в_систему|остановить|нет_операции|отладка|переместить_байт|переместить_слово|сравнить_байты|сканировать_байт|установить_перенос|сбросить_перенос|установить_направление|сбросить_направление|втолкнуть_флаги|вытолкнуть_флаги|ввод_байта|вывод_байта|идентифицировать_процессор|прочитать_счётчик)\\b"
},
2024-10-13 06:29:35 +03:00
{
"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"
2024-10-13 06:29:35 +03:00
}
]
},
"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"
},
2024-10-13 06:29:35 +03:00
{
"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"
2024-10-13 06:29:35 +03:00
}
]
},
"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": "\\\\."
}
]
},
2025-07-04 05:48:01 +03:00
{
"name": "string.quoted.single.x86asm",
"match": "'([^'\\\\]|\\\\.)*'"
},
{
"name": "string.quoted.single.x86asm",
"begin": "'",
"end": "'",
"patterns": [
{
"name": "constant.character.escape.x86asm",
"match": "\\\\."
}
]
2024-10-13 06:29:35 +03:00
}
]
},
"memory_operands": {
"patterns": [
{
2025-07-04 05:48:01 +03:00
"name": "support.type.memory.size.x86asm",
2024-10-13 06:29:35 +03:00
"match": "\\b(BYTE|WORD|DWORD|QWORD|XMMWORD|YMMWORD|ZMMWORD)\\s+PTR\\b"
},
{
2025-07-04 05:48:01 +03:00
"name": "support.type.memory.size.x86asm",
2024-10-13 06:29:35 +03:00
"match": "\\b(TBYTE|TWORD|DQWORD|OWORD|FWORD)\\b"
},
{
2025-07-04 05:48:01 +03:00
"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": ","
2024-10-13 06:29:35 +03:00
}
]
},
"symbols": {
"patterns": [
{
"name": "entity.name.function.x86asm",
2024-10-13 06:55:03 +03:00
"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"
2024-10-13 06:29:35 +03:00
}
]
2024-10-13 02:06:05 +03:00
},
2024-10-13 06:29:35 +03:00
"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",
2024-10-13 06:55:03 +03:00
"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"
2024-10-13 06:29:35 +03:00
}
]
}
},
"scopeName": "source.x86asm"
}