ARM汇编记录

1.标号:即是当前行指令地址。

2.DCx:(分配数值变量)

DCB等

DCD:分配连续空间(按字)

如:num_a DCD 0X200,0x202;表示分配2个字大小的空间并赋初值为0x200,0x202,而num_a则指向这个分配的地址。即*(num_a)=0x200,*(num_a+1)=0x202。

3.EQU(赋值数值常量)

如:num_b EQU 0X100    ;表示定义常量num_b的值为0x100。

/*看到ARM汇编指令手册中有EQUx系列指令,作用等同于DCx,用于分配连续空间,但和EQU不是一回事*/
4.SPACE(分配连续空间,按字节)
如:num_c SPACE 100 ;表示分配100个字节大小的空间(不赋值,初值为0, 参考这里),而num_c则指向这个分配的地址。即*(num_c)~*(num_c+99)=0。


5.关于出入栈:(ARM向下增长式)

PUSH:先SP--再入栈

POP:先出栈再SP++

这就表示:假设你的栈大小为0x100,且栈底地址=0x00,则栈顶地址=0x100而不是=0xFF(SP先变化)。

6.在keil中观察汇编指令时:

a.通过keil生成的map文件可以清楚的了解到程序中各个符号的相关信息,提供了很大的便捷性。

b.汇编文件中的标号要通过EXPORT声明后才能在map文件中生成(如:EXPORT__TestLabel)

c.假设有如下程序:

label_a DCD 0X11

label_b

label_c DCD  0X22

label_d

则:label_b=label_a+4(1 word)

label_c=label_b

label_d=label_c+4(1 word)

<即空指令不会被分配空间>


d.假设有如下全局变量定义:

        u16 a;

        u8 b;

        u32 c;

且a的地址为0x0000_0000,则在map文件中可以观察到:

     label          addr              size

     a           0x0000_0000     2

     b           0x0000_0002     

     c           0x0000_0004     4

由此大概可以看出keil中默认的情况下(我不知道这里是不是可以有其他配置选项可以设置),内存地址的分配是按照对应的数据宽度进行对齐的。

e.某些汇编指令的WEAK属性值需要注意,在EXPORT声明中若带有这个参数则表示:如果外部也有同名的符号声明,则优先使用外部的标号,这样做的意义应该就是:用户可能只用到一部分标号(函数),如果你都指望用户去定义,那我们肯定不乐意也肯定会漏掉某些,所以当用户需要实现某些具体的功能时,重新声明一个同名的函数(标号)即可,也不会有重复定义的错误(有点C++里方法重写的概念)。而现在,ST已经帮我在中断文件中默认全部“重写”了这些标号(函数),所以上面说会漏写的问题也并不会出现。

f.汇编中伪指令PROC和ENDP,见下图:



g.keil中保留c文件产生的中间汇编文件的方法:


然后在你的工程输出目录里找到c文件同名的汇编文件,


即可看到对应的汇编程序。


h.Keil编译后的各文件介绍:

**.txt——编译生成的文件

**.plg——编译器编译结果

**.hex和.bin——可执行文件kmap和.lst:链接文件

**.o——目标文件

**.crf、.lnp、.d和.axf——调试文件

**.opt——保存工程配置信息

**.bak——工程备份文件


i.



/**************************************************************************持续记录中********************************************************************************/














参考资料:

汇编指令:

https://wenku.baidu.com/view/d8ecc17428ea81c759f5780c.html

http://blog.csdn.net/beyondioi/article/details/7854011


stm32启动文件分析:

http://blog.sina.com.cn/s/blog_4f09c0b501016eo9.html

http://www.eeworld.com.cn/mcu/article_2017091234355.html












猜你喜欢

转载自blog.csdn.net/yanlutian/article/details/78190374
今日推荐