差异点说明
1. nasm是区分大小写的;
2. nasm中访问内存需要使用[]将内存地址括起来;
例如:
bar equ 2
mov rax, bar
mov rax, [bar] ;这个才是存储地址中内容的操作
3. nasm不存储类型信息,所以也不能使用MOVS这样没有表明大小的命令,而只能使用MOVSW这样的命令;
另外往内存中存放数据也需要注意:
如果写成这样:
var equ 2
mov [var], 1
会报错:
需要写成如下的形式:
var equ 2
mov word [var], 1
4. nasm中没有ASSUME伪指令;
5. nasm没有SMALL、COMPACT这样的内存模型;
6. nasm引用浮点寄存器的方式与masm不同;
7. 声明数据块的方式不同:
stack db 64 dup (?) ; masm
stack resb 64 ; nasm
nasm不支持dup,且?是一个可用的变量名。