'.'尝试 运行 汇编代码时无法识别?

'.' is not recognized when attempting to run assembly code?

我在汇编中做了一些代码,并将.asm文件放在NASM文件夹中

执行了以下命令: nasm 控制台中的 nasm -f elf test.asmld test.o -o test

但是当我尝试对 运行 代码进行 ./test 时, 我收到错误 '.' is not recognized as an internal or external command, operable program or batch file.

我访问过的所有网站都是为了弄清楚如何 运行 汇编代码说我应该这样做 ./thingy.asm 但这显然不起作用所以我不知道该怎么做!

如果有帮助我的 OS 是 Windows 10,我的 NASM 版本是 2.15.05

'.' is not recognized as an internal or external command

背景资料

原因是 Windows 与 Linux 或 Unix 的工作方式不同(很明显,您的教程描述了如何使用 Linux):

如果文件名以.exe结尾,Windows将该文件识别为应用程序。如果文件名以 .bat 结尾,Windows 会将文件识别为“批处理”文件。

在 Linux 或 Unix 下,这是完全不同的:应用程序或“批处理”(*) 文件可以有任何文件名;一个文件被“标记”了一个特殊的标志,告诉操作系统该文件可以被执行。如果设置了这个标志,操作系统使用文件内容(不是文件名的后缀)来区分可执行文件的类型(例如应用程序、“批处理”文件、Python程序...)。

命令行 ld test.o -o test 将生成一个名为 test 的文件,而不是 test.exe。在 Linux 下,这将是应用程序的有效文件名,在 Windows 下,文件名必须以 .exe 结尾,因此这不是有效的文件名。

如果您愿意,可以在 Linux 下自由命名“批处理”文件 test.exe 和应用程序 test.bat

在 Linux 下,命令 ./test 将在当前目录中启动一个名为 test 的应用程序; ./test.exe 将启动名为 test.exe.

的应用程序或“批处理”文件

在Windows下,执行名为test.exe的文件的命令将只是test,而不是./test.exe

关于您的问题

首先,您必须重命名输出文件:ld test.o -o test.exe

下一个问题是你的程序肯定不能在Windows:

上工作

至少 Windows 7(我不确定 Windows 10)将拒绝启动不使用任何 DLL 文件的应用程序;并且命令行 ld test.o -o test.exe 生成一个不使用任何 DLL 文件的应用程序。

我很确定你的汇编程序包含 int 指令或 syscall 指令。

直接调用这些指令是特定于操作系统的:

调用 int 0x80(或 int 80hint [=32=]x80 取决于所使用的汇编程序)的程序将仅在 Linux 上 运行!


(*) 这种文件类型被命名为“shell脚本”,而不是Linux中的“批处理文件”;但是,这主要是术语上的差异。