; assemble and link using the commnads below ; arm-elf-as --gdwarf2 -marm7tdmi -o fact.o fact.s ; arm-elf-ld -o fact.elf fact.o ; Next use arm-elf-insight to debug. fact: mov ip, sp stmfd sp!, {v1, fp, ip, lr} sub fp, ip, #4 mov v1, a1 ; keep a copy of n for mul operation cmp v1, #1 ; n==1 sub a1, a1, #1 ; n -1 for fact(n-1) mov a2, v1 ; return value if n=1 beq fin ; return bl fact ; recursion with n-1 mul a2, a1, v1 ; n*fact(n-1) fin: mov a1, a2 ; return 1 or n*fact(n-1) ldmea fp, {v1, fp, sp, pc} main: b fact