在64位系统上编译32位汇编(Ubuntu)

时间:2013-08-25 14:13:52

标签: assembly

我正在尝试用书"Programming from the ground up"来学习装配。本书仅涉及32位指令。有没有办法在64位Ubuntu系统上运行示例代码?我无法理解GNU汇编器手册页上的内容,但我听说-m32标志应该这样做。但这不是一个公认的选择。

如何让本书中的示例轻松实现?

3 个答案:

答案 0 :(得分:15)

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

as --32
ld -m elf_i386

您不必使用asld,因为您正在使用汇编代码。可以使用gcc,在这种情况下,您可以使用-m32

gcc -m32 -nostdlib myprog.s -o myprog

答案 1 :(得分:2)

来自手册页:

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

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

-m32似乎是相应的gcc标志。)

答案 2 :(得分:0)

在64位PC上创建32位可执行文件需要您"警告"一个32位精灵文件的链接器:

$ nasm -f elf -g -F stabs eat.asm

$ ld -o eat eat.o -melf_i386

那是melf_i386指令的作用:它告诉ld eat.o文件是一个elf32可链接对象文件。 NASM的调用与您在32位PC上使用的相同。

谢谢@Jeff Duntemann