我正在尝试用书"Programming from the ground up"来学习装配。本书仅涉及32位指令。有没有办法在64位Ubuntu系统上运行示例代码?我无法理解GNU汇编器手册页上的内容,但我听说-m32
标志应该这样做。但这不是一个公认的选择。
如何让本书中的示例轻松实现?
答案 0 :(得分:15)
当汇编器和链接器是x86_64版本时,产生i386(32位)输出的选项是
as --32
ld -m elf_i386
您不必使用as
和ld
,因为您正在使用汇编代码。可以使用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