从最简单的实例学习ARM指令集
来源:互联网 发布:mac git 安装 编辑:程序博客网 时间:2024/06/01 21:56
[cpp] view plaincopyprint?
- #include <stdio.h>
- void f1()
- {
- }
- void main()
- {
- int d = 4;
- f1();
- }
然后编译:arm-linux-gnueabihf-gcc test.c -o test4
然后看看汇编代码:
0000835c <f1>:
1 835c: b480 push {r7}
2 835e: af00 add r7, sp, #0
3 8360: 46bd mov sp, r7
4 8362: bc80 pop {r7}
直接跳到main函数里调用此函数时保存的LR值:
5 8364: 4770 bx lr
6 8366: bf00 nop
00008368 <main>:
程序用到了r7寄存器,所以需要保护以免破坏之前的数据,同时因为本函数调用子函数f1,需要用到lr寄存器保存返回值,故需要保存LR到栈里:
7 8368: b580 push {r7, lr}
8 836a: b082 sub sp, #8
9 836c: af00 add r7, sp, #0
10 836e: f04f 0304 mov.w r3, #4
11 8372: 607b str r3, [r7, #4]
跳转到函数f1的地址,同时把返回地址保存到LR寄存器:
12 8374: f7ff fff2 bl 835c <f1>
13 8378: f107 0708 add.w r7, r7, #8
14 837c: 46bd mov sp, r7
直接把第7行保存的LR值弹到PC寄存器上,下一条取地址指令就是取main函数的下一个地址:
15 837e: bd80 pop {r7, pc}
汇编代码8-11是与从最简单的实例学习ARM 指令集(一)的范例test1.c一模一样。f1函数十分简单,相信大家都能看懂。
下一篇讲讲参数的传递。
- 从最简单的实例学习ARM指令集
- 从最简单的实例学习ARM 指令集(一)
- 从最简单的实例学习ARM 指令集(二)
- 从最简单的实例学习ARM 指令集(三)
- 从最简单的实例学习ARM 指令集(四)
- 从最简单的实例学习ARM 指令集(五)
- ARM指令集的学习
- 实例讲解ARM指令集
- 在实例中学习arm汇编指令
- 简单ARM指令集介绍
- 从最简单开始的正则学习
- ARM 的指令集
- ARM的指令集
- arm学习笔记三(arm指令集)
- ARM指令集详解(带实例)
- arm指令集 - 从汇编开始
- ARM 汇编指令学习:[2]ARM指令集
- 系统学习ARM之四 --GNU的伪指令集
- 竞态编程相关接口
- listview当选中某一个item时设置背景色其他的不变
- Linux下用ICMP协议,进行路由多端口尝试探测
- 第二周 项目二 长方柱类
- Linux下的 fork 函数
- 从最简单的实例学习ARM指令集
- 项目4-图书馆的书
- 设置背景图像平铺
- 第二周 程序阅读并回答问题
- 第一周实践:旱冰场造价
- 网络字节序、大端模式、小端模式
- 5分钟搞定字节对齐
- js控制从绿色到红色的渐变
- 使用mysqldump导出数据时对字段中包含的单引号的处理