uboot中“bic sp, sp, #7” 实现8字节对齐

一、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字节地址对齐

小伙伴们留个赞,好人一生平安。


  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kashine

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值