12

割り当てのためにいくつかのx86コードをトレースしています.「cmpl」が正確に何をするのか、「jne」が満たされるかどうかをどのように予測するのか疑問に思っていました.

80484bf:    83 7d f0 07             cmpl   $0x7,-0x10(%ebp)
80484c3:    75 16                   jne    80484db
4

1 に答える 1

15

cmpl は $0x7 から -0x10(%ebp) を減算し、フラグを変更します: AF CF OF PF SF ZF .

  1. -0x10(%ebp) のメモリが即時の 0x7 に等しい場合、フラグZFが設定されます。これは EBP を下回っているため、EBP をフレーム ポインターとして使用する最適化されていないビルドの場合は、おそらくローカル変数です。
  2. jne 80484dbは、比較した 2 つの数値が異なる場合 (ZF=0)、 80484dbにジャンプすることを意味します。

要約すると、コードは次と同等です。

compare A to 7
jump to 0x80484db if they are different.
于 2013-03-08T08:04:34.367 に答える