Board logo

标题: 入门ARM实例 test3 [打印本页]

作者: look_w    时间: 2017-10-24 20:14     标题: 入门ARM实例 test3

test3.c






       然后编译: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




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0