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)
在组装?
对于这样的变量:
var: db 0
Run Code Online (Sandbox Code Playgroud)
mov var,10
NASM不允许使用该指令,因为在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], 10
NASM sytax中相同的含义).