【问题标题】:What does [--][--] mean in the Intel x86 Assembly docs?Intel x86 Assembly 文档中的 [--][--] 是什么意思?
【发布时间】:2021-01-29 06:04:42
【问题描述】:

搜索英特尔第 2A 卷文档仅发现 [--][--] 的 4 种用法,并且仅说出其含义的一句话:

[--][--] 命名法表示SIB 跟在ModR/M 字节之后。

SIB字节参考这里:



那么,这是什么意思?如何使用它,在它出现的表格中:

我开始了解如何使用此表来了解此表的左下角框,以及它与顶部列标题的关系,但尚未了解此表的其余部分。我想我可以弄清楚这个计算出的地址是如何工作的,但是[--][--] 是什么意思?你用寄存器填写--,所以它会像[eax][eax]?或者,我没有任何想法。请帮忙。

有哪些说明其用法的指令调用示例?

【问题讨论】:

    标签: assembly x86 machine-code opcode


    【解决方案1】:

    -- 是占位符/通配符。该表条目告诉您使用该 r/m 编码为任何索引寻址模式发送 SIB 信号。

    他们似乎使用了一种奇怪的 asm 级语法,其中 2 寄存器寻址模式看起来像 [edi][eax] 或其他什么,而不是更现代的标准 [edi+eax]。虽然我认为 MASM 确实允许[edi][eax]

    如果您的寻址模式与 [*][*] 模式匹配(即有 2 个寄存器),那么您使用该条目(从而表明存在一个 SIB 字节)。

    【讨论】:

    • 等他们也有[x+y] 的例子,有什么不同吗?所以你说[edi][eax][edi+eax]是一样的,但是他们有[BX+SI],那么他们为什么不直接写[*+*]或者类似的东西,或者[--+--]呢?我猜这是针对 32 位的,而 [BX+SI] 是针对 16 位的,但仍然如此。我想如果你说这是一种奇怪的 asm 语法,那就是答案。但是为什么这两种形式,我不知道。
    • @LancePollard:16 位寻址模式不同:从不是 SIB 字节,因此所有可能的编码都必须打包到 R/M 字段中的模式中。 Why don't x86 16-bit addressing modes have a scale factor, while the 32-bit version has it?。但是,就格式而言,[*+*] 可能有意义。如果我是一名技术作家并负责为英特尔创建此文档,我可能不会想出什么,但它确实有效。
    • 他们使用它的方式,意思很清楚:需要SIB。即使这包括 [eax*4] 之类的东西 - 编码缩放寄存器的唯一选择是使其成为索引(如果没有基数,则使用 disp32),这意味着 SIB 字节。
    猜你喜欢
    • 2014-02-28
    • 1970-01-01
    • 2014-02-23
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    相关资源
    最近更新 更多