首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

入门ARM实例 test3

入门ARM实例 test3

test3.c





  • #include <stdio.h>
  • void main()  
  • {  
  •   int d = 4;  
  •   char b = 2;  
  •   d = b;  
  • }  

       然后编译:arm-linux-gnueabihf-gcc test.c -o test3      然后看看汇编代码:arm-linux-gnueabihf-objdump -D test3

0000835c <main>:
1    835c:       b480            push    {r7}
2    835e:       b083            sub     sp, #12
3    8360:       af00            add     r7, sp, #0
4    8362:       f04f 0304       mov.w   r3, #4
5    8366:       603b            str     r3, [r7, #0]
6    8368:       f04f 0302       mov.w   r3, #2
7    836c:       71fb            strb    r3, [r7, #7]
从栈里取出变量b的值赋给 r3:
8    836e:       79fb            ldrb    r3, [r7, #7]
跟新栈里的变量d的新的值--存储r3的值到stack里的变量d的位置:
9    8370:       603b            str     r3, [r7, #0]

10    8372:       f107 070c       add.w   r7, r7, #12
11    8376:       46bd            mov     sp, r7
12    8378:       bc80            pop     {r7}
13    837a:       4770            bx      lr
      其中,1-7行以及10到13行与test2.c里代码相同,只有8-9行不同。从8-9行可以看出原来赋值运算 d = b 很简单:从从栈里(内存)加载( load ) 赋值运算符右边变量(b)的值到寄存器上,然后把此寄存器保存到赋值元算符左边变量(这里是d)的位置(在stack里)的内存里。请看示意图:


        赋值前d的位置内存是4,b的位置内存是2

      赋值后栈里变量d的位置的内存也变成了2
返回列表