哪个条件标志
CMP
指令集以及结果如何相等,是否相等?例如:CMP eax, 0
(true)CMP eax, 0
(false)#1 楼
此外,使用CMP指令,目标操作数不变。只是标志。让我举例说明。假设
EAX = 00000005
和EBX = 00000005
。如果我们执行此算术运算:CMP EAX, EBX
发生了什么,实际上是这样:
EAX - EBX
----> 00000005 - 00000005
由于结果为
0
,但是我们没有在CMP指令中更改目标操作数,因此将零标志设置为1
(因为它是真的)。因此,正如我们所看到的,根据之前的算术运算结果,可以相应地设置标志:
#2 楼
CMP
指令在内部执行SUB
并相应地设置标志。因此,由
SUB
设置的所有标志也由CMP
设置。 ,SF
,ZF
和AF
已设置。此信息来自处理器的英特尔手册(https://software.intel.com/zh-cn/articles/intel-sdm) 。
评论
您可以从DuckDuckGo(或Google(或Bing))的第一个结果中获取该信息。你尝试过吗?是的,我做到了。 (谷歌)。发现了很多内容,哪些内容可以阅读,但CMP设置的内容却不完全。
CMP基于它执行的SUB的中间结果来设置所有标志。在这里阅读:godevtool.com/GoasmHelp/usflags.htm
(CMP EAX,EDX;如果eax = edx,则设置零标志。)因此,只有零标志,并且如果为true,则为0。false。
首先阅读cmp文档:比较是通过从第一个操作数中减去第二个操作数,然后以与SUB指令相同的方式设置状态标志来进行的。但这不是检查寄存器是否为零的好方法