在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. 我的疑问如下:-
- 这是在没有
div指令的情况下执行除法的常见方法吗? - 在不使用执行除法的指令的情况下执行除法的其他方法是什么?