哪条 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:32
和 call
,绝对 直接 远跳转带有 6 字节直接目标(cp).但是 x86-64 没有 call
或 jmp 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, imm64
或movabs [mem], al/ax/eax/rax
(或加载形式)。许多指令也可以有一个 imm32 和一个 disp32,但这是两个不同的值。
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:32
和 call
,绝对 直接 远跳转带有 6 字节直接目标(cp).但是 x86-64 没有 call
或 jmp 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, imm64
或movabs [mem], al/ax/eax/rax
(或加载形式)。许多指令也可以有一个 imm32 和一个 disp32,但这是两个不同的值。