0

这行代码在下面的代码中做了什么?

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

我知道 mov %x, %y 将 reg 值 %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
4

1 回答 1

3

这是32 位 x86 ELF ABI,看起来像,所以堆栈槽8(%ebp)保存这个函数的参数 1,由调用者放在那里。

整体函数计算(x << 4) - x

于 2012-10-28T16:03:33.920 回答