ARM编程值得注意的地方
1、ARM是一个32位处理器,通常情况下,如果没有特殊要求,C语言中的结构体要求4 字节对齐。
2、在实际代码中,会存在以下两问题:
a、要求多个数据紧缩在4个字节中。
b、而有些数据是4个字节长度,但并不是4字节对齐存储的。
3、作为32位处理器,与X86不同点是:ARM不支持非对其字节的数据传输,也就是说,在C语言中,一旦使用了32位的指针操作一个非4字节对齐的数据,ARM就会陷入一异常。该问题会给一些软件的移植带来麻烦,一定要特别留心处理这些问题。(现在的常用ARM版本中,都不支持未对齐数据的传输,如ARMv4,ARMv5,但从ARMv6开始支持非对齐数据传输)
4、在ARM汇编语言编程时,须注意流水线的影响,比如ARM9的五级流水线会导致所读取的PC(程序计数器)指针总比当前执行的汇编代码地址多16.
例如:(arm9汇编中)
mov pc,pc
执行以上指令后,程序会跳转到当前指令的往后的第四条指令去执行。
而: sub pc,pc,#12
执行的才是当前指令的下一条指令。
若: sub pc,pc,#16
该指令执行,是一个死循环 |