琐事问题
17个字符,是VGF2P8AFFINEINVQB - 伽罗瓦场仿射变换逆,最长的x86指令助记符?有长度限制吗?
当然,目前可能是的,17 字节的
VGF2P8AFFINEINVQB
是英特尔文档中最长的助记符。
没有长度限制;汇编器只是软件,每个汇编器都有不同的解析器。如果您将此指令添加到具有某些硬编码标记长度限制的旧汇编器中,则可以编写一个备用名称。 CPU只关心机器码1.
确认它是否是英特尔当前最长文档的一种方法是检查指令数据库,例如 XED 附带的数据库。 https://uops.info/xml.html。这应该包含它们全部,除非有些是通过后缀构造的。
我通过目视扫描 https://www.felixcloutier.com/x86/ 的左侧栏看到的其他长指令包括
AESDECWIDE128KL
(15 个字节),但没有 V
VEX 形式,最多只能得到 16 个字节。但该页面不使用等宽字体,并且某些条目标题不是指令的全名(例如 vbroadcast
)。
VCMPUNORD_SPS
(13 个字节)。
VFMADDSUB132PD
和 VPMULTISHIFTQB
都是 14。VBROADCASTF32X8
是 15。
脚注 1:Intel 的手册并没有定义太多有关 asm 语法规则的内容,但确实列出了机器代码的规则。
机器代码的最大指令长度为 15 字节,这至少可以假设使用临时寄存器强制将复杂指令分解为多个指令,例如对于 LEA 或 mov-immediate。 (也许 APX 确实用于整数指令的 4 字节 EVEX 前缀,例如
lock add r31d, [fs: r30+rax*4 + 0x123456], 12345678
需要 ModRM+SIB + disp32 和 imm32,所以需要 10 个字节,加上 4 字节 EVEX 加上操作码。所以这是 15 个字节没有段或锁前缀。)