2012-10-28 32 views
0

这行在下面的代码中做了什么?大会,这条线做什么?

0x0804840c <+3>: mov 0x8(%ebp),%edx 

我知道MOV%×,%Y移动值章%X%到Y,但8从未被设置为任何栈偏移,所以我不知道什么是被移到%EDX。我真的很陌生,我完全迷失了方向。

(IA32 Assembly) 

    0x08048409 <+0>: push %ebp 

    0x0804840a <+1>: mov %esp,%ebp 

    0x0804840c <+3>: mov 0x8(%ebp),%edx 

    0x0804840f <+6>: mov %edx,%eax 

    0x08048411 <+8>: shl $0x4,%eax 

    0x08048414 <+11>: sub %edx,%eax 

    0x08048416 <+13>: pop %ebp 

    0x08048417 <+14>: ret 
+1

[函数的第一个栈参数](http://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames)是什么被复制。 – DCoder

回答

3

这是32-bit x86 ELF ABI,模样,所以在8(%ebp)堆栈槽可以容纳一个参数1到这个功能,由呼叫者放在那里。

整体功能计算(x << 4) - x

+0

想了一下上下文,谢谢! – Mappan