【发布时间】:2018-06-14 09:26:09
【问题描述】:
我正在尝试为 x86_64 汇编一些汇编源代码,这些源代码用 Intel 语法编写,使用 64 位寄存器。我使用以下命令行标志:
yasm foo.asm -a x86 -m amd64
我不断收到如下错误:
warning: `rbp' is a register in 64-bit mode
foo.asm:23: error: undefined symbol `rbp' (first use)
所以,我在 stackoverflow 上看到了 similar question,以及网上的 numerous resources,表明可以通过指定“BITS”指令来解决此问题,具体如下:
BITS 64
问题是,我不清楚这甚至意味着什么。我不明白什么是“指令”。这似乎是您需要在汇编代码本身中指定的内容。但是在这种情况下,我不控制代码,所以我只是试图找到一个命令行标志来组装它。
有没有办法在我可以传递给 yasm 的命令行标志中指定 BITS 指令?
【问题讨论】:
-
bits 64只是说假设代码将以 64 位模式运行,对指令进行编码。 -
-m amd64根据manual。 -
@Jester
-m amd64控制目标文件格式,OP已经包含它。但是,我不明白为什么他们不能简单地将BITS 64和源添加到临时文件中。 -
@Jester :根据问题,他已经在使用
-m amd64。我不知道这是否是 OSDev 问题,但我认为原因是您没有指定-f选项,它默认为-fbin,默认情况下将假定bits 16 -
不知道我怎么错过了问题中的
-m amd64,我在-a x86停止阅读:D
标签: assembly 64-bit x86-64 yasm