从最简单的例子,带你轻松学习ARM指令集

龚婷 发表于 2018-03-14 10:36:43 收藏 已收藏
赞(0) •  评论(0

从最简单的例子,带你轻松学习ARM指令集

龚婷 发表于 2018-03-14 10:36:43
+关注

首先编辑一个最简单的函数,包含变量分配及初始化:test1.c

1. #include   

2.   

3. void main()  

4. {  

5.   int d = 4;  

6. }  

然后编译:arm-linux-gnueabihf-gcc test.c -o test1

然后看看汇编代码:arm-linux-gnueabihf-objdump -D test1;每一句的含义我已经给出详细注释。

首先对输出的文件格式说明,对于如下的输出,左边是程序地址(各种函数地址等等),第二列是指令码的十六进制表示也俗称机器码,剩下的就是给人类看的指令助记符号,举例举例:

835c:       b480            push    {r7}    

这里,835c是main函数的地址,b480是机器码表示的指令,push {r7}就是给我们人类看的了。下面看test1的输出:

0000835c

:

程序用到了r7寄存器,所以需要保护以免破坏之前的数据

1    835c:       b480            push    {r7}     

堆栈向下增长栈用的不多,只需要12个字节就够用了: int d