一、uboot中的字节对齐操作
bic sp, sp, #7
上述代码的作用是对sp指针(堆栈指针)完成8字节地址对齐。
二、补充知识:8字节地址对齐
1、定义:地址可以被8整除成为8字节对齐。
2、实例:假设当
前sp指针地址0x80000012,显然
该地址不能被8整除(0x80000012换算为十进制为2,147,483,666,显然除以8有余数),因此需要将sp指针调整到可以被8整除的地址上去。
3、解决:我使用的是原子的i.mx6ull开发板,
Cortex-A7内核,
其堆栈是向下增长的,即从高地址向低地址增长,因此对
sp指针进行调整只能向低字节调整(高字节已经被占用), 距离0x80000012最近的能被8整除的数据,且
比当前地址小的(低字节)数据是0x80000010。
4、结论:故将sp指针0x80000012进行8字节对其以后只能是0x80000010。
三、“bic sp, sp, #7” 如何实现8字节对齐
1、汇编指令bic的作用:清除操作数1的某些位,并把结果放置到目的寄存器中。
2、bic命令使用举例:
//清除r0的低五位后 再将数据放到r0中
//0xff = 0b0001 1111
bic r0,r0,#0x1f
3、“bic sp, sp, #7”解释:
将sp指针所代表的地址,按照#7操作数,也就是0b0111位进行清零,将sp所保存的地址低三位全部清零(将0x80000012的低三位进行清零,变为0x80000010)。
4、字节对齐之后两地址之间内存的用处
舍弃!
四、扩展
对于4字节、16字节、64字节地址对齐:
bic sp,sp #3 //4字节地址对齐
bic sp,sp #15 //16字节地址对齐
bic sp,sp #63 //64字节地址对齐
小伙伴们留个赞,好人一生平安。