NASM汇编语言中的程序是否跨操作系统

时间:2016-03-25 20:49:23

标签: assembly nasm

NASM是跨操作系统。我想知道这是否意味着NASM汇编语言中的程序也是跨操作系统,即独立于操作系统或特定于操作系统?例如,NASM的汇编语言中的程序是否可以由NASM在Linux和Windows上组装?感谢。

2 个答案:

答案 0 :(得分:3)

答案是肯定的,不是。完全有可能编写一个在Linux和Windows上运行的程序,但很可能它不会那么有用。

当然,您可以在两个平台上使用NASM编译任何有效的汇编代码,并以它们识别的格式打包它,但您必须没有任何特定于操作系统的代码才能正常运行。

例如,您可以编写一个计算1000个素数或合成声音的程序来播放Beethoven的第9个Symphony,但由于没有OS独立的方式向用户显示或将结果存储在任何地方,因此它是无用的。

你要遇到的第一件事就是I / O.没有独立于操作系统的方法,所以至少需要操作系统相关的库。而且不仅仅是任何库,因为平台之间的调用约定不同。

因此,即使您拥有完全相同的C库来执行I / O,您也必须创建一个库,该库可以单独调用汇编中的函数并将其转换为目标的调用约定。操作系统支持。

所以实际答案是:任何有意义的程序都将取决于操作系统。

答案 1 :(得分:1)

嗯,可执行文件的格式不同,所以你不可能在两者上运行单个二进制文件。但是你可以为不同的操作系统编写非常薄的包装程序,它们可以加载和运行二进制代码。如果您为包装器添加了合适的可调用例程,您还可以添加任何所需的IO等功能。或者,您可以将OS检测添加到已加载的二进制代码中,然后在不同的操作系统上执行不同的操作,但是您必须将每个操作系统的支持编码到二进制文件中,并且您仍然需要加载程序,因此这样做不太有用。 / p>

所以,同样的程序集将以本机和全速运行,没有任何"仿真技巧",如果你只是提供一种方法来运行它。