2013-08-25 54 views
9

我正在尝试通过本书"Programming from the ground up"了解有关程序集的知识。本书仅涵盖32位指令。有没有办法在64位Ubuntu系统上运行示例代码?我无法理解GNU汇编程序手册页上的内容,但我听到-m32标志应该这样做。但这不是一个公认的选择。在64位系统(Ubuntu)上编译32位程序集

我该如何获得书上的示例以轻松工作?

+0

您能给这本书提供参考吗?或者显示一些样品? –

+1

链接现在给出。第一个程序是我试图运行的程序。 – huggie

+0

我认为最好的方法是在VirtualBox中安装32位Ubuntu。还有其他选项(请参阅https://help.ubuntu.com/community/32bit_and_64bit),但这非常困难。 –

回答

13

当你的汇编器和连接器是x86_64的版本中,选择生产的i386(32位)输出是

as --32 
ld -m elf_i386 

你不”只需要使用汇编代码就可以使用asld。可以使用gcc,在这种情况下,您可以使用-m32

gcc -m32 -nostdlib myprog.s -o myprog 
+0

太棒了!谢谢你的提示。 – huggie

2

从作为手册页:

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

我不知道,如果它的工作原理,只是尝试--32--n32

-m32似乎GE相应的GCC标志。)

+0

手册页中的'--n32'似乎是'--x32'的拼写错误。对于本书中的旧代码,你需要'--32'。 '--x32'用于使用x86_64功能的新代码,但需要32位指针。当使用'as --32'时,你可能还需要'-m elf_i386'作为'ld'命令。 –

+0

@ WumpusQ.Wumbley太棒了!我会检查你的答案,如果你发布一个。 :) 请注意,这是今天学习大会的推荐方式吗?我知道这本书有点旧,但看起来很不错。任何与本书一样好的64位替代资源将会有所帮助。 :) – huggie

0

创建64位PC上的32位可执行文件需要你 “警告” 的链接,一个32位的ELF文件来了:

$ NASM -f精灵-g - ˚F刺eat.asm

$ LD -o吃eat.o -melf_i386

这就是melf_i386指令的作用:它告诉LD的eat.o文件是ELF32链接的目标文件。 NASM的调用与您在32位PC上使用的相同。

谢谢@Jeff Duntemann