哪条 x86 指令有一个 10 字节的立即数?

Which x86 instruction has a 10-byte immediate?

Intel® 64 and IA-32 Software Developer's Manual, Volume 2A, Section 3.1.1.1 提到符号 ct 表示操作码后的 10 字节值。但是,我找不到任何用它注释的说明。我是不是遗漏了一些东西,或者没有采用 10 字节立即值的指令?

据我所知,没有这样的说明。

没有采用浮点立即数的指令,尤其是 x87 10 字节 long double,因此它绝对不是 TBYTE FP 操作数。

32 位有 jmp ptr16:32call,绝对 直接 远跳转带有 6 字节直接目标(cp).但是 x86-64 没有 calljmp ptr16:64 的编码。 (只有从内存加载 10 字节 seg:offset 的内存间接内存)。

@Harold 说 64 位模式下的 EA 和 9A 操作码(直接 jmp/call)错误是非法指令,即使它们在不可访问页面之前 7 个字节,而不是尝试读取一个10 字节立即数访问冲突故障)


@Matteo 注意到常规立即数使用 ib / iw / id / io。 (例如,mov r64, imm64 REX.W + B8 + rd io。)Intel 的 moffs 形式的 MOV 手册只列出了操作码,没有列出 8 字节立即绝对地址格式。

总之 cp 是一个 6 字节的 seg:ptr32 对,用于 jmp/call 编码。 cd 是一个 4 字节的 seg:ptr16。 x86 没有绝对的 直接 近跳转,所以我们看不到 co 是否会用于此。

似乎有人将 ct 添加到手册中,他们忘记了 jmp ptr16:64 不存在,或者以防万一他们想在说明之外描述类似的内容格式。 IDK 如果它在英特尔手册的其他部分中用于描述内存中的数据,但我不知道有 10 个字节的立即数据的指令。

最多为8个,为mov r64, imm64movabs [mem], al/ax/eax/rax(或加载形式)。许多指令也可以有一个 imm32 和一个 disp32,但这是两个不同的值。