【发布时间】:2020-04-08 16:31:51
【问题描述】:
考虑以下示例:
mov al, [variable1]
这是有道理的,因为您将变量 1 的内容(从而解除对它的引用)保存在寄存器中。
现在考虑这个例子:
mov dword L6, 1
这是不正确的;正确的形式是
mov dword [L6], 1
如果我们将 1 移动到内存中,我应该告诉它存储在该地址而不是内容中。假设您要告诉某人去某个地方参加聚会,您会告诉他们聚会的地址,而不是那里的人。
那么,这是为什么呢?
【问题讨论】:
-
取消引用意味着您正在访问内容。那要么是读取它,要么是写入它。你不想写(改)地址,这是不可能的,你想写(改)内容。
-
x86 没有内存间接数据寻址。这是 0 和 1 级间接与符号地址之间的区别,而不是 1 与 2
-
如果我认为 mov 是 write 它更有意义。我可以将 mov 视为 write 而不是“moving”吗?
-
是的。
mov只是从源操作数复制到目标操作数。这就是为什么目的地必须指向内存或寄存器的原因。