是否有指定我们使用NASM组装的代码所针对的处理器?
例如,假设我想仅定位8086,因此使用此指令应无效:
mov eax, cr0
因为eax
/ cr0
在8086不存在。
或者NASM是否适用于“x86系列”,然后是程序员确保为正确的处理器编写代码并在支持使用指令的代码上运行?
此外,如果一个处理器支持一条指令而另一处理器不支持该指令。我想只要我们谈论相同的处理器系列就不会发生这种情况,但是如果这种情况确实出现了什么呢? NASM有功能支持吗?
我已经做了一些关于这一切的搜索,但找不到任何直接回答这个的东西。对不起,如果这些问题听起来很愚蠢/基本。
答案 0 :(得分:3)
您可以使用CPU
指令。来自fine manual:
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
答案 1 :(得分:0)
您可以像这样设置位数:
[BITS 16]
[BITS 32]
[BITS 64]
除此之外,您不能使用目标处理器不支持的说明。例如,您可以在Pentium D上使用AVX指令;如果你这样做,你的程序就会崩溃。
编辑: 其实,我错了。检查Paul R的答案。