12

我正在尝试通过“从头开始编程”一书来学习组装。本书仅涵盖 32 位指令。有没有办法在 64 位 Ubuntu 系统上运行示例代码?我无法理解 GNU 汇编器手册页上的内容,但我听说-m32标志应该这样做。但这不是公认的选择。

如何让书中的示例轻松工作?

4

3 回答 3

22

当您的汇编器和链接器是 x86_64 版本时,产生 i386(32 位)输出的选项是

as --32
ld -m elf_i386

您不必使用as并且ld仅仅因为您正在使用汇编代码。gcc可以使用,在这种情况下,您将使用-m32.

gcc -m32 -nostdlib myprog.s -o myprog
于 2013-08-25T15:03:20.043 回答
3

从 as 手册页:

   Target i386 options:
      [--32|--n32|--64] [-n]
      [-march=CPU[+EXTENSION...]] [-mtune=CPU]

我不确定它是否有效,只需尝试--32--n32.

-m32似乎 ge 对应的 gcc 标志。)

于 2013-08-25T14:32:53.507 回答
0

在 64 位 PC 上创建 32 位可执行文件需要您“警告”链接器即将出现 32 位 elf 文件:

$ nasm -f elf -g -F 刺吃.asm

$ ld -o 吃eat.o -melf_i386

这就是 melf_i386 指令的作用:它告诉 ldeat.o 文件是一个 elf32 可链接目标文件。NASM 的调用与在 32 位 PC 上使用的相同。

谢谢@Jeff Duntemann

于 2017-03-07T07:07:13.190 回答