【发布时间】:2018-07-14 11:22:45
【问题描述】:
我是组装新手,有一些非常基本的问题。
这四个命令有什么区别?
mov ebx, eax
mov [ebx], eax
mov ebx, [eax]
mov [ebx], [eax]
他们说括号的意思是“获取地址的值”。但是,那么,第一行真的有什么作用呢?它不会将eax的值移动到ebx中吗?如果是这样,那么括号的意义是什么?
【问题讨论】:
-
括号的重点是访问内存。你可以把它想象成C语言中的
*运算符。另外,最后一个是无效的。 -
但是第一个例子不是没有括号就访问内存吗?
-
@ineedahero:最后一行无效,因为没有办法从内存复制到内存。在
[ebx],[eax]中,ebx 和 eax 包含地址,即两者都在引用内存。而且你不能直接从内存复制到内存:处理器没有指令。 -
@RudyVelthuis:不太正确:指令集没有提供使用两个 显式 内存操作数对任何指令进行编码的方法。但是
movs、push [mem]和pop [mem]都将内存复制到内存,其中一个或两个操作数是隐式的。 x86 指令最多有一种 modrm + 可选的位移显式寻址模式。 这就是为什么mov不起作用但其他指令起作用的原因。 -
MASM 中括号的含义:stackoverflow.com/questions/25129743/…
标签: assembly memory x86 intel-syntax