组原_指令寻址

目录

1. 数据存放和对齐

2. 指令寻址

3. 数据寻址铺垫知识

4. 数据寻址方式

4.1 立即寻址

4.2 直接寻址

4.3 间接寻址

4.4 寄存器寻址

4.5 寄存器间接寻址

4.6 隐含寻址


 

1. 数据存放和对齐

组原_指令寻址

 

按字节编址,可以有不同的寻址方式  ===> 按字节寻址、按半字寻址、按字寻址;
按字编址,最小取出的单元就是一个字,没办法直接取一个字节出来。若要拆出一个字节的话,需要软件来实现。

存储单元和数据都有自己的高位和低位。 ==> 两种存放方式:大端方式,小端方式
 

机器字长、指令字长、存储字长 三者之间没有固定的大小关系,但必须都是字节的整数倍。
其中,存储字长一般去字节的偶数倍,方便硬件的设计。

 

早期,习惯上会将存储字长和机器字长做成一样,方便两者之间的数据交流。
所以 单字长指令、半字长指令、双字长指令定义是跟机器字长去比,而不是存储字长。
如果三者的长度设计成一样,那么刚好取出一条指令只需一次访存,取出一个数据也是一次访存,可以减少多次访存的时间消耗

 

 

 

组原_指令寻址

 

因为取数据是一行一行取的。所以对齐不对齐影响的是访存次数。

对于4个字节的数据来说,对齐存储的情况下,每一次的起始地址都是自身长度(字节数量)的整数倍。
边界对齐 ==> 数据存放的起始地址(和字地址同),是它字节数量的整数倍。(对齐时,起始地址的特点)
                       为什么是字节数量的整数倍,因为是按字节编址的。

 

 

 

 

2. 指令寻址

存储器内的寻址是分析如何定位到某一个存储单元;
指令寻址是指出某个对象在存储器中哪个位置。 (主体不同、目标不同)            

 

组原_指令寻址

0+1+1+1 顺序执行三条指令后,遇到跳转指令 此时不自增,而是根据指令内容修改 PC 值。


跳跃寻址:由转移指令来修改 PC 值。  (所以不管顺序寻址还是跳跃寻址,CPU 都是到 PC 中找地址)

 

 

 

 

 

3. 数据寻址铺垫知识

组原_指令寻址

数据寻址就没有指令寻址那么简单了,因为数据类型很丰富。
操作数就是一条指令想要操作的对象,可以为 地址、数据、字符、逻辑数。
当一个操作数是一个地址,并且还是一个指令的地址的时候,此时很容易将指令寻址和数据寻址混乱。区分如下:

数据寻址过程
根据指令中的地址找到操作数 (此时操作数是一个地址) , 根据指令的操作码 对操作数操作。
所以数据寻址的过程是找到数据的过程。

指令寻址过程
CPU 按照 PC 的指示寻找到下一条指令。===>  根据 PC 提供的地址,取主存中取数据 (这个数据就是指令)。

 

 

 

组原_指令寻址

地址码的任务是定位到这条指令想要操作的对象。
对象的类型很丰富,寻找到对象的类型也很丰富,所以寻址特征出现了,它用来说明这条指令操作对象的寻址方式。
寻址方式的二进制代码叫做 寻址方式位。

 

地址码部分叫做形式地址,因为这个地址并不是直接对应到存储器当中的地址,而是有了这个地址之后,要根据寻址特征的要求转化成存储器中的一个实际地址。

数据寻址主要介绍,形式地址 (A) 根据寻址特征 如何转化成存储器中的有效地址 (EA)。

 

 

 

组原_指令寻址

 

 

 

 

 

4. 数据寻址方式

 

4.1 立即寻址

组原_指令寻址

假设指令字长为存储字长两倍,则需要取两次(即需要访问两次主存)。(当然,前提是边界对齐存储的情况) 。

【缺点改进办法】
要解除这个限制,那么可以将操作数放在主存中,这里存放的是操作数的主存地址。 ===>  直接寻址

 

 

 

 

4.2 直接寻址

组原_指令寻址

【缺点改进办法】
缺点一个是 操作数寻址范围有限,一个是直接给出操作数的地址,不易修改。  想修改的话 ===> 间接寻址。

 

 

 

 

4.3 间接寻址

组原_指令寻址


形式地址字段给出的还是一个地址,但是地址内容不是操作数3,而是 操作数3的地址;只有再根据操作数3的地址找到 3。
(换句话来说,形式地址的内容是 有效地址 EA=(A) )      这种定位方式就叫做间接寻址。 这里是一次间接。

在这种方式下, EA的地址是可以变动的(存储到不同的单元) , 换句话来说就是操作数的地址可以修改。
修改的不是操作数的地址,而是有效地址(操作数地址) 存放的地址。

 

 

组原_指令寻址

一次间接寻址找一次就ok 了,如果是多次间接寻址怎么判断哪一次结束?
解决 ==>  在存储单元前面增加一个位,当这个位存储的是1, 表示里面还是一个地址(非有效地址);当为0的时候,说明这次取的是有效地址。 得到有效地址后,下一次取的内容就是操作数了。

 

 

 

 

直接寻址和间接寻址都是和主存打交道,CPU 中的寄存器同样可以存储信息。

4.4 寄存器寻址

 

组原_指令寻址

基本模式和直接寻址是一样的,只不过操作数是存放在寄存器中 (不是在主存中),这里给出的地址是 寄存器的编号。 

EA = Ri

【缺点改进办法】
加入存储器  ===>  寄存器间接寻址

 

 

 

 

4.5 寄存器间接寻址

组原_指令寻址

和之前的间接寻址类似,只不过将第一次存储地址的单元换成了寄存器。
EA = (Ri)

 

 

 

 

4.6 隐含寻址

组原_指令寻址

计算机怎么知道另一个操作数隐含在 ACC 中?  ==>  通过操作码字段来表示

 

 

组原_指令寻址