推动mov或lea堆叠

时间:2016-04-26 12:40:53

标签: assembly x86

我有两行代码。

leal   12(%ebp), %ecx
pushl   %ecx
call    func

movl   12(%ebp), %edx
leal    (%edx), %ecx
pushl   %ecx
call    func

我有一个C函数func(&argument)。第一行有效,另一行无效。谁能告诉我为什么?

1 个答案:

答案 0 :(得分:1)

因为ff d0 callq *%rax 41 ff 14 dc callq *(%r12,%rbx,8) 是移位和加法指令,但是lea(带有内存源操作数)是一个加载,所以第二个块做mov。显然,当func(argument)正确时,这并不起作用。

insn参考手册(标签wiki中的链接)记录了哪些说明。