我是靠谱客的博主 整齐银耳汤,最近开发中收集的这篇文章主要介绍从最简单的实例学习ARM 指令集(二),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

       本篇研究赋值运算是如何实现的。我们在上一篇的范例test2.c的基础上,加上赋值语句:

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

      下一篇,我们学习下子函数调用。

最后

以上就是整齐银耳汤为你收集整理的从最简单的实例学习ARM 指令集(二)的全部内容,希望文章能够帮你解决从最简单的实例学习ARM 指令集(二)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部