2009-08-12 10 views
4

アセンブリオペコードcmovlでは、何が比較されますか?たとえば : EAX:00000002 EBX:00000001cmovlオペコードの内容と比較すると何ですか?

cmovl eax,ebx 

結果は何ですか?どれを動かすことができるように少なくする必要がありますか?

ありがとうございました!

答えて

12

cmovは比較しません。以前の比較の結果を使用します。これが真の場合、movを実行します。希望SF!=OF

それらのフラグ:次のフラグが登録した場合の移動を行います

cmp ecx, 5 
cmovl eax, ebx ; eax = ebx if ecx < 5 
+0

ありがとうございました!非常に便利でクリアです! – Ryan

4

フラグを適切に設定する別の命令(たとえば、cmp)が先行している必要があります。

cmp ebx, ecx ; compare ebx to ecx and set flags. 
cmovl ebx, eax ; if (ebx < ecx (comparison based on flags)) ebx = eax 
2

cmovlがあります。cmovlが少ない 『より例えば

「前の比較がでた場合は移動を実行』を意味します前の操作の結果として設定されます(通常は必ずしもそうである必要はありません)。

cmovl命令は、それ自身の比較を実行しません。

0
同等のコードは次のようになり

で& TアセンブリAT:%eaxに保持された値は、時%ebxに保持された値より大きかった場合、%eax%ebxの値をコピーする

cmp %ebx, %eax 
cmovl %ebx, %eax 

cmp呼び出し。あなたの例の値で

、結果は0x02がはっきり0x01よりも大きくなるよう条件付き移動は、%ebxから%eaxに値をコピーしないことになります。

関連する問題