mov命令与没有括号?

Adi*_* Ml 0 variables x86 assembly nasm

我不明白这两个陈述之间有什么区别

mov [var] , 10  
Run Code Online (Sandbox Code Playgroud)

mov var,10     
Run Code Online (Sandbox Code Playgroud)

在组装?

Mic*_*ael 6

对于这样的变量:

var: db 0
Run Code Online (Sandbox Code Playgroud)

mov var,10NASM不允许使用该指令,因为在NASM语法中这样编写var(没有方括号)意味着您希望将地址var作为立即数.并且没有变体mov需要immediate, immediate操作数对.

添加方括号使其成为对内存中地址的引用.所以mov [var], 10意味着将值10存储在var.实际上你还必须指定要存储的值的大小,例如mov byte [var], 10.否则,NASM不知道您是否要存储字节,字或双字,因为立即数10可以用任何这些大小表示.

请注意,在MASM/TASM语法中mov var, 10,mov [var], 10在这种情况下意味着相同的事情(它们都具有与mov [var], 10NASM sytax中相同的含义).