如何在NASM上运行这个汇编代码?

3
我有一个游戏源代码,但我无法在nasm上组装它,我不知道问题出在哪里。
这是makefile:
# Makefile for the nibbles game.

all: nibbles_asm nibbles_asm_start

# Rule for compiling C source
.c.o:
    gcc -Os -march=i686 -Wall -g -c $<

# Rule for compiling assembly source
.S.o:
    as -gstabs $^ -o $@



# ASM game
nibbles_asm: main.o nibbles.o helpers.o
    gcc -lcurses $^ -o -V $@

# ASM game
nibbles_asm_start: start.o nibbles.o helpers.o workaround.o
    gcc -lcurses -lc -nostdlib $^ -o $@

clean:
    rm -f *~
    rm -f *.o
    rm -f nibbles nibbles_asm

这是错误信息:
as   -o nibbles.o nibbles.s
gcc -lcurses main.o nibbles.o helpers.o -o -V nibbles_asm
gcc: nibbles_asm: No such file or directory
make: *** [nibbles_asm] Error 1

似乎由于"-gstabs $^ -o $@"的原因,没有构建nibbles_asm文件!我也在终端中手动输入了命令,但是出现了很多错误。我的朋友在他的电脑上运行了这个代码,所以代码没有任何问题。

2
严谨的说法:你不能在nasm上运行汇编代码。你需要在CPU上运行它。你可以使用nasm将其汇编。 - sehe
这个 -V 是什么意思? - Paul R
没有-V参数时,它会出现以下错误:main.o: In function main': /home/aida/Desktop/13/main.c:45: undefined reference to start_game',有人告诉我将其放在这里可以解决这个问题。 - Aida E
1
在“-o”后面应该是一个文件名。如果需要“-V”,请将其移动到其他地方,而不是在选项和选项值之间。 - wallyk
我把 -V 放在这里:gcc -V -lcurses $^ -o $@,但它没有构建 nibbles_asm,但至少可以构建 nibbles_asm_start,请帮忙为什么会这样?整个汇编代码没有汇编!:( - Aida E
这个错误是什么意思?gcc: error trying to exec 'i686-linux-gnu-gcc--lcurses': execvp: No such file or directory - Aida E
2个回答

2

nibbles.Snibbles.o 没有任何依赖关系。同时,helpers.oworkaround.o 也没有相应的源文件关系。添加这些关系后,它应该可以工作。


实际上这些关系是存在的,$^ 表示 main.o nibbles.o helpers.o,而 $@ = nibbles_asm。 - Aida E
nibbles_asm 似乎是可执行文件。请注意这是 Linux。 - wallyk
我将 -gstabs $^ -o $@ 更改为 -gstabs main.o nibbles.o helpers.o -o nibbles_asm,但仍然出现相同的错误! - Aida E

0

你的gcc命令中有一个错误的-V(作为-o的参数)在错误的位置。请将其删除或放在开头。

你的第二个错误“trying to exec 'i686-linux-gnu-gcc--lcurses': No such file”意味着你在gcc和-lcurses之间缺少一个空格。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接