这取决于您使用的输出格式。如果您不使用 指定输出格式-f foo,则将使用默认输出格式,通常是bin,并且使用bin作为输出格式选择 16 位模式,除非BITS另有明确定义。
正如NASM 手册第 2.1.2 节中所说:“如果您不-f向 NASM 提供选项,它将为您自己选择一种输出文件格式。在 NASM 的分发版本中,默认值始终为bin;如果您”已经编译了您自己的 NASM 副本,您可以OF_DEFAULT在编译时重新定义并选择您想要的默认值。”
因此,假设您没有重新定义OF_DEFAULT,nasmbin默认用作输出格式。
然后,在 NASM 手册的第 7.1 节中,它说:“该bin格式不生成目标文件:它在输出文件中除了您编写的代码之外什么都不生成。MS-DOS 使用这种“纯二进制”文件:.COM可执行文件和.SYS设备驱动程序是纯二进制文件。纯二进制输出对于操作系统和引导加载程序开发也很有用。” ... "使用该bin格式将 NASM 默认设置为 16 位模式(请参阅第 6.1 节)。为了使用bin编写 32 位或 64 位代码,例如 OS 内核,您需要显式发出BITS 32orBITS 64指示。”
然后,正如NASM 手册第 6.1 节所述:“在大多数情况下,您不需要BITS显式使用。设计用于 32 位或 64 位操作系统的、aout、coff、elf和machoobject格式,默认情况下,所有这些都会导致 NASM 分别选择 32 位或 64 位模式win32win64。”
因此,这一切都取决于使用的输出格式,除非BITS明确定义。