assembly (程序集NASM说“无法打开包含文件'include.inc'")

pkwftd7m  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(150)

我正在完成一个小项目,我想到了(感谢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'
我被困在这里一个小时了。请帮帮我。

gpfsuwkq

gpfsuwkq1#

哦,我的天。截图确实暴露了问题。问题是你没有和rhalexdev.inc在同一个目录下编译。
在尝试使用nasm edit.asm -o edit.bin编译之前,您需要更改到c:\Documents and Settings\Administrator\Desktop\OS Making\programs\目录,或者在尝试使用c:\Program Files\nasm编译时,您需要提供-i包含路径。-i解决方案的问题是,您必须使用引号转义包含路径名来处理目录名中的空格。
我要做的是在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 FilesAdministrator\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\


我想这会解决你的问题。

rqcrx0a6

rqcrx0a62#

请使用-I includepath
如果您使用的是旧的NASM版本,请在includepath的结尾处包含/\分隔符。
我正在使用NASM 2.07版,遇到了同样的问题。就像我尝试了数百万次-i选项,我仍然得到包含文件未找到错误。我的包含文件路径是正确的,我仔细检查。
不@大卫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


如果在...\programs\的末尾有一个尾随的\,那么即使在这个旧的NASM版本中它也可以工作。新的NASM版本不需要这个,它们之间会用一个目录分隔符连接字符串。

相关问题