例如:
1.LDR r0,=name 像这种带符号的是伪指令,而不是ARM指令,LDR伪指令用于加载立即数或一个地址值到指定寄存器。
(1)如果name是立即数:LDR R0,=0x123 将0x123存入R0
(2)如果name是个表示符:LDR R0,=NAME 将NAME的地址存入R0
2.LDR R1,[R0] 如果没有等号,LDR指令用于从内存中读取数据放入寄存器中,该指令是将R0地址处的数据读出,保存到R1中。
所以,LDR R0, =SystemInit就是把SystemInit的地址送给R0,而SystemInit的地址就是系统初始化函数的地址。
第二句是BLX R0 BLX属于跳转指令集,在ARM中,跳转指令集有四条。如下:
1、B指令
B指令的格式为:
B{条件}目标地址
B指令时最简单的跳转指令。一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行。需要注意的存储在跳转指令中的实际值是相对当前PC值的一个偏移量,而不是一个绝对地址, 它的值由汇编器来计算(参考寻址方式中的相对寻址)。它是24位有符号数,左移两位后扩展为32位,表示的有效偏移为26位(前后32MB的地址空间)。以下指令:
B Label 程序无条件跳转到标号Label处执行
2、BL指令
BL指令的格式为:
BL{条件}目标地址
BL是另一个跳转指令,但跳转之前,会在寄存器R14中保存PC的当前内容,因此,可以通过将R14的内容重新加载到PC中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个基本单 常用的手段。以下指令:
BL Label 当程序无条件跳转到标号Label处执行时,同时将当前的PC值保存到R14中
3、BX指令
BX指令的格式为:
BX{条件}目标地址
BX指令跳转到指令中所指定的目标地址,目前地址处的指令既可以是ARM指令,也可以是Thumb指令。
4、BLX指令
BLX指令的格式为:
BLX{条件}目标地址
BLX指令从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态由ARM指令集切换到Thumb指令集,该指令同时将PC的当前内容 保存到寄存器R14中。因此,当子程序使用Thumb指令集,而调用者使用ARM指令集时,可以通过BLX指令实现子程序的调用和处理器工作状态 的切换。