#include <stdio.h>
const unsigned int a= 5;
int main()
{
int c = 10;
c= c % a;
return 0;
}
汇编代码生成如下。为c = c%a生成的代码不清楚。 umull如何工作以及为什么使用LSL和RSL。在rsb指令中r3的值是什么以及如何。请逐步解释umull指令到rsb指令的代码。
000c 0A30A0E3 mov r3, #10
0010 08300BE5 str r3, [fp, #-8]
0014 08101BE5 ldr r1, [fp, #-8] // r1 is 10
0018 2C309FE5 ldr r3, .L3 //r3 is 5
001c 912383E0 umull r2, r3, r1, r3
0020 2321A0E1 mov r2, r3, lsr #2
0024 0230A0E1 mov r3, r2
0028 0331A0E1 mov r3, r3, asl #2
002c 023083E0 add r3, r3, r2
0030 012063E0 rsb r2, r3, r1
0034 08200BE5 str r2, [fp, #-8]
0038 0030A0E3 mov r3, #0