When performing division on ARM, this is the code snippet that I encountered.
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]
In the original program, I store the value
10 to a variable, divide it by
3 and store it in the same variable.
[r11, #-8] in the above example has the value
0x83e4, r2 is loaded up as
0x55555556. My doubts are as follows :-
- Is this a common way of performing division without the
- What are the other ways you have encountered in which division is performed without using an instruction that performs division?