Ton*_*ark 8 testing x86 cpu-registers
(ia32)例如,
test $eax, $eax
Run Code Online (Sandbox Code Playgroud)
你为什么要这么做?它呢$eax & $eax,对吧?这不应该总是设置标志寄存器说它们是相等的吗?
附录: 如果寄存器为零,那么测试将设置ZF(如下所述).那么测试(如上所述)主要用于判断寄存器是否为空?和ZF如果是这样的话?
Mic*_*urr 10
ZF如果寄存器为零,它将设置(零标志).这可能是它最常用的测试方法.它还会适当地设置其他标志,但对那些标志的使用可能要少得多.
另外,我应该提到它test并没有真正执行比较 - 它执行按位and操作(丢弃结果,除了标志).
为了执行操作数的比较,cmp将使用指令执行sub操作,丢弃除标志之外的结果.你是正确的
cmp $eax, $eax
Run Code Online (Sandbox Code Playgroud)
没有多大意义,因为每次都会根据零结果设置标志.