汇编Vim语法高亮

36

9
图片不见了。你能看看能否挽救信息吗?如果你仍然拥有这些图片,请将它们上传到SE自己的imgur账户,以防再次发生此类情况。 - rene
如果您恢复图像,那将非常好。 - Tacet
4个回答

59

这可能能让你入门。这更像是你在找什么吗?

我只是快速搜索了一下 - 看起来有几种不同类型的汇编语法高亮内置。你用的是哪个?

从 :help syntax 复制粘贴

Currently these syntax
files are included:
    asm     GNU assembly (the default)
    asm68k      Motorola 680x0 assembly
    asmh8300    Hitachi H-8300 version of GNU assembly
    ia64        Intel Itanium 64
 fasm Flat assemlby http://flatassembler.net
    masm        Microsoft assembly (probably works for any 80x86)
    nasm        Netwide assembly
    tasm        Turbo Assembly (with opcodes 80x86 up to Pentium, and
            MMX)
    pic     PIC assembly (currently for PIC16F84)

The most flexible is to add a line in your assembly file containing:
    :asmsyntax=nasm
Replace "nasm" with the name of the real assembly syntax.  This line must be
one of the first five lines in the file.

这个额外的 syntax script 来自vim.org

看起来你的截图正在使用默认的asm文件类型。尝试一下

:set ft=nasm

你应该会看到一些颜色变化,就像这些截图一样。

ft=nasm

根据您上面的截图,我对fasm vim语法进行了一些快速修改,并将其称为gasm。 可以在这里的pastebin上找到它。

将其复制并粘贴到您的个人.vim / syntax或vimfiles / syntax目录中,并将其命名为gasm.vim 然后在您的汇编文件中:set ft = gasm

此vim脚本依赖于注释的形式为 %注释 包括空格。 您可以在脚本的第116行中查看此内容(如果希望更改,则可以更改)。

请注意:不要复制行号。


如果您想自己找到提到的 :help syntax 摘录,它大约在第821行(使用 :set number)。 - spicy.dll

29
我开始从头编写完整的GNU as语法。
语法文件可从vim.org获取:X86 GNU as 语法 ,也可以直接在GitHub上获取:X86 GNU as 语法
除了基本指令外,它还能识别以下扩展的Intel/AMD指令:
  • X86通用指令集(8086-686)
  • Katmai流式SIMD指令(SSE - a.k.a. KNI、XMM、MMX2)
  • 在Deschutes中引入但对SSE支持必不可少的指令
  • XSAVE组(AVX和扩展状态)
  • 通用内存操作
  • Katmai中引入的新MMX指令
  • AMD增强型3DNow!(Athlon)指令
  • Willamette SSE2缓存指令
  • Willamette MMX指令(SSE2 SIMD整数指令)
  • Willamette流式SIMD指令(SSE2)
  • Prescott新指令(SSE3)
  • VMX指令
  • 扩展页面表VMX指令
  • Tejas新指令(SSSE3)
  • AMD SSE4A
  • Barcelona中的新指令
  • Penryn新指令(SSE4.1)
  • Nehalem新指令(SSE4.2)
  • AMD SSE5指令
  • Intel SMX
  • Geode(Cyrix)3DNow!添加
  • Intel AES指令
  • Intel AVX AES指令
  • Intel AVX指令
  • Intel无进位乘法指令(CLMUL)
  • Intel AVX无进位乘法指令(CLMUL)
  • Intel融合乘加指令(FMA)
  • VIA(Centaur)安全指令
  • AMD XOP,FMA4和CVT16指令(SSE5)
  • 提示NOP指令的系统名称
  • 以下是示例图片:

    alt text


    1
    O_o 喜欢那些颜色!介意分享一下它们是什么吗? - Cole Tobin
    2
    该方案被称为“lettuce”:http://www.vim.org/scripts/script.php?script_id=1975 - Shirkrin
    我必须更新截图 - 现在的颜色是“base16-bright”(https://github.com/chriskempson/base16-vim.git) - Shirkrin
    唉,如果当时我够聪明去谷歌一下就好了……几年前这样做可以省去我很多麻烦。不管怎么说,我为Sublime Text写了一个插件,并将其移植到了vim中: (https://github.com/calculuswhiz/vim-GAS-x86_64-highlighter)。我对它进行了相当广泛的测试,认为它是一个不错的选择。 - General Grievance
    我曾经走过另一条路,学会了讨厌Sublime的语法引擎^^ - Shirkrin

    4
    将以下这行代码放到你的 .vimrc 文件中,每次打开一个 .asm 文件时都会自动使用 intel 语法:
    ```set syntax=intel```
    autocmd BufNew,BufRead *.asm set ft=nasm
    

    3
    对于 .S / .s GNU 汇编文件,nasm 的语法高亮是否真的好用呢?由于它们使用不同的注释字符。 - Peter Cordes
    我认为你关于 .S 的看法是正确的,因为据我所知它会调用 GNU 预处理器,因此适用于 gcc。 你也对 .s 有正确的理解,因为它是通过调用 gcc -S 输出的格式,但在我的情况下,我会保留它以便从 Make 对于简单程序的隐式规则中受益,因为 Make 似乎无法自动从 .asm 文件生成 .o - cassepipe
    1
    Make内置的.s文件规则会在其上运行gcc,如果它们是用NASM语法编写的,则无法正常工作。GNU汇编器使用完全不同的指令(并默认为AT&T语法)。 - Peter Cordes
    @PeterCordes 你说得对,但在我的情况下,我可以轻松地使用Make和AS = nasm以及ASFLAGS = -f elf64,它运行良好。你似乎比我更了解,请随意编辑我的答案。我添加此答案的原因是因为这是我希望能够快速摆脱这个问题的简单/懒惰的永久性解决方案。特别是因为ALE linter对我的英特尔语法非常不满意。您是否建议更好/更常规的方法?我全听着。 - cassepipe
    1
    如果你必须编写一个Makefile,那么最好使用模式规则来从.asm文件生成.o文件。当我在处理汇编语言时,通常是为了测试某个单独的文件程序,所以我只需运行我自己编写的脚本asm-link foo.asm包含在此答案中)。不需要费心去编写Makefile。(也不需要破坏vim设置如何处理正常的.s / .S文件,这些文件确实具有Unix汇编内容。)因此,我只需删除*.s行,保留.asm行即可。 - Peter Cordes

    3
    如果Vim/Nvim不能检测到特定的文件类型,可以通过在文件本身中添加一个实际的宏命令来告诉它文件类型,而不是每次打开文件时都运行:set ft=nasm命令。
    要实现这一点,请找出文件类型的注释语法,并在文件末尾添加像这样的一行代码:(例如对于NASM)
    ; vim:ft=nasm
    

    这张图片展示了语法高亮的效果,以及添加该行代码后文件的外观。

    enter image description here


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接