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ビットのx86ELFABIのように見えるので、スタックスロットは8(%ebp)この関数の引数1を保持し、呼び出し元によってそこに配置されます。

全体的な関数はを計算し(x << 4) - xます。

于 2012-10-28T16:03:33.920 に答える