代码之家  ›  专栏  ›  技术社区  ›  Trillian

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

  •  9
  • Trillian  · 技术社区  · 8 年前

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

    1 回复  |  直到 8 年前
        1
  •  6
  •   Peter Cordes    8 年前

    据我所知,没有这样的指示。

    没有接受浮点立即数的指令,特别是不接受x87 10字节的指令。 long double ,所以它绝对不是tbyte fp操作数。

    32位有 jmp ptr16:32 和 call ,绝对 直接的 具有6字节即时目标的远跳转( 内容提供商 )但是x86-64没有 呼叫 或 jmp ptr16:64 . (仅使用从内存加载的10字节seg:偏移量间接存储)。

    @Harold说,64位模式错误的EA和9A操作码(direct far jmp/call)是一条非法指令,即使它们在不可访问的页面之前有7个字节,而不是试图立即读取10个字节,即访问冲突导致的错误)


    @Matteo注意到常规即时使用 ib / iw / id / io . (例如, mov r64, imm64 REX.W + B8 + rd io .)英特尔的 moffs MOV的形式只列出操作码,而不是8字节立即绝对地址格式。

    无论如何 cp 是一个6字节的seg:ptr32对,用于jmp/调用编码。 cd 是4字节 seg:ptr16 . x86没有绝对 直接的 近距离跳跃,所以我们看不到 co 会用来做那个的。

    似乎 ct 只是被忘记了的人添加到手册中 JMP PTR16:64 不存在,或者他们曾经想要在指令格式之外描述类似的东西。IDK如果它在英特尔手册的其他部分的内存数据描述中被使用,但是没有我知道的指令有10字节的即时数据。

    最多是8,因为 MIV R64,IM64 或 movabs [mem], al/ax/eax/rax (或荷载形式)。还有许多指令可以有imm32和disp32,但这是两个单独的值。