马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
(6)ALIGN ALIGN伪操作通过添加补丁字节使当前位置满足一定的对齐方式。 语法格式 ALIGN {expr{,offset}} 其中:expr为指定对齐方式,可能的取值为2的次幂,如1、2、4、8等。如果伪操作中没有指定expr,则默认当前位置对齐到下一个字边界处。不指定offset,表示将当前位置对齐到以expr为单位的起始位置,比如“ALIGN 8”表示将当前位置以2个字的方式对齐。如果指定offset,如“ALIGN 4,3”则当原始位置在0x0001(字节),使用“ALIGN 4,3”以后,当前位置到0x0007(0x0004+3),如图所示。
在下面的情况中,需要特定的地址对齐方式: Thumb的伪指令ADR要求地址是字对齐的,而Thumb代码中地址标号可能不是字对齐的。这时就要使用伪操作“ALIGN 4”使Thumb代码中的地址标号字对齐。 由于有些ARM处理器的Cache采用了其他对齐方式,如16字节的对齐方式,这时使用ALIGN伪操作指定合适的对齐方式可充分发挥该Cache的性能优势。 LDRD及STRD指令要求内存单元时8字节对齐的。这样在LDRD/STRD指令分配的内存单元前,要使用ALIGN 8实现8字节对齐方式。 地址标号通常是自身没有对齐要求,而在ARM代码中要求地址标号是字对齐的,在Thumb代码中要求半字对齐。这样需要使用合适的ALIGN时,伪操作中expr含义是不同的。例如: AREA cache, CODE,ALIGN=3 ;指定该代码的指令时8字节对齐的 … MOV PC,LR ;程序跳转后变成4字节对齐,不再是8字节对齐
;所以需要用ALIGN伪操作添加补丁字节,使当
;前位置再次满足8字节对齐
ALIGN 8 ;指定下面的指令时8字节对齐的 … 示例38 ALIGN伪操作举例 将2字节数据放在同一个字的第1字节和第4字节中。 AREA ExampleCODE,READONLY DCB 0x11 ;第1字节保存0x11 ALIGN 4,3 ;字对齐 DCB 0x24 ;第4字节保存0x24 示例39 ALIGN伪操作举例。 在下面的例子中通过ALIGN伪操作使程序中地址标号字对齐。 AREA ExampleCODE,READONLY Start LDRR6,=label … MOV PC,LR label DCB 0x48 ;本伪操作使字对齐被破坏 ALIGN ;重新使数据字对齐 … 凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网 |