给出以下代码:
L1 db "word", 0
mov al, [L1]
mov eax, L1
Run Code Online (Sandbox Code Playgroud)
括号([L1])代表什么?
int*_*jay 47
[L1]表示地址L1处的存储器内容.在mov al, [L1]此处运行后,al寄存器将接收地址L1处的字节(字母"w").
leg*_*s2k 36
这里的所有答案都很好,但是我看到没有人告诉我这是一个严格的规则 - 如果是括号,那么取消引用,除非它是lea指令.
lea是上述规则的例外.说我们已经
mov eax, [ebp - 4]
Run Code Online (Sandbox Code Playgroud)
值的值ebp减去4,括号表示结果值作为地址,并存储在该地址的值eax.但是,在lea这种情况下,括号不代表:
lea eax, [ebp - 4]
Run Code Online (Sandbox Code Playgroud)
将值ebp减去4,并将结果值存储在中eax.该指令只计算地址并将计算出的值存储在目标寄存器中.有关详细信息,请参阅此帖子.
Ear*_*rlz 30
简单地说就是将内存放在标签L1标记的地址上.
如果你喜欢C,那就这样想:就像[L1]是一样*L1
括号意味着取消引用地址.例如
mov eax, [1234]
Run Code Online (Sandbox Code Playgroud)
表示将地址1234的内容移动到EAX.所以:
1234 00001
Run Code Online (Sandbox Code Playgroud)
EAX将包含00001.