1、对于BX 分支并且转换状态指令,需要注意 在指令最低位确定分支处的代码类型(ARM=1,THUMB=0),因此我们可以通过指令修改最后一位,使BX指令等效转化成由具有BL功能的其它几条指令。
ADRL R0,THUMBFUN+1;无论字对齐还是半字对齐,最低位都为零,而转换处理器状态需要设置最低位,因此进入thumb需该最低位进入ARM则不需要。
BX R0;跳转到RO位置,并通过设置其最低位修改处理器工作状态。
2、再者要注意块传送指令的增减状态,及LDM,STM 在与R15及^搭配使用时需要注意的指针回写问题。
3、ADR、ADRL伪指令的偏移情况,需要重视,这条指令的偏移是相对于程序和寄存器的,往往是体现目的地址相对于本指令PC的偏移量。
4、PC的变化情况也是一个相当值得注意的问题,见以下链接http://blog.csdn.net/liukun321/archive/2010/05/15/5594342.aspx
5、IMPORT XXXXXX, 若在链接时没有对应的符号,则在
b XXXXXX;此处跳转地址将变为该指令的地址,从而程序死在这里
其它情况下 XXXXXX为 零。
6、要灵活运用ASSERT及INFO指令为代码排错。
7、对立即数操作的问题值得重视,http://blog.csdn.net/liukun321/archive/2010/05/13/5588380.aspx
8、LDR伪指令,中的偏移是相对于literal pool的。顾偏移范围最大不能超过4K。
9、SWI的进入及返回。http://blog.csdn.net/liukun321/archive/2010/05/09/5571478.aspx
http://blog.csdn.net/liukun321/archive/2010/05/13/5588212.aspx