ARM汇编指令:.align理解和用法
对齐伪指令ALIGN
对齐伪指令格式:
ALIGN Num
其中:Num必须是2的幂,如:2、4、8和16等。
伪指令的作用是:告诉汇编程序,本伪指令下面的内存变量必须从下一个能被Num整除的地址开始分配。
如果下一个地址正好能被Num整除,那么,该伪指令不起作用,否则,汇编程序将空出若干个字节,直到下一个地址能被Num整除为止。
先看以下代码:
str1:
str:
reset:
这段代码在编译时不会出现任何问题,但是实际在执行中并不会按照预定的要求执行;
编译链接后,通过反汇编如下:
30008000:
30008004:
30008008:
3000800c:
30008010:
30008014:
30008018:
3000801c
3000801c:
30008020
30008020:
30008024:
30008026
30008026:
3000802a:
3000802c:
30008030:
通过反汇编我们可以看出,前面所有的指令都是4的倍数,而在reset这个地址处的指令却不是4的倍数,我们知道ARM是32位处理器,如果在ARM指令状态下,所有指令的执行都是按照4的倍数进行执行的,而到reset这个地址处时,发现地址为30008026不是4的倍数,于是就自动归到30008024处执行,当然会出错了。
在指令出现非对齐情况下,可以在下面插入.align伪指令,如下:
str1:
str:
reset:
通过编译后反汇编如下:
30008000:
30008004:
30008008:
3000800c:
30008010:
30008014:
30008018:
3000801c
3000801c:
30008020
30008020:
30008024:
30008028
30008028:
3000802c:
30008030:
加上.align汇编语句后,指令就对齐!
.align $
ARM汇编指令alig 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)