Assembly NASM是否有默认的目标处理器?

Assembly NASM是否有默认的目标处理器?,assembly,nasm,processor,Assembly,Nasm,Processor,使用NASM组装的代码是否可以指定我们的目标处理器 例如,假设我只想以8086为目标,因此使用此指令应该是无效的: mov eax, cr0 因为8086中没有eax/cr0 或者NASM是为“x86系列”工作的,然后由程序员来确保代码是为正确的处理器编写的,并且是在支持使用指令的处理器上运行的 另外,如果一条指令在一个处理器中受支持,而在另一个处理器中不受支持,那该怎么办呢?我想,只要我们讨论的是同一个处理器系列,这种情况就不会发生,但如果在某个时候真的出现了这种情况呢?NASM有支持这一点

使用NASM组装的代码是否可以指定我们的目标处理器

例如,假设我只想以8086为目标,因此使用此指令应该是无效的:

mov eax, cr0
因为8086中没有eax/
cr0

或者NASM是为“x86系列”工作的,然后由程序员来确保代码是为正确的处理器编写的,并且是在支持使用指令的处理器上运行的

另外,如果一条指令在一个处理器中受支持,而在另一个处理器中不受支持,那该怎么办呢?我想,只要我们讨论的是同一个处理器系列,这种情况就不会发生,但如果在某个时候真的出现了这种情况呢?NASM有支持这一点的功能吗


我做了一些关于这一切的搜索,但找不到任何直接回答这个问题的东西。抱歉,如果这些问题听起来很愚蠢/基本。

您可以这样设置位数:

[BITS 16]

[BITS 32]

[BITS 64]
除此之外,您不能使用目标处理器不支持的指令。例如,您可以在奔腾D上使用AVX指令;如果您这样做,您的程序将崩溃

编辑:
事实上,我错了。检查Paul R的答案。

您可以使用
CPU
指令。从:


我之前在这一页,但我想我一定错过了这一页。非常感谢你指出这一点!!
The CPU directive restricts assembly to those instructions which are
available on the specified CPU.

Options are:

CPU 8086 Assemble only 8086 instruction set
CPU 186 Assemble instructions up to the 80186 instruction set
CPU 286 Assemble instructions up to the 286 instruction set
CPU 386 Assemble instructions up to the 386 instruction set
CPU 486 486 instruction set
CPU 586 Pentium instruction set
CPU PENTIUM Same as 586
CPU 686 P6 instruction set
CPU PPRO Same as 686
CPU P2 Same as 686
CPU P3 Pentium III (Katmai) instruction sets
CPU KATMAI Same as P3
CPU P4 Pentium 4 (Willamette) instruction set
CPU WILLAMETTE Same as P4
CPU PRESCOTT Prescott instruction set
CPU X64 x86-64 (x64/AMD64/Intel 64) instruction set
CPU IA64 IA64 CPU (in x86 mode) instruction set