NASM一些特点

翻译部分NASM手册的内容

  • 区分大小写
    nasm是区分大小写的,调用foo,Foo和FOO代码片段是不同的.

  • 内存引用要用方括号[]
    在nasm中,任何取地址的内容的操作都要加方括号[ ],取变量的地址不用方括号.

  • 不支持混合符号
    不支持例如

    mov ax,table[bx]
    mov ax,es:[di]

    只支持一下形式

    mov ax,[table+bx]
    mov ax,[es:di]
  • nasm不存储变量类型
    例如

    var dw 0

    定义了一个字大小(word-size)的变量,当传给变量大小类型不确定的值时,例如

    mov var,2

    nasm只记住符号的起始地址,所以准确的应该这么写

    mov word [var],2

    而且nasm不支持 LODS, MOVS, STOS, SCAS, CMPS, INS, OUTS这些指令.
    但是支持LOADSB,MOVSW,SCASD这些确定操作数大小的指令

  • nasm没有ASSUME

  • nasm不支持内存模型
    nasm不支持16位的内存模型的指令
    编程者需要自己确定一些远地址跳转,需要代码内指明,需要使用RET指令的正确形式

  • 浮点(Floating-Point)区别
    nasm使用的浮点寄存器名称不同于masm
    masm中的ST(0),ST(1)…,在a8中被简单的称为0,1…
    nasm中是st0,st1….

  • 其他区别
    由于历史原因,nasm中关键字TWORD等同于masm中的TBYTE
    nasm申明未初始化空间的方式不同于masm.
    masn中可能用到

    stack db 64 dup(?)

    nasm中要用

    stack resb 64

    并且nasm将问号(?)当做变量名中的有效字符.

你可能感兴趣的:(NASM一些特点)