【问题标题】:Convert the C function into ARM assembly language将 C 函数转换为 ARM 汇编语言
【发布时间】:2017-09-16 06:35:21
【问题描述】:

如何将这个 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

【问题讨论】:

  • 好吧,你拿一个编译器,并把它传递给这个带有一些标志的程序。对于clang,它类似于clang -march arm -S yourprogram.c
  • @arrowd clang -target arm -S yourprogram.c 是正确的。

标签: c assembly


【解决方案1】:

对于 unsigned int 无关紧要,作为 ADD 和 SUB 的指令在两者中都能正常运行。

一些 ISA 提供无符号 ADD 和 SUB(ADDU 和 SUBU)作为 MIPS,它们仅在溢出行为上有所不同。

【讨论】: