|
楼主 |
发表于 2013-3-20 07:23:14
|
显示全部楼层
本帖最后由 cyj_0220 于 2013-3-20 07:31 编辑
- 89 int test(int a,int b)
- \ test:
- 90
- 91 {
- 92
- 93 int c;
- 94
- 95 c = a *b;
- 96
- 97 return c;
- \ 00000000 9F30 MUL R19, R16
- \ 00000002 2D30 MOV R19, R0
- \ 00000004 9F21 MUL R18, R17
- \ 00000006 0D30 ADD R19, R0
- \ 00000008 9F20 MUL R18, R16
- \ 0000000A 0D31 ADD R19, R1
- \ 0000000C 2D00 MOV R16, R0
- \ 0000000E 2F13 MOV R17, R19
- \ 00000010 9508 RET
- 98
- 99 }
- 100
- \ In segment CODE, align 2, keep-with-next
- 101 void test1(int a ,int b, int *c)
- \ test1:
- 102
- 103 {
- 104
- 105 *c = a*b;
- \ 00000000 9F30 MUL R19, R16
- \ 00000002 2D30 MOV R19, R0
- \ 00000004 9F21 MUL R18, R17
- \ 00000006 0D30 ADD R19, R0
- \ 00000008 9F20 MUL R18, R16
- \ 0000000A 0D31 ADD R19, R1
- \ 0000000C 01FA MOVW R31:R30, R21:R20
- \ 0000000E 8200 ST Z, R0
- \ 00000010 8331 STD Z+1, R19
- 106
- 107 }
- \ 00000012 9508 RET
复制代码 ewavr编译生成的汇编,一本书上写的:使用全局变量比函数传递参数更加有效率。这样做去除了函数调用参数入栈和函数完成后参数出栈所
需要的时间。然而决定使用全局变量会影响程序的模块化和重入,故要慎重使用。
但是分析汇编代码,感觉不使用全局变量的时候效率更高 |
|