我如何将此C程序转换为汇编代码?我很难理解unsigned int操作。
unsigned int sum(unsigned int n){
if(n==0) return 0;
else return n+sum(n-1);
}
如果我考虑 int ,我就这样做了。如何考虑 unsigned 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
答案 0 :(得分:1)
对于unsigned int,无关紧要,因为ADD和SUB在两者中都表现正确。
有些ISA提供无符号ADD和SUB(ADDU和SUBU)作为MIPS,只有溢出行为不同。