我正在尝试通过书籍"从零开始编程"学习汇编语言。该书仅涵盖32位指令。是否有方法在64位Ubuntu系统上运行示例代码?我无法理解GNU汇编器手册中的内容,但听说
如何轻松使书中的示例代码工作?
-m32
标志应该可以做到。但它不是一个被识别的选项。如何轻松使书中的示例代码工作?
-m32
标志应该可以做到。但它不是一个被识别的选项。当您的汇编器和链接器是x86_64版本时,生成i386(32位)输出的选项为
as --32
ld -m elf_i386
你不必仅因为在处理汇编代码就使用 as
和 ld
。可以使用 gcc
,这种情况下你需要使用 -m32
。
gcc -m32 -nostdlib myprog.s -o myprog
从man页面中获取:
Target i386 options:
[--32|--n32|--64] [-n]
[-march=CPU[+EXTENSION...]] [-mtune=CPU]
我不确定是否有效,可以尝试使用--32
或--n32
。
(-m32
似乎是对应的gcc标志。)
在64位PC上创建32位可执行文件需要“警告”链接器即将到来的32位elf文件:
$ 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