Assembly 什么与cmovl操作码中的内容相比较?
在汇编操作码cmovl中,比较了什么? 例如: EAX:00000002 EBX:00000001Assembly 什么与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,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:;
在大多数汇编语言中都以注释开头。