私は4行のサンプル全体をリストアップするべきではありませんが(これは宿題の問題ですから)、これをどのように読んで翻訳するのか混乱します。私はこれまで理解してどのようなC.x86-64 Cコードにアセンブル "cmovge"
cmovge %edi, %eax
は、命令の結果が> =である場合の条件付き移動であるということです。関数%edi
の最初のパラメータと整数レジスタ%eax
(前のアセンブリコード行の他のパラメータ値%esi
が割り当てられています)を比較しています。しかし、私はその結果を理解していません。
私の問題は、最適化されたコードを解釈することです。スタックを操作するのではなく、Cでこれを書く方法がわかりません(少なくともgcc
スイッチで、コンパイル時に同じ結果を生成するために使用することもできます)。
cmovge
命令がCコードに変換される可能性のある小さな例を教えてください。独自のコード行として意味をなさない場合は、何かを自由に作ってください。
これは仮想化されたLinuxオペレーティングシステム(CentOS 7)によるx86-64アセンブリです。私はおそらくここにあなたの全体のソリューションを与えている
あなたがinsnの参照マニュアルを読んだ:HTMLはここに抽出します。http://www.felixcloutier .com/x86/CMOVcc.html。 [the x86 tag wiki]の他のリンク(http://stackoverflow.com/tags/x86/info)。 –