【发布时间】:2014-01-28 14:46:48
【问题描述】:
我正在尝试用汇编语言组装一个包含两个 asm 文件的小型初学者程序。我可以创建一个文件,但我想尝试调用另一个文件中的过程。
这是我的 Makefile :
NAME = formatter
SRCS = formatter.asm clearstring.asm
OBJS = $(SRCS:.asm=.o)`
NASM = nasm
NASMFLAGS = -f elf64 -F dwarf
LD = ld
RM = rm -f
all: $(NAME)
$(NAME): $(OBJS)
$(LD) $(OBJS) -o $(NAME)
#(1):
# formatter.o: formatter.asm
# $(NASM) -o formatter.o formatter.asm $(NASMFLAGS)
# clearstring.o: clearstring.asm
# $(NASM) -o clearstring.o clearstring.asm $(NASMFLAGS)
#(2):
$(OBJS): $(SRCS)
$(NASM) -o $(OBJS) $(SRCS) $(NASMFLAGS)
使用 cmets (1) 下的代码时,一切正常,但是当我使用紧凑代码 (2) 时,make 给了我:
nasm -o formatter.o clearstring.o formatter.asm clearstring.asm -f elf64 -F dwarf
nasm: error: more than one input file specified
nasm: error: more than one input file specified
type `nasm -h' for help
make: *** [formatter.o] Error 1
我知道组装步骤不对,但我做不到:
nasm -o formatter.o formatter.asm -f elf64 -F dwarf
nasm -o clearstring.o clearstring.asm -f elf64 -F dwarf
我希望我在这个网站上的第一个问题已经足够清楚了。
你能帮我么 ?
【问题讨论】:
-
我不明白这个问题。您注释为 (1) 的方法是正确的方法。您说使用时一切正常。那么使用它有什么问题呢?
-
另一种方法是将一个程序集文件
%include另一个。例如,对于纯汇编,我通常只有一个包含所有内容的“0index.asm”文件,因此我不需要费心制作(并检查文件是否更改,启动 Nasm 进程 N 次,并链接, 和..)。忘记这一切会更快更容易... :-) -
@MadScientist : 方法 (1) 确实有效,但如果我有多个文件要编译,那么编写和阅读可能会有点乏味。 Brendan:谢谢你,我用谷歌搜索了一下你的做法,这很有趣。我会试试的
-
啊哈!好吧,这不是你问的问题。如果您问“我如何避免为每个源文件一遍又一遍地重写相同的规则?”那么我们会给你一个像下面迈克尔这样的答案,这是正确的方法。
-
Brendan:这可行,但效率较低:每次更改任何
asm文件时,都必须重新组装所有asm文件。当然组装速度很快,所以可能不太明显。对于少量的asm文件,它甚至可能更快。但项目越大,你就越能感受到它。
标签: linux assembly makefile nasm