【问题标题】:Assembly with VIM - Automatic tabs + doing both commands at the same time使用 VIM 组装 - 自动选项卡 + 同时执行两个命令
【发布时间】:2021-04-17 23:46:51
【问题描述】:

我是 NASM 新手,尤其是在使用 vim 的 ubuntu64 中。

目前,当我用 vim 编写汇编代码时,它不识别标签并且不自动制表符,也许是因为它不应该这样做(它不是传统的)虽然如果它可以这样做我会很高兴也在这里..(就像 vim 上带有 python 的自动选项卡)

Vim assembly code

当我按下回车键时,它会回到行首,红色箭头指向的地方。

其次,当我需要“编译”(我不知道这里是否正确,也许是“汇编”)代码时,我需要同时编写代码:

nasm -f elf64 hello.asm

ld -s -o hello hello.o

有没有更短的方法?也许两者同时,一个简单的二合一命令?

【问题讨论】:

  • 你能简单地将两者放在一行上作为一个复合命令,比如nasm ... && ld ...吗?如果 Vim 使用 shell 运行命令,shell 将解析 &&

标签: ubuntu assembly vim nasm ld


【解决方案1】:

创建一个 shell 脚本:创建一个新的文本文件并将其命名为“assemble.sh”或任何您想要的名称,然后输入以下两行。

nasm -f elf64 "$1.asm"  &&
 ld -o "$1" "$1.o"              # only try ld if assembling succeeded

您可能希望添加其他选项以使 NASM 添加或多或少的调试信息,具体取决于您的调试方式。 ld -s 会剥离二进制文件,但您通常不希望将其用于调试。

然后您必须使用“chmod +x assemble.sh”使其可执行

那么你可以./assemble.sh hello。或者把它放在你的 ~/bin 目录中,它在你的 PATH 中。

【讨论】:

  • 我有一个名为asm-link 的脚本基本上可以做到这一点,支持-m32-d 等一些选项来反汇编输出。它将foo.asm 作为输入,因此制表符补全完全有效,并去除后缀以查找基本名称。这是我在Assembling 32-bit binaries on a 64-bit system (GNU toolchain) 上的回答的一部分,但可能更适合这个新的问答。
猜你喜欢
  • 2019-10-26
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
相关资源
最近更新 更多