【计算机组成原理】指令系统-寻址

一、指令和数据的寻址方式

操作数或指令在存储器中的地址:某个操作数或某条指令存放在某个存储单元时其存储单元的编号

在存储器中,操作数或指令字写入或读出的方式,有地址指定方式、相联存储方式和堆栈存取方式。

寻找方式:当采用地址指定方式时,形成操作数或指令地址的方式。

寻址方式分为两类:指令寻址和数据寻址。

1)指令寻址:确定下一条预执行指令的指令地址

a、顺序寻址:(PC)+1->PC    程序计数器自动加1

b、跳跃寻址:由转移指令指出

2)数据寻址:确定本条指令的操作数地址

指令中所给出的地址码,并不一定是操作数的有效地址。

寻址过程就是把操作数的形式地址,变换为操作数的有效地址。

例如:一种单地址指令的结构如下所示,其中用X I D各字段组成该指令的操作数地址。

二、寻址方式

1、隐含寻址(操作数在累加寄存器中)

在指令中不明显的给出而是隐含着操作数的地址

例如:单地址的指令格式,没有在地址字段指明第二操作数地址,而是规定累加寄存器AL或AX作为第二操作数地址,AL或AX对单地址指令格式来说是隐含地址

eg: MOV AL ,LSRC_BYTE

      MUL RSRC_BYTE  

ADD 寻址特征 A

操作数地址隐含在操作码中,(寻址特征指明寻址类型)。

另一个操作数隐含在ACC中 

先在内存中地址为A的地方找到一个操作数,另一个操作数隐含在寄存器ACC里,从ACC里取出另外一个操作数,然后和给出的A地址中的数相加暂存在ACC中。

2、立即寻址

形式地址A就是操作数本身

OP 立即寻址特性 # A
  • 指令执行阶段不访存
  • A的位数限制了立即数的范围

3、直接寻址

EA=A

直接根据读内存找到操作数,形式地址不需要经过任何处理。

  • 执行阶段访问一次存储器
  • A的位数决定了该指令操作数的寻址范围

MOV AX,[2222H]:将有效地址为2222H的内存单元的内容读到累加器AX中

4、间接寻址

EA=(A)

有效地址由形式地址间接提供,形式地址是操作数的地址的地址

OP 间接寻址标识   A

根据A的内容到内存中寻找到的是操作的数地址,再根据这个地址去找操作数。

  • 执行指令阶段2次访存
  • 可扩大寻址范围

5、寄存器寻址

EA=R1

形式地址是寄存器的编号,直接去寄存器中寻址操作数。

  • 执行阶段不访存,只访问寄存器,执行速度快

6、寄存器间接寻址

操作数里存放的是寄存器的编号,寄存器中存的不是操作数而是操作数的有效地址。所以操作数在存储器里。

  • 有效地址在寄存器中,操作数在存储器中,执行阶段访存。

7、偏移寻址

一种强有力的寻址方式  EA=A+(R)    形式地址需要和另一个寄存器中的地址相加

形式地址A是显示的

另一个地址字段隐含在某个专用的寄存器R中。

常用的三个偏移寻址方式是:相对寻址  基址寻址  变址寻址(根据寄存器的不同类型来区分的)

7.1 相对寻址

A是相对于当前指令的位移量(可正   可负  补码)

EX=A+(PC)    ----PC程序计数器  PC存储当前正在执行指令的地址 

  • A的位数决定操作数的寻址范围

7.2、基址寻址

EA=A+(BR)   BR为基地址寄存器  (Base Register)

  • 可扩大寻址范围

7.3、变址寻址

EA=A+(IX)  IX为变址寄存器(专用)  通用寄存器也可以作为变址寄存器

 

  • 可扩大寻址范围
  • 在程序执行的过程中IX内容可变,形式地址A不变
  • 便于处理数组问题

8、堆栈寻址

例:某16位机器所使用的指令格式和寻址方式如下所示,该机有两个20位基址寄存器,4个16位变址寄存器,十六个16位通用寄存器,指令汇编格式中S(源),D(目标)都是通用寄存器。M是主存中的一个单元。三种指令的操作码分别是MOV(OP)=(A)h ,STA(OP)=(1B) LDA(OP)=3C)h   MOV是传送指令,STA为写数指令 LDA为读数指令

要求:1、分析三种指令的指令格式和寻址方式特点

2、CPU完成哪一种操作锁化时间最短?哪一种操作所花时间最长,第二种指令的执行时间有时会等于第三种指令的执行时间吗?

3、下列情况下每个十六进制指令分别代表什么?如果有编码不正确,如何改进才能成为合法指令?

  1. (F0F1)H(3CD2)H               ---32位   
  2. (2856)H                               --16位
  3.    (6FD6)H                           --16位
  4. (IC2)H                                --16位

答:1、MOV:单字长,二地址指令属于RR指令  

       STA:双字长,二地址指令,RS指令  S为基址寄存器或变址寄存器

       LDA:双字长,二地址指令,RS指令 S为20位地址。

2、MOV单字长取出只需要一次访存,第一个不访问存储器要快。第二种还需要计算有效地址并对存储器进行访问。第二种指令所花费的时间不等于第三种,第三种无需进行有效地址的计算。

3、根据条件。MOV(OP)=(A)h=001010 

  STA(OP)=(1B)h =011011

LDA(OP)=(3C)h=111100

(F1F1)h(3CD2)h=(1111 0000 1111 0001 0011 1100 1101 0010)b

正确,表明吧主存(13cd2)h地址单元的内存取至15号寄存器

(2856)H=(0010 1000  0101 0110)b  单字长指令表明吧寄存器6的内容传送到寄存器5号

(6FD6)H=0110 1111 1101 0110b操作码不对  应修改为(28D6)h

(1C2)H=00000001 1100 0010b操作码不对 应修改为(28C2)h

三、CISC何如RISC

复杂性指令系统计算机和精简型指令系统计算机

1、精简指令系统:选取使用频率最高的一些简单指令,指令条数少,   长度固定,指令少。

 例:在SPARC中,有一些指令没有选入指令系统,但很容易使用指令集中的另外一条指令来替代实现

下表左半部列出了6条指令的功能,请在表的右半部填入替代指令及实现方法

答:因为SPARC约定R0的内容恒为0,而且立即数可以作为一个操作数来处理,所以某些指令可以替代实现。

指令   功能  替换指令 实现方法
MOVE 寄存器间传送数据 ADD Rs+R0->Rd
INC 寄存器内容加1 ADD 立即数imm13=1,作为操作数
DEC 寄存器内容减1 SUB 立即数imm13=-1 作为操作数
NEG 取负数 SUB R0-Rs->Rd
NOT 取反码 XOR 立即数imm13=-1 作为操作数
CLR 清除寄存器 ADD R0+R0=Rd

例、一条指令存储在存储器中的地址为300的地方,其操作数地址字段为301,地址字段的值为400,处理器中寄存器R1中包含数据200,在以下指令寻址方式下,求操作数的有效地址。

1)直接寻址

2)立即数寻址

3)相对寻址

4)寄存器(R1)间接寻址

5)以R1为变址寄存器的变址寻址

300中是操作码  301是地址码说明占两个地址

答、1)400

2) 400是数本身 其地址是301

3)PC+400

4)寄存器间接寻址,寄存器里存的就是有效地址200

5)以R1为变址寄存器的变址寻址:操作数的有效地址为=200+400

格式表明有8个通用寄存器(产后度为16位),X指定寻址方式,主存实际容量为156K字。

1)假设不用通用寄存器也能直接访问主存中的每一个单元,并假设操作码域OP=6为,请问地址码域应

分配多少位?指令字长度应有多少位?

2)假设X=11时,指定的某个通用寄存器用做基址寄存器,请提出一个硬件设计规则,使得被指定的通用寄存器能访问1M主存空间中的每一个单元

答:1)主存容量为256K 地址域码为18位,指令的长度为6+2+3+18=32位

2)1M需要20位地址

此时指定的通用寄存器用做基址寄存器,长度为16位,不能覆盖1M字空间,可采用基址寄存器左移4位,低位补0,形参20位的基地址,然后与质量字形式地址相加得到有效地址,可以访问1M字空间的任意一个单元。

例:假设寄存器中R中的数值为1000,地址为1000的寄存器中存储的数据为2000,地址2000的存储器中存储的数据为3000,问在以下寻址方式中访问的指令操作数的值是什么?

1)寄存器寻址R   

寄存器寻址,寄存器中的值就是操作数所以值为1000

2)寄存器间接寻址(R)

R中存的是地址,所以数据是2000

3)直接寻址1000

形式地址是1000,操作数是2000

4)存储器的间接寻址(1000)

地址1000中存放的2000是形式地址 2000中存放的才是数据,所以操作数是3000

5)立即数寻址 #2000

立即寻址里面存放的就是操作数本身,所以操作数是2000

例、某计算机字长为16位,主存地址空间大小为128k,按字编址,采用单字长指令格式,指令各字段定义如下

转移指令采用相对寻址,相对偏移是用补码表示,寻址方式定义如下

Ms/Md 寻址方式 助记符 含义
000B 寄存器直接 Rn 操作数=(Rn)
001B 寄存器间接 (Rn) 操作数等于((Rn))
010B 寄存器间接。自增 (Rn)+ 操作数=((Rn)) (Rn)+1->Rn
011B 相对 D(Rn) 转移目标地址=(PC)+(Rn)

(X)表示有存储地址X或寄存器X的内容

1)该指令系统最多可有多少指令?该计算机最多有多少个通用寄存器?存储地址的寄存器(MAR)和存储数据的寄存器(MDR)至少各徐多少位?

答:操作码有4位所以指令最多有1的四次方16条指令,

指令操作数占6位,其中3位指示寻址方式,寄存器编号为3位,所以该计算机最多可有2的三次方也就是8个通用寄存器

计算机字长16位,所以存储器寄存器(MDR)至少为16位。

主存空间为128KB,按字(16位)编址,则寻址范围为0~64K 存储器地址寄存器(MAR)需16位(2的16次方=64K)

2)转移指令的目标地址范围是多少?

答:16位计算机通用寄存器也是16位,则指令中寻址范围至少可达0~2的16次方-1

另一方面,主存地址空间为2的16次方(64K)则寻址范围也应该大于等于64K,故转移指令的目标范围为0~2的16次方-1

3)若操作码0010B表示加法操作(助记符为add),寄存器R4和R5的编号分别为100B和101B,R4的内容为1234H,R5的内容为5678H,地址1234H的内容为5678H,5678H中的内容为1234H,则汇编语言为add(R4),(R5)+

对应的机器码是什么(十六进制)?该指令操作执行后,哪些寄存器和存储单元的内容会改变?改变后的内容是什么?

答:R4是间接寻址  R5是间接寻址+自增

操作码         源寻址方式      源寄存器       目标寻址方式               目标寄存器

0010                 001                100                    010                                  101  

该指令的功能是将R4内容所指存储器单元的内容(源)与R5内容所指存储器单元(目标)的内容相加后,写到R5内容所指的存储器单元,即

R4的内容:1234H,R4内容所指存储器单元内容:5678H

R5的内容:5678H,R5内容所指存储器单元内容:1234H

目标寄存器R5自加:5678H+1=5679H

所以执行后,目标寄存器R5目标寄存器内容所指的存储器单元将改变,新R5=5679H

R5所指存储单元(地址5678H的内容)=68ACH

例:某机器字长16位,主存按字节编址,转移指令草原相对寻址,由两个字节组成,第一字节为操作码字段,第二字节为相对位移量字段,假定取指令时,每取一个字节PC自动+1,若某转移指令所在主存地址为2000H,相对位移量字段的内容为06H,则该转移指令成功转以后的目标地址是

A:2006H   B2007H C:2008H D:2009H

答:1个字节8位,机器字长16位  转移指令占2个字节, 读操作码是PC+1=2001   读偏移地址又+1变为2002H ,用2002和偏移量06相加,得2008H 选D

原文地址:https://www.cnblogs.com/dream-to-pku/p/11599855.html