【问题标题】:how to run this assembly code on nasm?如何在 nasm 上运行这个汇编代码?
【发布时间】:2012-01-04 13:29:52
【问题描述】:

我有一个游戏源代码,但我无法在 nasm 上组装它,我不明白问题出在哪里。

这是生成文件:

# 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 文件! 我也在终端自己输入了命令,但它给了我很多错误。我的朋友在他的电脑上运行这段代码,所以代码没有任何问题。

【问题讨论】:

  • 迂腐评论:你不能在 nasm 上运行程序集。你在 CPU 上运行它。你用 nasm 组装它
  • -V 到底是什么?
  • 没有 -V 它有这个错误:main.o: In function main': /home/aida/Desktop/13/main.c:45: undefined reference to start_game' 有人告诉我把它放在这里来解决这个问题
  • -o 之后应该是一个文件名。如果需要-V,请将其移至别处——而不是选项和选项值之间。
  • 我将 -V 移到了这里:gcc -V -lcurses $^ -o $@ 并且它没有构建 nibbles_asm 但至少它可以构建 nibbles_asm_start,请帮助为什么会这样?!整个汇编代码没有汇编! :(

标签: ubuntu assembly makefile x86 nasm


【解决方案1】:

nibbles.Snibbles.o 没有依赖关系。此外,helpers.oworkaround.o 没有关联的源文件关系。添加这些关系,它应该可以工作。

【讨论】:

  • 其实有这些关系,$^ 表示 main.o nibbles.o helpers.o 和 $@ = nibbles_asm
  • nibbles_asm 似乎是可执行文件。请注意,这是 Linux。
  • 我将 as -gstabs $^ -o $@ 更改为 as -gstabs main.o nibbles.o helpers.o -o nibbles_asm 并再次出现同样的错误!
【解决方案2】:

您的 gcc 命令中有一个杂散的 -V 位于错误的位置(作为 -o 的参数)。删除或放在开头。

您的第二个错误 trying to exec 'i686-linux-gnu-gcc--lcurses': No such file 表示您在 gcc 和 -lcurses 之间缺少一个空格。

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 2015-05-12
    • 2014-01-03
    • 2013-09-12
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多