ARM汇编-在64位无符号整型中返回的两个32位无符号整型的和



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中有额外的指令。

相关内容

  • 没有找到相关文章

最新更新