我在汇编中编写了一些代码,并将.asm文件放入NASM文件夹
执行以下命令:
nasm控制台中的nasm -f elf test.asm
和ld test.o -o test
但是当我尝试执行./test来运行代码时,
我收到错误'.' is not recognized as an internal or external command, operable program or batch file.
我访问过的所有要弄清楚如何运行汇编代码的网站都说我应该做./thingy.asm,但是显然不起作用,所以我不知道该怎么做!
如果它可以帮助我的操作系统是Windows 10,并且我的NASM版本是2.15.05
答案 0 :(得分:3)
'.' 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 80h
或int $0x80
(取决于所使用的汇编程序)的程序只能在Linux上运行!
(*)在Linux中,此文件类型名为“ shell脚本”,而不是“批处理文件”;但是,这主要是术语上的差异。