什么与cmovl操作码中的内容进行比较?

时间:2009-08-12 18:03:44

标签: assembly compare

在程序集操作码cmovl中,有什么比较? 例如:     EAX:00000002     EBX:00000001

cmovl eax,ebx

结果如何?哪一个需要少,所以可以移动?

谢谢!

4 个答案:

答案 0 :(得分:15)

cmov不进行比较,它使用先前比较的结​​果 - 如果为真,则执行mov。 cmovl表示“如果先前的比较导致”小于“,则执行移动。

例如:

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

答案 1 :(得分: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 :(得分:2)

如果flags寄存器具有以下内容,则

cmovl将执行移动:SF!=OF

这些标志将被设置为某些先前操作的结果(通常,但不一定是某种比较)。

cmovl指令不执行自己的比较。

答案 3 :(得分:1)

在AT&amp; T程序集中,等效代码为:

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

如果%ebx中的值大于%eax%eax中保存的值,则会将%ebx的值复制到cmp 1}}来电。

使用您的示例值,结果是条件移动不会将值从%ebx复制到%eax,因为0x02显然大于0x01