13

在汇编操作码 cmovl 中,比较了什么?例如:EAX:00000002 EBX:00000001

cmovl eax,ebx

结果是什么?哪一个需要更少才能移动?

谢谢!

4

4 回答 4

21

cmov 不进行比较,它使用先前比较的结​​果 - 如果为真,它将执行 mov。cmovl 的意思是“如果之前的比较结果为“小于”,则执行移动。

例如:

cmp ecx, 5
cmovl eax, ebx ; eax = ebx if ecx < 5
于 2009-08-12T18:07:06.673 回答
4

它之前应该有另一条适当设置标志的指令,例如cmp.

cmp ebx, ecx   ; compare ebx to ecx and set flags.
cmovl ebx, eax ; if (ebx < ecx (comparison based on flags)) ebx = eax 
于 2009-08-12T18:06:09.377 回答
3

cmovl如果标志寄存器具有以下内容,将执行移动:SF!=OF

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

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

于 2009-08-12T18:10:45.497 回答
1

在 AT&T 汇编中,等效代码为:

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

如果保存的值大于调用时保存的值,它将复制%ebxto的值。%eax%eax%ebxcmp

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

于 2012-08-15T22:37:08.463 回答