Assembly 什么与cmovl操作码中的内容相比较?

Assembly 什么与cmovl操作码中的内容相比较?,assembly,compare,Assembly,Compare,在汇编操作码cmovl中,比较了什么? 例如: EAX:00000002 EBX:00000001 cmovl eax,ebx 结果如何?哪一个需要少一点才能移动 谢谢大家! 它前面应该有另一条适当设置标志的指令,如cmp cmp ebx, ecx ; compare ebx to ecx and set flags. cmovl ebx, eax ; if (ebx < ecx (comparison based on flags)) ebx = eax cmp-ebx,ecx

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

cmovl eax,ebx
结果如何?哪一个需要少一点才能移动


谢谢大家!

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

cmp ebx, ecx   ; compare ebx to ecx and set flags.
cmovl ebx, eax ; if (ebx < ecx (comparison based on flags)) ebx = eax 
cmp-ebx,ecx;比较ebx和ecx并设置标志。
cmovl-ebx,eax;如果(ebx
cmov不进行比较,它使用先前比较的结果-如果为真,它将执行mov。cmovl的意思是“如果之前的比较结果小于”,则执行移动”

例如:

cmp ecx, 5
cmovl eax, ebx ; eax = ebx if ecx < 5
cmp-ecx,5
cmovl eax,ebx;如果ecx<5,eax=ebx

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

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


cmovl指令本身不执行比较。

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

cmp   %ebx, %eax
cmovl %ebx, %eax
如果调用
cmp
%eax
中的值大于
%ebx
中的值,则会将
%ebx
的值复制到
%eax


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

对于初学者:注1:
cmovl
响应标志寄存器中的标志。特别是,如果
SF!=OF
,它将执行移动>注2:
在大多数汇编语言中都以注释开头。