gpt4 book ai didi

assembly - x86 操作码编码中的方向/符号扩展位

转载 作者:行者123 更新时间:2023-12-02 19:09:03 26 4
gpt4 key购买 nike

在 x86 指令集中,操作码索引 1 处的位可以是指定目标操作数和源操作数的方向位,也可以是符号扩展位。

例如对于 add

  • 00/r ADD r/m8, r802/r ADD r8, r/m8
    该位区分相同助记符的 r/m, regreg, r/m
  • 81/0 id ADD r/m32, imm3283/0 ib ADD r/m32, imm8
    完整(位 1 清除)与符号扩展立即数(位 1 设置)

我想知道确定这属于哪种情况的最简单的逻辑方法是什么。除了检查指令操作码并比较它们以找出它是什么(对于指令的符号扩展或方向位变体)之外,还有其他方法可以检查吗?还有一些指令忽略该位,但由于它被设置为 0,所以它并不重要。

编辑:事实证明,对于写错误(这就是我的代码的目的),reg->r/m 始终是这种情况,因为 r/m->reg 指令永远不会触发写错误。但如果其他人遇到类似的问题,任何信息仍然会很好。

最佳答案

[评论已成为答案]。

您显然需要一个针对指令字节流的 bool 公式。我不知道如何轻松定义该公式; x86 的指令集非常困惑。我希望关键技巧是在由​​前缀字节确定的表中查找操作码字节。如果您正在编写某种反汇编程序,我希望您已经拥有这样的表。

关于assembly - x86 操作码编码中的方向/符号扩展位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6922562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com