{ "$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" }