7-指令系统

README】

1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;

7-指令系统_第1张图片


7-指令系统_第2张图片

7-指令系统_第3张图片

机器指令:

  • CPU能够识别并且执行的操作命令;有可以理解为不同cpu,在生产时预设了一组或一簇指令;

指令集:

  • cpu能够执行的所有机器指令的集合;指令集也是软硬件的交界面
  • 软件通过指令系统告诉硬件做什么操作;硬件通过指令系统执行操作并返回操作结果;

【1】机器指令

7-指令系统_第4张图片

 指令字长: 一条指令的长度有多少位

【1.1】指令的一般格式

操作码字段 地址码字段

7-指令系统_第5张图片

【1.1.1】操作码

操作码: 指出机器做什么操作?此外还有些操作码指出机器应该对什么类型的数据进行操作;
长度固定: 为了译码方便,译码器电路简单;

3)扩展操作码技术

7-指令系统_第6张图片

3.1)为了支持操作码的长度可变,我们要采用扩展操作码技术来扩展操作码长度

  • OP:操作码部分;
  • A1,A2,A3:地址码;

假设操作码和地址码都是4位;所以指令集最多15条指令; 无法满足计算机进行复杂操作的需求;

3.2)总结:

  • 三地址指令:4位操作码,无标识,其中 15~12位是操作码;指令集最多15条指令;
  • 二地址指令:8位操作码,最高位4个1为标识,其中 11~8位是操作码;指令集最多15条指令;
  • 一地址指令:12位操作码,最高位8个1为标识,其中7~4操作码;指令集最多15条指令;
  • 零地址指令:16位操作码,最高位12个1为标识,其中3~0是操作码;指令集最多15条指令;

三地址指令操作码,每减少一种最多可多构成 2^4 种二地址指令;
如三地址指令的高4位是 1110,而不是1111;就可以多产生2^4种二地址指令;

3.3)问题1:哪些指令用长操作码,哪些用短操作码指令呢?

  • 高频使用的指令,用短操作码;
  • 低频使用的指令,用长操作码;

【1.1.2】地址码

地址码指的是内存地址;

7-指令系统_第7张图片

1)四地址指令:

  • 它的寻址范围是2^6=64;内存寻址范围太小了,只能寻址到64个内存单元;

那如何增加指令寻址范围?

  • 移除A4地址:A4存储了下一条指令地址; 而下一条指令地址存储在PC寄存器中,而不是当前指令中;这样就形成了三地址指令

2)三地址的指令:

  • 它的寻址范围是 2^8=256;照样很小;继续改进;

3)二地址指令:

  • 移除A3地址码,用A1或A2存储计算结果;所以地址码就只有2个;寻址范围为 2^12=4k个存内存单元; 还是很小 ;

7-指令系统_第8张图片

4)一地址指令

  • 用ACC累加寄存器代替A1或A2;所以移除A2,指令中可以只保留一个数的地址;另一个操作数保存在ACC寄存器;
  • 寻址范围:2^24=16M; 寻址范围大大增加 ;
  • (ACC可以使用隐含寻址的方式)

5)零地址:无地址码;

  • 如,计算ACC中的操作数是否等于0 ;
  • 如,add指令计算栈顶的两个操作数的和,并将和保存在栈顶;就不需要地址码;

【1.2】 指令字长

7-指令系统_第9张图片

操作码:

  • 指出机器做什么操作?此外还有些操作码指出机器应该对什么类型的数据进行操作;

长度固定:

  • 为了译码方便,译码器电路简单;

【小结】指令操作码与地址码

7-指令系统_第10张图片

1)用一些硬件资源代替指令字中的地址码:

  • 如ACC累加寄存器(隐含寻址)存储操作数,这样指令中就可以只存储一个操作数的地址;而无需存储两个操作数的地址;

2)当指令的地址字段为寄存器时

  • 三地址, OP R1 R2 R3 ; R1 R2 R3地址指的是寄存器的地址; 这样就直接访问寄存器,而不是访问内存;


【2】操作数类型和操作种类

操作数:指的是指令要处理的数据;
操作数的类型:内存地址,或数字,或字符,或逻辑数;

7-指令系统_第11张图片

1)数据在存储器中的两种存放方式:

  • 大端方式:(内存字地址就是数据高字节所在地址)数据高字节放在内存高地址,数据低字节放在内存低地址;
  • 小端方式:(内存字地址就是数据低字节所在地址)数据低字节放在高地址,高字节放在低地址;

2)字节编址

2.1)方法1:从任意位置开始存储;

7-指令系统_第12张图片

存储字长64位(8字节)

  • 内存的数据位(MDR寄存器)是64位,每次访存可以存取64bit的数据;

机器字长32位(4字节)

  • 寄存器的空间是32位,每次只能传输4字节数据;

机器字长:CPU一次能处理数据的位数,通常与CPU的寄存器位数有关。

存储字长:存储器中一个存储单元(存储地址)所存储的二进制代码的位数,即cpu中的MDR(数据寄存器)的位数。

指令字长:计算机指令字的位数。

数据字长:计算机数据存储所占用的位数。

上述定义的字长都必须是字节的整数倍;

 上述缺点有1个例子:一个数据跨了2个存储字进行存储;比如各占半个;这个时候就需要2个访存,每次取半个存储字;

2.2)方法2:从一个存储字的起始位置(每个存储字或机器字占4字节)开始访问;

7-指令系统_第13张图片

缺点:

  • 浪费存储空间;

问题:有没有一种方式可以减少存储空间浪费,又可以保证任何一种类型的数据(小于存储字长)在一个存取周期当中,都可以进行访问?

2.3)方法3:边界对准方式(从内存地址的整数倍位置开始访问)

以机器字长32位=4个字节为例;

7-指令系统_第14张图片

 数据存放的起始地址是数据长度(如8位或16位)的整数倍


【2.3】 操作类型

7-指令系统_第15张图片

 7-指令系统_第16张图片

 7-指令系统_第17张图片

7-指令系统_第18张图片 


【3】 寻址方式

参见 指令寻址方式与数据寻址方式_PacosonSWJTU的博客-CSDN博客

 


【4】 指令格式举例

7-指令系统_第19张图片

指令集举例:

【4.1】IBM360 CPU的指令格式

7-指令系统_第20张图片

IBM360 有5种指令格式:

  • 第1种地址格式,RR格式:二地址,即2个寄存器参加操作,结果保存在1个寄存器中;操作码的长度是8位; 指令长度16位;
  • 第2种地址格式, RX格式: 二地址,即寄存器与存储器,其中R1是寄存器,X是变址寄存器,B是基址寄存器,D是偏移地址;采用基址+变址的方式进行寻址;
  • 第3种地址格式,RS格式:三地址,即寄存器与存储器间的操作;如寄存器和内存间进行成组的数据传送,如把寄存器R1到R3(包括R1 R3)的数据成组的传送到内存中;内存的起始地址采用基址寻址的方式来做; B是基址寄存器,D是偏移地址;
  • 第4种地址格式,SI格式:二地址,即立即数与内存操作数进行操作;
  • 第5种地址格式,SS格式:二地址,即内存操作数与内存操作数进行操作;如内存中进行数据传输; B1,D1分别是源地址基址和偏移量;B2,D2是目的地址基址和偏移量;含义是把起始地址为B1+D1,长度为L的内存块数据转存到以B2+D2为起始地址的内存块中;

补充:

  • S=Storage=内存;
  • R=Resiter=寄存器;
  • X=变址寄存器;
  • B=基址寄存器;
  • D=偏移量;

【4.2】Intel 8086 CPU的指令格式

7-指令系统_第21张图片

 


【5】RISC技术

RISC: 精简指令集计算机;
CISC: 复杂指令集计算机;

7-指令系统_第22张图片

RISC技术作用: 把20%的高频简单指令组合形成80%的低频指令;

7-指令系统_第23张图片 

操作码都是寄存器对内存的传输;

7-指令系统_第24张图片 

7-指令系统_第25张图片 

 

你可能感兴趣的:(计算机组成原理,计算机组成原理)