Спойлер
Код: Выделить всё
uint32_t divu10(uint32_t val) { return val * (((1ULL << 35) + 5) / 10) >> 35; }
volatile uint32_t val = 4294967295;
for (uint32_t i = 100; i > 0; i--)
{
__BKPT();
volatile uint32_t res = divu10(val);
__NOP();
}
0x20002330 bkpt 0x0000
0x20002332 movs r5, #0
0x20002334 ldr r3, [sp, #84] ; 0x54
0x20002336 movs r4, r3
0x20002338 movs r2, r3
0x2000233a movs r3, r5
0x2000233c adds r2, r2, r4
0x2000233e adcs r3, r5
0x20002340 adds r2, r2, r4
0x20002342 adcs r3, r5
0x20002344 lsrs r1, r2, #28
0x20002346 mov r12, r1
0x20002348 mov r0, r12
0x2000234a lsls r1, r3, #4
0x2000234c orrs r1, r0
0x2000234e str r1, [sp, #52] ; 0x34
0x20002350 lsls r1, r2, #4
0x20002352 str r1, [sp, #48] ; 0x30
0x20002354 ldr r0, [sp, #48] ; 0x30
0x20002356 ldr r1, [sp, #52] ; 0x34
0x20002358 adds r2, r2, r0
0x2000235a adcs r3, r1
0x2000235c lsrs r1, r2, #24
0x2000235e mov r12, r1
0x20002360 mov r0, r12
0x20002362 lsls r1, r3, #8
0x20002364 orrs r1, r0
0x20002366 str r1, [sp, #60] ; 0x3c
0x20002368 lsls r1, r2, #8
0x2000236a str r1, [sp, #56] ; 0x38
0x2000236c ldr r0, [sp, #56] ; 0x38
0x2000236e ldr r1, [sp, #60] ; 0x3c
0x20002370 adds r2, r2, r0
0x20002372 adcs r3, r1
0x20002374 lsrs r1, r2, #16
0x20002376 mov r12, r1
0x20002378 mov r0, r12
0x2000237a lsls r1, r3, #16
0x2000237c orrs r1, r0
0x2000237e str r1, [sp, #68] ; 0x44
0x20002380 lsls r1, r2, #16
0x20002382 str r1, [sp, #64] ; 0x40
0x20002384 ldr r0, [sp, #64] ; 0x40
0x20002386 ldr r1, [sp, #68] ; 0x44
0x20002388 adds r2, r2, r0
0x2000238a adcs r3, r1
0x2000238c lsrs r1, r2, #30
0x2000238e mov r12, r1
0x20002390 lsls r1, r3, #2
0x20002392 str r1, [sp, #76] ; 0x4c
0x20002394 mov r1, r12
0x20002396 ldr r0, [sp, #76] ; 0x4c
0x20002398 lsls r3, r2, #2
0x2000239a orrs r0, r1
0x2000239c str r0, [sp, #76] ; 0x4c
0x2000239e str r3, [sp, #72] ; 0x48
0x200023a0 ldr r2, [sp, #72] ; 0x48
0x200023a2 ldr r3, [sp, #76] ; 0x4c
0x200023a4 adds r2, r2, r4
0x200023a6 adcs r3, r5
0x200023a8 lsrs r3, r3, #3
0x200023aa str r3, [sp, #92] ; 0x5c
0x200023ac nop ; (mov r8, r8)