如何理解字节对齐

ARM 芯片的 指令长度可以是32位(ARM状态下),也可以是16位(Thumb状态下)。

ARM 芯片支持以字节(8位)、半字(16位)、字(32位)的 数据宽度对存储器及外部设备的访问。其中字数据需要按4字节对齐( 地址的最底两位为0),半字数据需要按2字节对齐( 地址的最底位为0)。

以上内容摘自《ARM应用系统开发详解》第二版 第18页。

如何理解红色标记的两句话?

内存地址的编号是以字节为单位的,假设字长是32位,第一个字节到第十个字节的内存编号:

0b0000 0000 0000 0000 0000 0000 0000 0000     <--     第1个字节
0b0000 0000 0000 0000 0000 0000 0000 0001     <--     第2个字节
0b0000 0000 0000 0000 0000 0000 0000 0010     <--     第3个字节
0b0000 0000 0000 0000 0000 0000 0000 0011     <--     第4个字节
0b0000 0000 0000 0000 0000 0000 0000 0100     <--     第5个字节
0b0000 0000 0000 0000 0000 0000 0000 0101     <--     第6个字节
0b0000 0000 0000 0000 0000 0000 0000 0110     <--     第7个字节
0b0000 0000 0000 0000 0000 0000 0000 0111     <--     第8个字节
0b0000 0000 0000 0000 0000 0000 0000 1000     <--     第9个字节
0b0000 0000 0000 0000 0000 0000 0000 1001     <--     第10个字节
0b0000 0000 0000 0000 0000 0000 0000 1010     <--     第11个字节
0b0000 0000 0000 0000 0000 0000 0000 1011     <--     第12个字节
0b0000 0000 0000 0000 0000 0000 0000 1100     <--     第13个字节

[感谢 @gongyuena 的提醒,表示二进制位应该用0b而不是0x,已经修改过来。2012-06-07]

半字数据需要按2字节对齐,就是说每个数据至少要占用2个字节,那么数据的起始地址编号就应该是偶数,如第1字节,第3字节,第13字节。所有这些地址的最低位都是0。
而字数据需要按4字节对齐,就是说每个数据至少要占用4个字节,那么数据的起始地址编号就应该是4的整数倍,如第1字节,第5字节,第13字节。所有这些地址的最低两位都是0。


注意不要混淆 指令长度数据宽度两个概念。

转载于:https://my.oschina.net/zengsai/blog/23717

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值