在汇编操作码 cmovl 中,比较了什么?例如:EAX:00000002 EBX:00000001
cmovl eax,ebx
结果是什么?哪一个需要更少才能移动?
谢谢!
cmov 不进行比较,它使用先前比较的结果 - 如果为真,它将执行 mov。cmovl 的意思是“如果之前的比较结果为“小于”,则执行移动。
例如:
cmp ecx, 5
cmovl eax, ebx ; eax = ebx if ecx < 5
它之前应该有另一条适当设置标志的指令,例如cmp
.
cmp ebx, ecx ; compare ebx to ecx and set flags.
cmovl ebx, eax ; if (ebx < ecx (comparison based on flags)) ebx = eax
cmovl
如果标志寄存器具有以下内容,将执行移动:SF!=OF
这些标志将被设置为某些先前操作的结果(通常但不一定是某种比较)。
该cmovl
指令不执行自己的比较。
在 AT&T 汇编中,等效代码为:
cmp %ebx, %eax
cmovl %ebx, %eax
如果保存的值大于调用时保存的值,它将复制%ebx
to的值。%eax
%eax
%ebx
cmp
使用您的示例值,结果将是条件移动不会将值从 复制%ebx
到%eax
,因为0x02
显然大于0x01
。