在程序集操作码cmovl中,有什么比较? 例如: EAX:00000002 EBX:00000001
cmovl eax,ebx
结果如何?哪一个需要少,所以可以移动?
谢谢!
答案 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)
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
。