Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何基于cmpss输出进行跳转(浮点比较)?_Assembly_X86 - Fatal编程技术网

Assembly 如何基于cmpss输出进行跳转(浮点比较)?

Assembly 如何基于cmpss输出进行跳转(浮点比较)?,assembly,x86,Assembly,X86,根据这一点,我可以通过执行以下操作来比较xmm1和xmm2是否相等: cmpss xmm2, xmm1, 0 但是,似乎没有设置零标志。相反,结果存储在xmm2中。如果像je或jz这样的指令依赖于零标志,我如何根据它们是否相等来进行跳转?cmpss和它的朋友更倾向于给你可以进行无分支计算的掩码,您可以将其提取到GPR,然后进行测试,等等,但这一切都有点冗长和不必要 如果您想进行分支,ucomiss(或comiss,具体取决于您想对NaNs做什么)更适合。也许是这样: ucomiss xmm2,

根据这一点,我可以通过执行以下操作来比较xmm1和xmm2是否相等:

cmpss xmm2, xmm1, 0

但是,似乎没有设置零标志。相反,结果存储在xmm2中。如果像
je
jz
这样的指令依赖于零标志,我如何根据它们是否相等来进行跳转?

cmpss
和它的朋友更倾向于给你可以进行无分支计算的掩码,您可以将其提取到GPR,然后进行测试,等等,但这一切都有点冗长和不必要

如果您想进行分支,
ucomiss
(或
comiss
,具体取决于您想对NaNs做什么)更适合。也许是这样:

ucomiss xmm2, xmm1
jp unordered
jz equal

看起来intel忘记在SIMD指令中添加受影响的
标志
部分。这通常用于整数指令*嗯,似乎他们在任何时候都随机添加了它……AMD似乎做得更好,他们的手册明确指出,
rFLAGS不受影响。