assembly - 什么是 JKZD 和 JKNZD?
问题描述
通过 Zydis ( https://github.com/zyantific/zydis/blob/57be5b1d1b9dd99830b89caac928add64ad5d072/include/Zydis/Generated/EnumMnemonic.h ) 助记符我发现了这些:
ZYDIS_MNEMONIC_JKNZD,
ZYDIS_MNEMONIC_JKZD,
我在其他任何地方都找不到这些助记符;它们代表什么指令?
这些指令执行什么操作?
Z
并且NZ
可能分别表示零和非零,并且J
可能代表跳跃,但是K
和D
?
编辑:我找到了这个旧的英特尔文档,但它没有任何意义:
它指出(第 75 页)JKZD 被编码为 VEX.NDS.128.0F.W0 84 id。
解决方案
您已经通过 Intel Knight's Corner 链接回答了您自己的问题。KNC 有自己的版本,后来成为 AVX-512,具有不兼容的机器代码编码。
正如英特尔手册中所述,KNC 有类似jrcxz
但用于掩码寄存器(KNC 和 AVX-512 调用k0..k7
)的指令,可让您在向量比较到掩码结果的一条指令中进行比较和分支。JKZD - 如果掩码为零,则跳近。它有 2 种形式,jkzd k1, rel32
并且jkzd k1, rel8
这些不是标准指令,也不会出现在英特尔的主流手册(包括 AVX-512)中。ktest k1,k1
在 AVX-512 中,您使用或设置常规 FLAGS在掩码寄存器值上进行kortest k1,k1
分支,然后使用常规分支条件。(展开以获得 2 个向量比较结果,您可以使用 2 个单独的寄存器在其中任何一个非零的情况下进行分支。)kortest k1,k2
推荐阅读
- android-jetpack-compose - 有没有办法在 Jetpack Compose Navigation 中使用斜杠(“/”)传递字符串参数?
- authentication - 我的 python 发布请求在我的登录机器人中不起作用
- colors - 使用单一颜色的条形图
- python-3.x - 连接错误:尝试失败,因为连接方在一段时间后没有正确响应。下面是代码,也找到附件
- sql - SQL:合并表中列的相似值并为其分配标识符
- machine-learning - 是否有类型的预测模型可以有效地处理部分特征集以进行预测?
- embedded-linux - 无法从 Yocto 构建加载 cryptodev-module
- firebase - 如何通过 uid 从实例 user_type 获取数据(Firebase 颤振)
- java - 使用 @QuarkusTest、模拟和 javax.enterprise.inject.Instance 进行 Quarkus 测试
- python - 如何在云虚拟机中使用额外的库运行 python?