杂项伪指令
杂项伪指令在汇编编程设计较为常用,如段定义伪指令,入口点设置伪指令,包含文件伪指令,标号导出或引入声明等,该类伪指令如下:
边界对齐: ALIGN。
段定义: AREA。
指令集定义: CODE16 和CODE32。
汇编结束: END。
程序入口: ENTRY。
常量定义: EQU。
声明一个符号可以被其它文件引用:EXPORT 和GLORBAL。
声明一个外部符号:IMPORT 和EXTERN。
包含文件:GET 和INCLUDE。
包含不被汇编的文件:INCBIN。
保留符号表中的局部符号:KEEP。
禁止浮点指令:NOFP。
指示两段之间的依赖关系:REQUIRE。
堆栈8 字节对齐:PEQUIRE8 和PRESERVE8。
给特定的寄存器命名:RN。
标记局部标号使用范围的界限:ROUT。
ALIGN------ ALIGN 伪指令通过添加补丁字节使当前位置满足一定的对齐方式。
伪指令格式:
ALIGN {expr{,offset}}
其中:expr 数字表达式,用于指定对齐的方式。取值为2 的n 次幂,如1、2、4、8等,不能为0 其没有expr,则默认为字对齐方式。
offset 数字表达式,当前位置对齐到下面形式的地址处:offset+n*expr
在下面的情况中,需要特定的地址对齐方式:
(A)Thumb 伪指令ADR 要求地址是字对齐的。而Thumb 代码中地址标号可能不是字对齐的。这时就要使用伪指令ALIGN4 使Thumb 代码中地址标号为字对齐。
(B)由于有些ARM 处理器的Cache 采用了其他对齐方式。如16 字节对齐方式,这时使用ALIGN 伪指令指定合适的对齐方式可以充分发挥Cache 的性能优势。
(C)LDRD 和STRD 指令要求存储单元为8 字节对齐。这样在为LDRD/STRD 指令分配的存储单元前要使用伪指令ALIGN8 实现8 字节对齐方式。
(D)地址标号通常自身没有对齐要求,而在ARM 代码中要求地起标号对齐是字对齐的,Thumb 代码中要求半字对齐。这样可以使用ALIGN4 和ALIGN2 伪指令来调整对齐方式。
伪指令应用举例如下。
通过ALIGN 伪指令使程序中的地址标号字对齐:
AREA Example,CODE,READONLY ;声明代码段Example
START LDR R0,=Sdfjk