有的编译器版本会有这个现象:
表达式b = (++a)+(a++);中前面括号和后面括号分别为两个运算
++a和a++的运算描述是在语句执行前和语句执行后分别自加1;
编译器从左到右
ldr r0 ,#5 ;将r0存放a的值
ldr r1 ,#0 ;将r1存放b的值,不一定是0,初始值假设为0
add r0,r0 ,#1 ;++a
//而(a++)的括号里面是一个a ++;的运算。
‘(’入栈
mov r2 ,r0 ;a的值存在r2中 也就是6
‘)’出栈
add r0 ,r0 ,#1 ; 执行后++
mov r2,r0 ;将r0付给r2
add r1 ,r0 , r2 ; r1 = 6 + 7 =13 |