您的位置:首页 > 其它

NASM一些特点

2016-01-24 17:01 225 查看
翻译部分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将问号(?)当做变量名中的有效字符.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: