实际上,如果我们采用这种方式存储,除非是字节,其他的任何一个长度的数据或者任何类型的数据可能都需要话费两个存取周期的时间,才能把它读出来,或者写进去,读写控制也非常复杂,因为要判断数据的长度,数据是不是跨存储字进行了存取,前面我们介绍了在计算机当中,内存是计算机系统性能的瓶颈,我们希望,花最少的时间,或者是尽可能的提高访存速度,怎么才能保证,任何一种类型的数据,在一次主存周期,我们都能够把它取出来呢?
每次存取数据不管是什么类型,都从存储字的起始位置,开始读或者开始写,如果是这样的话,保存一个字节,从起始位置开始,半字,双字 每次保存都是从存储字的起始位置开始,任何数据的访问,都能保证在一个主存周期都能完成访问,控制也很简单,但是浪费内存严重,浪费了 很多宝贵的内存资源。
机器字长:CPU一次能处理数据的位数,通常与CPU的寄存器位数有关。
存储字长:存储器中一个存储单元(存储地址)所存储的二进制代码的位数,即存储器中的MDR的位数。
指令字长:计算机指令字的位数。
数据字长:计算机数据存储所占用的位数。
注:冯诺依曼机中,指令和数据同等重要,都存放在存储器中,并可按地址寻访。
通常早期计算机:存储字长 = 指令字长 = 数据字长。故访问一次便可取一条指令或一个数据,随着计算机应用范围的不断扩大,三者可能各不相同,但它们必须是字节的整数倍。
有没有一种方式既能够减少资源的浪费,任何一种类型的数据,(他的长度小于存储字长),在一个主存周期当中,我都能够进行访问。边界对准方式,如上,是指,信息存储的时候,是从地址的整数倍开始存储,一个字节,存放在任何一个地址的内存单元当中,如果是一个双字,在我们这个例子中,双字是8个字节,也就是暂用了8个编址单位,起始地址,地址编码就从8的倍数开始,在这里每次都从存储字开始,如果是2字节,半字,存储的时候,放在地址是偶数的起始地址开始存储,如果是一个字,他的长度是4个字节,那么我们就找地址编码是4的倍数那些存储单元开始存储。能够保证任何一种类型的数据 还是刚才说的小于存储字长,进行访问的话,一个存取周期,我就可以读取或者写入,这种方式就叫做边界对准,这种方式实际上是前两种的折中,数据存储的起始地址,是数据长度的整数倍,数据长度是我们编址单位,既保证了在一个周期里面,可以完成存储访问,也减少了存储空间的浪费,这就是数据在存储器的存放方式。
寻址方式
pc=pc+1
如果内存单元,他的编址单位是字节,每条指令是32位也就是4个字节,顺序寻址每次加的那个1 就是4字节,如果指令的长度是64个字节,那么pc+8就是加8个字节,如果指令是可变长度的,那么这个加的这个1 会更加复杂,第二种方式是跳跃寻址,由转移指令指出下一条指令,
数据寻址
寻址方式比较多,也比较复杂
操作码+寻址方式+形式地址A
形式地址:指令字中的地址
有效地址:操作数的真实地址
约定:指令字长=机器字长=存储字长
1 立即寻址
形式地址就是操作数