A + B(均为uint32_int)。这个函数将返回一个uint64_int类型的值。我该怎么办?
我试过了
ADDS R0, R0, R2
ADC R1, R1, R3
BX LR
但它给了我一个巨大的数字。
如果您正在谈论您的标题问题,那么您将两个32位数字加在一起,并且在上面32位中唯一需要的其他东西是执行,因此您使用adc带零(用于无符号)。
unsigned long long fun0 ( unsigned int a, unsigned int b )
{
return(a+b);
}
unsigned long long fun1 ( unsigned int a, unsigned int b )
{
return(a+((unsigned long long)b));
}
Disassembly of section .text:
00000000 <fun0>:
0: e1a03001 mov r3, r1
4: e3a01000 mov r1, #0
8: e0800003 add r0, r0, r3
c: e12fff1e bx lr
00000010 <fun1>:
10: e3a03000 mov r3, #0
14: e0910000 adds r0, r1, r0
18: e2a31000 adc r1, r3, #0
1c: e12fff1e bx lr
so fun1显然不是fun0。我想知道为什么在fun0中有额外的指令。