对齐伪指令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 $
上一篇:使用keil判断ARM的冷启动和热启动的方法
下一篇:arm条件执行
推荐阅读最新更新时间:2024-03-16 14:50