目录
1. 数据存放和对齐
按字节编址,可以有不同的寻址方式 ===> 按字节寻址、按半字寻址、按字寻址;
按字编址,最小取出的单元就是一个字,没办法直接取一个字节出来。若要拆出一个字节的话,需要软件来实现。
存储单元和数据都有自己的高位和低位。 ==> 两种存放方式:大端方式,小端方式 点我
不管是大端法还是小端法存储,计算机在内存中存放数据的顺序都是从低地址到高地址,所不同的是首先取低字节的数据存放在低地址还是取高字节数据存放在低地址。
- 若首先取高字节的数据存放在低地址,则是大端法;【12345678H 中,12 是高字节数据,78 是低字节数据】
- 若首先取低字节的数据存放在低地址,则是小端法。
字节序还是位序
大端法和小端法指的是字节在内存中存储时的排列规则,而不是数据中的位的排列规则。也有以位序排列的机器,但很少见。另外,再次明确一下,大端法或小端法是数据在存储时的表现,而不是在寄存器中参与运算时的表现。
机器字长、指令字长、存储字长 三者之间没有固定的大小关系,但必须都是字节的整数倍。
其中,存储字长一般去字节的偶数倍,方便硬件的设计。
早期,习惯上会将存储字长和机器字长做成一样,方便两者之间的数据交流。
所以 单字长指令、半字长指令、双字长指令定义是跟机器字长去比,而不是存储字长。
如果三者的长度设计成一样,那么刚好取出一条指令只需一次访存,取出一个数据也是一次访存,可以减少多次访存的时间消耗
因为取数据是一行一行取的。所以对齐不对齐影响的是访存次数。
对于4个字节的数据来说,对齐存储的情况下,每一次的起始地址都是自身长度(字节数量)的整数倍。
边界对齐 ==> 数据存放的起始地址(和字地址同),是它字节数量的整数倍。