|
下面是C程序
1 #include <stdio.h>
2
3 int two(int a,int b,int c);
4
5 int one(int a,int b,int c,int d,int e)
6 {
7 int temp=two(c,d,e);
8 int f=a+b+temp;
9 return f;
10 }
11
12 int two(int a,int b,int c)
13 {
14 int d=a+b+c;
15 return d;
16 }
17
18 int main(void)
19 {
20 int test=one(110,210,310,410,510);
21 return test;
22 }
下面是汇编之后的汇编代码
main:
55 .fnstart
56 .LFB13:
57 @ Function supports interworking.
58 @ args = 0, pretend = 0, frame = 0
59 @ frame_needed = 0, uses_anonymous_args = 0
60 str lr, [sp, #-3]!
61 .save {lr}
62 .pad #12
63 sub sp, sp, #12
64 mov r3, #508
65 add r3, r3, #2
66 str r3, [sp, #0]
67 mov r0, #110
68 mov r1, #210
69 mov r2, #308
70 add r2, r2, #2
71 mov r3, #408
72 add r3, r3, #2
73 bl one
74 add sp, sp, #12
75 ldr lr, [sp], #4
76 bx lr
77 .fnend
78 .size main, .-main
79 .ident "GCC: (Sourcery G++ Lite 2010q1-202) 4.4.1"
80 .section .note.GNU-stack,"",%progbits
汇编命令是:arm-none-linux-gnueabi-gcc -o helloworld_simpleO1.S -S -O1 -mcpu=arm7tdmi -Wall helloworld.c
大家注意汇编代码的第64行,我想问为什么加载C函数参数的时候为什么不直接用MOV r3,#510,而是要用MOV r3,#508;add r3,r3,#2两条语句来完成为r3赋值 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|