什么是JKZD和JKNZD?

问题描述

通过Zydis(https://github.com/zyantific/zydis/blob/57be5b1d1b9dd99830b89caac928add64ad5d072/include/Zydis/Generated/EnumMnemonic.h)助记符,我发现了这些:

ZYDIS_MNEMONIC_JKNZD,ZYDIS_MNEMONIC_JKZD,

在其他任何地方都找不到这些助记符;它们代表什么指示?

这些说明会执行哪些操作?

ZNZ可能分别表示零和不为零,并且J可能表示跳跃,但是KD

编辑:我找到了这个旧的intel文档,但这没有任何意义:

http://www.cism.ucl.ac.be/Services/Formations/ICS/ics_2013.0.028/vtune_amplifier_xe/documentation/en/instructions/327364001EN.pdf

声明(第75页)JKZD被编码为VEX.NDS.128.0F.W0 84 id。

解决方法

您已经使用该Intel Knight's Corner链接回答了自己的问题。 KNC拥有自己的后来的AVX-512版本,具有不兼容的机器代码编码。

如该英特尔手册中所述,KNC的指令类似于jrcxz,但掩码寄存器(KNC和AVX-512称为k0..k7)使您可以在一个指令上进行比较和分支。向量比较掩码结果。 JKZD-如果mask为零,则跳近。它有两种形式,jkzd k1,rel32jkzd k1,rel8

这些不是标准说明,不会出现在Intel的主流手册(包括AVX-512)中。在AVX-512中,使用ktest k1,k1kortest k1,k1在掩码寄存器值上分支以设置常规标记,然后使用常规分支条件。 (通过展开以获得2个向量比较结果,您可以使用带有两个单独寄存器的kortest k1,k2将它们中的 设为非零)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...