我正在完成一个小项目(感谢 Tinkernut),用 Assembly 制作一个小型操作系统。我从头开始制作它,当我完成主文件后,我想到在操作系统中添加一些程序。所以我 制作了一个edit.asm文件(注意:空格是代码的一部分):
; ------------------------------------------------------------------
; RhalexOS Text Editor
; ------------------------------------------------------------------
BITS 16
%INCLUDE 'rhalexdev.inc'
ORG 32768
(其他所有内容都已删除,因为它与手头的问题无关)
但是当我这样做时(我确实安装了 NASM): nasm edit.asm -o edit.bin
我明白了: edit.bin.7:无法打开包含文件“rhalexdev.inc”
我已经被困在这里一个小时了。请帮助我。
天啊。截图确实暴露了问题。问题是您没有在与
rhalexdev.inc
相同的目录中进行编译。
您需要在尝试使用
c:\Documents and Settings\Administrator\Desktop\OS Making\programs\
进行编译之前更改为 nasm edit.asm -o edit.bin
目录,或者在尝试使用 -i
进行编译时需要提供 c:\Program Files\nasm
包含路径。 -i
解决方案的问题是您必须quote或escape包含路径名来处理目录名称中的空格。
我要做的是在您的
c:\Documents and Settings\your_account\My Documents\nasm
(或您选择的任何名称)下创建一个目录。然后将c:\Documents and Settings\Administrator\Desktop\OS Making\programs\
中的所有源文件复制到c:\Documents and Settings\your_account\My Documents\nasm
。然后在 c:\Documents and Settings\your_account\My Documents\nasm
中发出 nasm edit.asm -o edit.bin
命令。
我不建议在
Program Files
或 Administrator\Desktop
目录中进行编译。你可以,只是不是我推荐的。
如果您想构建
c:\Program Files\nasm
,那么您将需要尝试以下操作:
nasm edit.asm -o edit.bin -i'c:\Documents and Settings\Administrator\Desktop\OS Making\programs\'
如上面引用的结尾
\
,或转义空格:
nasm edit.asm -o edit.bin -ic:\Documents\ and\ Settings\Administrator\Desktop\OS\ Making\programs\
我怀疑这会解决你的问题。
我正在使用 NASM 2.07 版并遇到了同样的问题。就像我尝试了 -i 选项数百万次一样,我仍然遇到包含文件未找到错误。我的包含文件路径是正确的,我仔细检查了。
不@David C. Rankin。它不只是像C;它也像C。它与 C 类似。
问题是 NASM 在解析相对包含路径时执行以下操作...
const char *rel_fpath = parseIncludeDirective();
const char *include_path = nextIncludedPath();
char *full_fpath = newString( strlen(rel_fpath) + strlen(include_path) + 1 );
sprintf(full_path,"%s%s",include_path,rel_fpath);
正如您在第 4 行所看到的,它们只是连接两个路径,而不添加目录分隔符。这意味着...
c:\Documents and Settings\Administrator\Desktop\OS Making\programs\
和
rhalexdev.inc
成为
c:\Documents and Settings\Administrator\Desktop\OS Making\programsrhalexdev.inc