【问题标题】:Does NASM have a default target processor?NASM 是否有默认目标处理器?
【发布时间】:2014-02-05 14:57:45
【问题描述】:

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

例如,假设我只想定位 8086,因此使用此指令应该是无效的:

mov eax, cr0

因为eax/cr0不在8086中。

或者 NASM 是否适用于“x86 系列”,然后由程序员确保代码是为正确的处理器编写并在支持所用指令的处理器上运行?

另外,如果一个处理器支持一条指令,而另一个处理器不支持一条指令怎么办。我想只要我们谈论同一个处理器系列,这不会发生,但如果这种情况确实在某个时候出现怎么办? NASM 是否具有支持该功能的功能?

我已经对所有这些进行了一些搜索,但找不到任何可以直接回答此问题的内容。抱歉,如果这些问题听起来很愚蠢/初级。

【问题讨论】:

    标签: assembly nasm processor


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 我之前在这个页面上,但我想我一定错过了这个。非常感谢您指出这一点!
    【解决方案2】:

    你可以这样设置位数:

    [BITS 16]
    
    [BITS 32]
    
    [BITS 64]
    

    除此之外,您不能使用目标处理器不支持的指令。例如,您可以在 Pentium D 上使用 AVX 指令;如果你这样做了,你的程序就会崩溃。

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

    【讨论】:

      猜你喜欢
      • 2019-02-19
      • 2018-03-19
      • 2016-06-02
      • 2019-01-18
      • 1970-01-01
      • 2012-01-21
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多