这取决于您使用的输出格式。如果您不使用 指定输出格式-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 32
orBITS 64
指示。”
然后,正如NASM 手册第 6.1 节所述:“在大多数情况下,您不需要BITS
显式使用。设计用于 32 位或 64 位操作系统的、aout
、coff
、elf
和macho
object格式,默认情况下,所有这些都会导致 NASM 分别选择 32 位或 64 位模式win32
win64
。”
因此,这一切都取决于使用的输出格式,除非BITS
明确定义。