指令系统


机器指令

指令的一般格式

指令是由操作码和地址码两部分组成的。

操作码

操作码是用来指明该指令所要完成的操作,操作码的长度可以是固定的,也可以是变化的。

  • 固定长度:将操作码集中放置在指令字的一个字段内,用于指令字长较长的情况
  • 长度可变:将操作码分散在指令字的不同字段中,用于指令字长较短的情况

扩展操作码技术

操作码的位数随地址数的减少而减少

假设指令中OP代表操作码,Ai代表地址码,则拓展操作码过程如图所示:

如图可得:

  • 最多15条三地址指令
  • 最多15条二地址指令
  • 最多15条一地址指令
  • 16条零地址指令

三地址指令操作码每减少一种最多可多构成2^4种二地址指令;二地址指令操作码每减少一种最多可多构成2^4中一地址指令

地址码

地址码用来指出该指令的源操作数的地址(一个或两个)、结果的地址以及下一条指令的地址。

  • 四地址指令

这种指令的地址字段有四个,格式如下:

A1是第一操作数的地址,A2是第二操作数的地址,A3是结果的地址,A4是下一条指令的地址

该指令完成(A1)OP(A2)—>A3的操作,操作过程中共访存4次(取指令1次,取两个操作数2次,存放结果1次),如果指令字长32位,OP占8位,每个地址字段各占6位,则指令的直接寻址范围只有2^6 = 64个字节。

因为程序中的大多数指令是顺序执行的,PC存放当前指令的地址,又可以自动+1,因此A4可以省去,得到三地址指令。

  • 三地址指令

三地址指令只有三个地址,可完成(A1)OP(A2)—>A3的操作,访存次数仍未4次,设OP认为8位,则三个地址段各占8位,寻址范围为2^8 = 256字节

每次运算得到的结果并不需要都放到主存中,可以存放在CPU的寄存器中(如ACC),这样可以省去地址A3,得到二地址指令。

  • 二地址指令

二地址指令只有两个地址,可完成(A1)OP(A2)—>A1的操作,访存次数为4次,如果结果放在ACC中的话,访存次数可减少为3次,此时的寻址范围为2^12 = 4K

如果将一个操作数的地址隐含在ACC中,则指令字只需给出一个地址码,构成一地址指令

  • 一地址指令

一地址指令只有一个地址,可完成(ACC)OP(A1)—>ACC的操作,这样完成一条指令只需访存2次,直接寻址范围扩大到了2^24 = 16M

  • 零地址指令

零地址指令在指令字中不设地址码,例如进栈、出栈这类操作。

指令字长

影响指令字长的因素:

  • 操作码的长度
  • 操作数地址的长度
  • 操作数地址的个数

指令字长如果是固定的,指令字长可以等于存储字长,也可以比存储字长短;指令字长如果是可变的,字长通常是按字节的倍数进行变化

操作数类型和操作类型

操作数类型

  • 地址:可视为无符号整数
  • 数字:包括定点数、浮点数、十进制数
  • 字符:ASCII表
  • 逻辑数:进行逻辑运算时,01组合不是被看作算数数字,而是看作逻辑数

数据在存储器中的存放方式

1.大端法和小端法:具体情况参考存储器之主存储器,文中有详细描述

2.字节编址,数据在存储器中的存放方式(存储字长64位,机器字长32位)

  • 从任意位置开始存储

优点:接着前面存储结束的位置存储数据,不浪费存储资源

缺点:除了访问一个字节之外,访问其他任何类型的数据都可能花费两个存储周期的时间(数据边界没有对准存储单元的边界,数据可能存放在两个存储单元中,所以需要访问两次)。读写控制比较复杂

  • 从一个存储字的起始位置开始访问

优点:无论访问何种类型的数据,在一个存储周期内均可完成,读写控制简单

缺点:浪费了存储资源

  • 从地址的整数倍位置开始访问

一个字节的数据可以存放在内存单元的任意位置

两个字节的数据可以存放在内存中地址是偶数的位置

4个字节的数据可以存放在内存中地址是4的整数倍的位置

……

数据存放的其实地址是数据长度(按照字节计算)的整数倍

这种方案是前两种方案的折衷,在一个周期内可以完成数据的存取,空间浪费也不太严重

操作类型

  • 数据传送

    目的 举例
    寄存器 寄存器 MOVE
    寄存器 存储器 STORE、MOVE、PUSH
    存储器 寄存器 LOAD、MOVE、POP
    存储器 存储器 MOVE
  • 算数逻辑操作:实现算数运算与逻辑运算

  • 移位操作:算数移位、逻辑移位、循环移位

  • 转移操作:

    无条件转移(JMP)

    条件转移(结果为0转 JZ、结果溢出转 JO、结果有进位转 JC、跳过一条指令 SKP)

    调用和返回(CALL和RETURN)

    陷阱与陷阱指令:陷阱(异常?)是意外事故的中断。一般不提供给用户直接使用,而作为隐指令由CPU自动执行;也可以设置供用户使用的陷阱指令,完成系统调用(软中断)

  • 输入输出操作

寻址方式

寻址方式是指确定本条指令的操作数地址,以及下一条要执行的指令的指令地址的方式。

按照定义,寻址方式可以分为指令寻址和数据寻址两大类。

指令寻址

指令寻址比较简单,分为顺序寻址和跳跃寻址。

  • 顺序寻址:通过程序计数器PC+1,自动形成下一条指令的地址
  • 跳跃寻址:通过转移尅指令实现

数据寻址

数据寻址方式较多,在指令字中必须设置一字段来指明属于哪种寻址方式。指令的地址码字段通常不代表操作数的真实地址,称为形式地址,记作A,操作数的真实地址叫做有效地址,记作EA,它由寻址方式和形式地址共同确定。因此指令的格式为:

假设 指令字长 = 存储字长 = 机器字长

  • 立即寻址:形式地址A就是操作数,指令执行阶段不访存,但A的位数限制了立即数的范围

  • 直接寻址:指令字中的形式地址A就是操作数的真实地址EA,优点是寻找操作数比较简单,执行阶段只访存一次,缺点是A的位数限制了指令的寻址范围,必须修改A的值才能修改操作数的地址

  • 隐含寻址:指令字中不明显的给出操作数地址,其地址隐含在操作码或某个寄存器中,比如一地址指令,指令字中少了一个地址字段,可缩短指令字长

  • 间接寻址:形式地址不直接指出操作数的地址,而是指出操作数有效地址所在的存储单元的地址,即有效地址由形式地址间接提供,EA = (A),指令执行阶段2次访存,可扩大寻址范围,便于编制程序

  • 寄存器寻址:在寄存器寻址的指令字中,地址码地段直接指出寄存器的编号,指令执行阶段不访存,执行速度快,而且寄存器的数目有限,可缩短指令字长。

  • 寄存器间接寻址:与间接寻址一样,只不过形式地址是寄存器的编号,该寄存器中存储着真实地址

  • 基址寻址:需设有基址寄存器BR,其操作数的有效地址EA等于指令字中的形式地址和基址寄存器中的内容(称为基地址)相加。即EA = A + (BR)

基址寄存器可采用隐式的和显式的两种。

(1)所谓隐式是在计算机内部专门设有一个基址寄存器BR,使用时用户不必明显的指出该基址寄存器,只需执行的寻址特征反映出基址寻址即可。

(2)显式是在一组通用寄存器中,有用户明确指出哪个据存起用作基址寄存器,存放基地址。

基址寻址可以扩大指令对主存的寻址范围,采用基址寻址可以实现全空间的访问,如将内存空间分为若干段,每段首地址存于基址寄存器中,段内便宜由指令字的形式地址给出,修改基址寄存器的内容,就可以访问主存的任一单元。

基址寻址有利于多道程序的编写,BR的内容由操作系统或管理程序确定。

  • 变址寻址:与基址寻址即为相似,其有效地址EA等于指令字中的形式地址与变址寄存器IX中的内容相加之和。即EA = A +(IX),IX变址寄存器为专用,通用寄存器也可以作为变址寄存器。变址寻址也可以扩大寻址范围,IX的内容由用户非定,执行过程中IX内容恶变,形式地址A内容不变

基址寻址和变址寻址的区别:

基址寻址主要用于为程序或数据分配存储空间,故基址寄存器的内容通常由操作系统或管理程序确定,而指令字中的A是可变的。

变址寻址的内容由用户设定,在执行过程中其值是可变的,而指令字中的A是不变的,主要用于处理数组问题。

  • 相对寻址:有效地址是将PC的内容(即当前指令的地址)与指令字中的形式地址A相加得到的,即EA=(PC)+A,相对寻址常被用做转移指令,A的位数决定寻址范围,位移量A可正可负,用补码表示。相对寻址的最大特点是转移地址不固定,可随PC值的变化而变化,对编写浮动程序特别有利。

  • 堆栈寻址:在堆栈寻址中指令字没有形式地址码字段,是一种零地址指令。堆栈即可用寄存器组(称为硬堆栈)实现,也可用主存的一部分空间作堆栈(称为软堆栈)。堆栈的运行方式分为先进先出和先进后出两种,栈顶地址由SP指针指出,栈底是高地址,堆栈寻址本质是寄存器间址,SP可视为寄存器。

RSIC技术

RSIC是精简指令系统计算机的英文缩写,与其相对应的是CISC,即复杂指令系统计算机。

RISC的主要特征

  • 选用使用品读较高的一些简单指令,复杂指令的功能由简单执行来组合
  • 指令长度固定、指令格式种类少、寻址方式少
  • 只有LOAD/STORE(取数/存数)指令访存,其余指令的操作都在寄存器中完成
  • CPU中有多个通用寄存器
  • 采用流水线技术,一个时钟周期内完成一条指令
  • 采用组合逻辑实现控制器

CISC的主要特征

  • 系统指令复杂庞大,各种指令使用频度相差大
  • 指令长度不固定、指令格式种类多、寻址方式多
  • 访存指令不受限制
  • 大多数指令需要多个时钟周期执行完毕
  • 采用微程序控制器

RISC和CISC的比较

  • RISC更能充分利用VLSI芯片的面积

  • RISC更能提高计算机运算速度

    指令数、指令格式、寻址方式少,通用寄存器多,采用组合逻辑 ,便于实现指令流水

  • RISC便于设计,可降低成本,提高可靠性

  • RISC不易实现指令系统兼容


文章作者: likai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 likai !
评论
 上一篇
python数据结构之队列 python数据结构之队列
概念与栈相似,队列也是线性结构的一种,队列内部的数据也是有序的。与栈不同的,数据项的添加在队列的一端,称为“队尾”,数据项的删除在队列的另一端,称为“队首”。 每次添加数据在队尾,移除数据在队首,这种排序原则称为先进先出(FIFO),队列只
2020-07-25
下一篇 
  目录