【问题标题】:How does the x86 ROR instruction works?x86 ROR 指令是如何工作的?
【发布时间】:2012-04-06 19:19:23
【问题描述】:

我的EAX 寄存器包含xxxxxx9D 值,我有以下汇编代码:

C0C8 14 --> ROR AL,14

对我来说,这意味着EAX 的 32 位值的最后 8 位按位旋转 14 mod 8 = 6 个位置

0x9D = b1001 1101

会变成

b0111 0110 = 0x76

但是,OllyDbg 告诉我EAX = xxxxxxD9,这意味着 EAX 已按位旋转了 4 位!

我哪里错了?

【问题讨论】:

  • 这是十六进制的 14,十进制的 20。
  • 备案:以编译器友好的方式表达旋转的最佳实践,避免未定义的行为:stackoverflow.com/questions/776508/…。该答案的代码将使 gcc 和 clang 生成单个 ror 指令。

标签: assembly x86


【解决方案1】:

您正试图将 8 位寄存器旋转 20 个位置。这有点多,旋转 8 会产生相同的值。旋转 9 与旋转 1 相同。等等。因此,处理器将旋转 20 mod 8 = 4 个位置。

【讨论】:

  • 非常感谢。我的错误是什么?将 h14 = d20 与 d14 混淆......是的,20 mod 8 产生 4 我有时真是个傻瓜!
【解决方案2】:

发布你的完整代码,用这个:

mov     al,$9d
ror     al,14

我按预期得到了 76。

编辑如果你旋转 14 美元的位置,你会得到 d9。

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2012-05-27
    • 2017-12-19
    相关资源
    最近更新 更多