2

組み立てを始めたばかりで、順調に進んでいますが、理解できないことが1つあります。条件付きジャンプはどのように機能しますか?

ここにアセンブリコードのサンプルがあります。

TEST EAX, EAX
FCLEX
JGE SHORT 004022B1

ある条件がそれ以上になると、004022B1にジャンプすることがわかります。
しかし、その状態は何であり、どこでチェックされますか?
条件はTESTEAX、EAXでなければならないと思います。しかし、私はそれが何をするのかわかりません。

条件付きジャンプがどのように機能し、条件がチェック/保存される場所を誰かが私に説明できますか?

4

1 に答える 1

5

条件付きジャンプ(およびその他のいくつかの命令)はフラグを使用します。これらのフラグは、(E / R)FLAGSレジスタのビットです。結果で更新せずtest a, bに、の結果に従ってフラグを設定します。通常のフラグは変更しません(もちろんFPUフラグも変更します)。and a, bafclex

jge符号フラグの値がオーバーフローフラグと等しいかどうかをテスト*します。test a, bオーバーフローフラグをゼロに設定し、符号フラグをの結果の符号ビットに設定しand a, bます。したがって、eaxが正の場合、ジャンプが実行されます。

*:「以上」のテストは行わないことに注意してください。cmpこの解釈は、 (およびその他のいくつかの命令)の後にフラグがチェックされるときに有効です。それは本当に旗を見るだけです。

于 2012-06-14T14:36:22.433 に答える