我尝试用NASM 0.98.39编译这个源代码(已经精简到最小):
common foo 2:near
mov word [bx], foo
dummy:
出乎意料的是,我收到错误消息:
$ nasm-0.98.39 -O9 -f obj -o tt.obj tt.nasm
tt.nasm:1: error: symbol `foo' redefined
新版本的NASM(例如2.13.02)成功。
有没有办法让它与NASM 0.98.39一起工作?
请注意,对于生产项目,升级NASM不是一个选项,因为较新的版本在某些极端情况下会生成不同的机器码。
请注意,将优化标志从-O9
更改为-O0
会使优化成功,但这不是生产项目的选项。
2条答案
按热度按时间qnakjoqk1#
有没有办法让它与NASM 0.98.39一起工作?
不,没有。当然,你可以,而且肯定是一个相当快的解决方案,升级
nasm
和strict
),或db
表示法转储期望的机器代码。是的,我很乐意有个变通办法。
OMF是一种相当简单的数据格式。你可以在一个小时内阅读所有必要的文档,并在一天内编写一个补丁程序。然后你可以在
nasm
源代码中使用extern
来代替common
,你的补丁程序会解决这个问题。slwdgvem2#
这是另一种解决方法:拆分源文件,并链接两个.obj文件:
源文件1(
extern
s +所有代码和数据):源文件2(仅
common
s):