我对汇编编程很新。我在Windows 7(64位)平台上使用NASM 2.11.05来运行一些示例代码。当我尝试从汇编代码调用标准C函数时出现问题。这是我的汇编来源:
global main
extern puts
section .text
main:
push message
call puts
ret
message:
db "Hola, mundo", 0
当我使用NASM编译时,我使用以下命令行:nasm -fwin32 file.asm 它产生file.obj。现在,当我尝试将其与ld或gcc链接时,我不断收到错误。我试过的一些事情:
gcc -m32 -nostartfiles file.obj(给出错误,i386:输入文件的x86-64架构与i386输出不兼容)。
ld file.obj(给出对puts的错误未定义引用)。
任何人都可以指导我如何解决这个问题?
答案 0 :(得分:1)
最后,我的ASM文件顶部的一行确定了它。这就是那条线。
[BITS 32]
但是,输出文件仍然会崩溃:任何可以解释的人都欢迎!
答案 1 :(得分:0)
您可以以不同的方式编译,例如:
.asm
文件的对象:
nasm -f elf file.asm
ld -m elf_i386 file.o -o file
gcc -m32 -o file file.o
创建的链接对象文件
./file
运行