***指令与伪指令:
指令:CPU机器指令的助记符,经过编译后得到一串10组成的机器码,可以被CPU直接读取执行。
伪指令:编译器环境提供,用来指导编译过程,最终不会生成机器码。
***LDR/STR架构:
CPU不能直接对内存的内容进行操作,必须借助CPU的特殊寄存器对内存进行加载处理。
ldr指令将内存内容加载到通用寄存器,str将寄存器的内容加载至内存。
***指令后缀:
常用的后缀名:
B 功能不变,操作长度变为8位;
H 功能不变,操作长度变为16位;
S 功能不变,操作数变为有符号;
S(S标志) 功能不变,影响CPSR标志位。
***跳转指令:
b:直接跳转;
bl:跳转前将返回的地址放入lr之中,以便于返回,函数的调用;
***C语言的调用:
C语言的运行需要一定的条件,这些条件由汇编来完成。
C语言的局部变量设置在栈上,如果C语言的局部变量落空,则程序就会跑空。
在单片机程序之中,硬件为其提供了一个默认可用的栈,
在编译器gcc中,在链接时自动会添加一个头,这个头由汇编编写,引导C语言的实现。
ARM 之中有37个寄存器,每一个模式之下都有自己独立的sp寄存器。
找到自己模式下的栈,系统在复位后默认进入SVC模式,先把模式设置为SVC,再直接操作SVC。
复位之后,外部的DRAM尚未初始化,目前可用的只有内部的SRAM,因此我们从SRAM设置栈。
栈:满减栈, 满增栈 空减栈 空增栈