一、实验目的
1. 熟悉ARM指令集
2. 掌握在树莓派下使用反汇编工具
二、实验内容
通过C代码和反汇编工具研究:
- 生成了Thumb指令还是ARM指令,如何通过编译参数改变;
- 对于ARM指令,能否产生条件执行的指令;
- 设计C的代码场景,观察是否产生了寄存器移位寻址;
- 设计C的代码场景,观察一个复杂的32位数是如何装载到寄存器的;
- 写一个C的多重函数调用的程序,观察和分析:
- 调用时的返回地址在哪里?
- 传入的参数在哪里?
- 本地变量的堆栈分配是如何做的?
- 寄存器是caller保存还是callee保存?是全体保存还是部分保存?
- MLA是带累加的乘法,尝试要如何写C的表达式能编译得到MLA指令。
三、主要仪器设备
1. 树莓派板子 1个 (配有电源线、组装塑料外壳、以及一根装用的串口线)
2. 8G大小的SD卡 1张
3. 操作系统为Windows7的笔记本电脑1台
四、操作方法和实验步骤
1. 生成了Thumb指令还是ARM指令,如何通过编译参数改变;
1.1 编写测试程序如下
1.2 使用objdump查看.o文件