1

私が言うなら:

lea (%eax,%eax,2), %edx

私はそれが本質的に意味することを教えられました:

edx = eax + eax * 2

このフォーマットはどのように機能しますか?

そして、これは2番目の質問につながると思います。私がこのようなものを持っている場合:

add -0x4(%esi, %ebx, 4), %eax

第1オペランドが第2オペランドに追加され、第2オペランドに格納されることは理解していますが、ここでも、第1オペランドの表記がわかりません。別の例は、私が持っていた場合です:

cmp %eax, (%esi, %ebx, 4)

...、これは、%eaxの値が次の値と比較されていることを意味しますか?

esi + ebx * 4

...?このようなものをたくさん検索してみましたが、意味のある答えを見つけるために正しい単語を使用していなかったと思うので、ここに投稿することにしました。

4

1 に答える 1

4

を使用して値を計算することleaは、この操作が高速であるか(アドレス計算を実行する回路によって計算されたため)、コードサイズが小さいことを思い出させます。たった1つの操作で、たった1つのステップで加算と乗算を実行できることに注意してください。現在のプロセッサは、代わりにそれを実行する方が高速である可能性がありますがaddmul投機的実行、算術ユニットの複製などを考えると明確ではありません。

次の手順については、括弧が表示されている場合は常に、そのアドレスを逆参照していることを意味します。

add -0x4(%esi, %ebx, 4), %eax

%eaxで指定されたアドレスにあるものを入れる-4 + esi + ebx*4ことを意味します。つまり、メモリ内のその位置にアクセスし、そこに格納されているものをに割り当てることを意味し%eaxます。

于 2012-04-22T00:14:03.777 に答える