向大家请教一个32位有符号数相乘的问题。
代码如下:
s32 a,b;//定义两个有符号的32位变量
u32 c;
__int64 d;//定义一个有符号的64位变量
a = 0x70000000;//赋一个正数
b = 2;
d = a * b;
if(d>0) c = 1;
else c = 0;
结果c=0
按道理,两个正数相乘,d>0才对,但实际不是。
以下为 KEIL 编译后的汇编代码
;;;864 a = 0x70000000;
000992 f04f44e0 MOV r4,#0x70000000
;;;865 b = 2;
000996 2502 MOVS r5,#2
;;;866 d = a * b;
000998 fb04f005 MUL r0,r4,r5 ;此处就不对,看不出有64位结果
00099c 17c1 ASRS r1,r0,#31
00099e e9cd0100 STRD r0,r1,[sp,#0]
;;;867 if(d>0) c = 1;
0009a2 a00b ADR r0,|L1.2512|
0009a4 c80c LDM r0!,{r2,r3}
0009a6 e9dd0100 LDRD r0,r1,[sp,#0]
0009aa 1a12 SUBS r2,r2,r0
0009ac 418b SBCS r3,r3,r1
0009ae da01 BGE |L1.2484|
0009b0 2601 MOVS r6,#1
0009b2 e000 B |L1.2486|
|L1.2484|
;;;868 else c = 0;
0009b4 2600 MOVS r6,#0
有人知道这问题出在哪里吗? |