没有合适的资源?快使用搜索试试~ 我知道了~
嵌入式LAB11
需积分: 0 0 下载量 165 浏览量
2022-08-03
11:33:52
上传
评论
收藏 317KB PDF 举报
温馨提示
试读
13页
1. 深入理解 ARM 指令和 Thumb 指令的区别和编译选项 2. 深入理解某些特殊的 ARM 指令,理解如何编写 C 代码来得到这些指令 3. 深入理解
资源详情
资源评论
资源推荐
实验一 ARM 指令
潘盛琪 3170105737
实验目的:
1. 深入理解 ARM 指令和 Thumb 指令的区别和编译选项;
2. 深入理解某些特殊的 ARM 指令,理解如何编写 C 代码来得到这些指令;
3. 深入理解 ARM 的 BL 指令和 C 函数的堆栈保护;
4. 深入理解如何实现 C 和汇编函数的互相调用。
实验器材:
交叉编译软件 CUBEIDE
实验步骤:
1. 生成了 Thumb 指令还是 ARM 指令:如何通过编译参数改变,相同的程序,ARM 和
Thumb 编译的结果有何不同,如指令本身和整体目标代码的大小等;
编译器设置:
优化选项
-O2
C 代码:
1. int main(void)
2. {
3. int a = 1;
4. }
汇编代码:
1. .Ltext0:
2. .cfi_sections .debug_frame
3. .section .text.startup.main,"ax",%progbits
4. .align 1
5. .p2align 2,,3
6. .global main //main 为程序入口
7. .syntax unified //用统一汇编语法
8. .thumb //用 thumb 指令
9. .thumb_func
10. .fpu softvfp
11. .type
main, %function
12. main:
//主程序开始
13. .LFB3:
14. .file
1 "../Src/main.c"
15. .loc
1
26 0
16. .cfi_startproc
17. @ args = 0, pretend = 0, frame = 0
18. @ frame_needed = 0, uses_anonymous_args = 0
19. @ link register save eliminated.
20. .LVL0:
21. .loc 1 28 0
22. movs r0, #0
23. bx lr
反汇编代码:
1. 08000170 <main>:
2. 8000170: 2000 movs r0, #0
3. 8000172: 4770 bx lr
结果分析:
由得到的汇编代码中.thumb 可知,得到的是汇编代码,
由反汇编的结果也可以看到,每条指令长度为 16 位,可以判断生成了 Thumb 指令(事实
上在后续的实验中发现,printf()等指令能生成 32 位汇编指令,因此实际上汇编指令为 16
位与 32 位混合的 Thumb2 指令集)
2. 对于 ARM 指令,能否产生条件执行的指令;
C 代码:
1. int a = 0, b = 1, ans = 100;
2. int main(void)
3. {
4. if(a > b)
5. {
6. ans++;
7. }
8. else
9. {
10. ans--;
11. }
12. }
编译器设置:
优化选项
-O2
汇编代码
剩余12页未读,继续阅读
又可乐
- 粉丝: 62
- 资源: 309
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0