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。
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 1
c 0x0000_0004 4
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