首页 > 其他 > 详细

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

时间:2019-09-27 19:43:45      阅读:236      评论:0      收藏:0      [点我收藏+]

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

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

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

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

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

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、精简指令系统:选取使用频率最高的一些简单指令,指令条数少,   长度固定,指令少。

 

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!