ARM 上的划分

逆向工程 手臂
2021-06-29 12:43:14

在ARM上进行除法时,这是我遇到的代码片段。

   0x83d8 <main+12>:    mov r3, #10
   0x83dc <main+16>:    str r3, [r11, #-8]
   0x83e0 <main+20>:    ldr r3, [r11, #-8]
=> 0x83e4 <main+24>:    ldr r2, [pc, #40]   ;; 0x8414 <main+72>
   0x83e8 <main+28>:    smull   r1, r2, r2, r3
   0x83ec <main+32>:    asr r3, r3, #31
   0x83f0 <main+36>:    rsb r3, r3, r2
   0x83f4 <main+40>:    str r3, [r11, #-8]

在原始程序中,我将值存储10到一个变量中,将其除以3并将其存储在同一个变量中。

[r11, #-8]在上面的例子中有值0xa之后0x83e4,r2 加载为0x55555556. 我的疑问如下:-

  1. 这是在没有div指令的情况下执行除法的常见方法吗?
  2. 在不使用执行除法的指令的情况下执行除法的其他方法是什么?
1个回答

优化编译器通常会使用上述方法来编译除以常数。

您可以在以下链接中阅读更多相关信息: