如何将此C程序转换为程序集代码我很难理解无符号int操作。

unsigned int sum(unsigned int n){
     if(n==0) return 0;
     else return n+sum(n-1);
   }

如果我考虑int,我就这么做了。如何考虑无符号int?
sum:
SUB sp, sp, #8
STR lr, [sp,#4]
STR r0, [sp,#0]
CMP r0,#0
BGE L1
MOV r0, #0
ADD sp, sp, #8
MOV pc, lr
L1: SUB r0, r0, #1
BL sum
MOV r12, r0
LDR r0, [sp,#0]
LDR lr, [sp,#4]
ADD sp, sp, #8
ADD r0, r0, r12
MOV pc, lr

最佳答案

对于unsigned in t,ADD和SUB指令在这两者中的行为都是正确的,这无关紧要。
有些isa提供无符号的ADD和SUB(ADDU和SUBU)作为MIPS,这只是在溢出行为上有所不同。

07-24 09:44
查看更多