7-指令系统
Posted PacosonSWJTU
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7-指令系统相关的知识,希望对你有一定的参考价值。
README】
1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;
机器指令:
- CPU能够识别并且执行的操作命令;有可以理解为不同cpu,在生产时预设了一组或一簇指令;
指令集:
- cpu能够执行的所有机器指令的集合;指令集也是软硬件的交界面;
- 软件通过指令系统告诉硬件做什么操作;硬件通过指令系统执行操作并返回操作结果;
【1】机器指令
指令字长: 一条指令的长度有多少位
【1.1】指令的一般格式
操作码字段 | 地址码字段 |
【1.1.1】操作码
操作码: 指出机器做什么操作?此外还有些操作码指出机器应该对什么类型的数据进行操作;
长度固定: 为了译码方便,译码器电路简单;
3)扩展操作码技术
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】地址码
地址码指的是内存地址;
1)四地址指令:
- 它的寻址范围是2^6=64;内存寻址范围太小了,只能寻址到64个内存单元;
那如何增加指令寻址范围?
- 移除A4地址:A4存储了下一条指令地址; 而下一条指令地址存储在PC寄存器中,而不是当前指令中;这样就形成了三地址指令;
2)三地址的指令:
- 它的寻址范围是 2^8=256;照样很小;继续改进;
3)二地址指令:
- 移除A3地址码,用A1或A2存储计算结果;所以地址码就只有2个;寻址范围为 2^12=4k个存内存单元; 还是很小 ;
4)一地址指令
- 用ACC累加寄存器代替A1或A2;所以移除A2,指令中可以只保留一个数的地址;另一个操作数保存在ACC寄存器;
- 寻址范围:2^24=16M; 寻址范围大大增加 ;
- (ACC可以使用隐含寻址的方式)
5)零地址:无地址码;
- 如,计算ACC中的操作数是否等于0 ;
- 如,add指令计算栈顶的两个操作数的和,并将和保存在栈顶;就不需要地址码;
【1.2】 指令字长
操作码:
- 指出机器做什么操作?此外还有些操作码指出机器应该对什么类型的数据进行操作;
长度固定:
- 为了译码方便,译码器电路简单;
【小结】指令操作码与地址码
1)用一些硬件资源代替指令字中的地址码:
- 如ACC累加寄存器(隐含寻址)存储操作数,这样指令中就可以只存储一个操作数的地址;而无需存储两个操作数的地址;
2)当指令的地址字段为寄存器时;
- 三地址, OP R1 R2 R3 ; R1 R2 R3地址指的是寄存器的地址; 这样就直接访问寄存器,而不是访问内存;
【2】操作数类型和操作种类
操作数:指的是指令要处理的数据;
操作数的类型:内存地址,或数字,或字符,或逻辑数;
1)数据在存储器中的两种存放方式:
- 大端方式:(内存字地址就是数据高字节所在地址)数据高字节放在内存高地址,数据低字节放在内存低地址;
- 小端方式:(内存字地址就是数据低字节所在地址)数据低字节放在高地址,高字节放在低地址;
2)字节编址
2.1)方法1:从任意位置开始存储;
存储字长64位(8字节):
- 内存的数据位(MDR寄存器)是64位,每次访存可以存取64bit的数据;
机器字长32位(4字节):
- 寄存器的空间是32位,每次只能传输4字节数据;
机器字长:CPU一次能处理数据的位数,通常与CPU的寄存器位数有关。 存储字长:存储器中一个存储单元(存储地址)所存储的二进制代码的位数,即cpu中的MDR(数据寄存器)的位数。 指令字长:计算机指令字的位数。 数据字长:计算机数据存储所占用的位数。 上述定义的字长都必须是字节的整数倍; |
上述缺点有1个例子:一个数据跨了2个存储字进行存储;比如各占半个;这个时候就需要2个访存,每次取半个存储字;
2.2)方法2:从一个存储字的起始位置(每个存储字或机器字占4字节)开始访问;
缺点:
- 浪费存储空间;
问题:有没有一种方式可以减少存储空间浪费,又可以保证任何一种类型的数据(小于存储字长)在一个存取周期当中,都可以进行访问?
2.3)方法3:边界对准方式(从内存地址的整数倍位置开始访问) ;
以机器字长32位=4个字节为例;
数据存放的起始地址是数据长度(如8位或16位)的整数倍
【2.3】 操作类型
【3】 寻址方式
参见 指令寻址方式与数据寻址方式_PacosonSWJTU的博客-CSDN博客
【4】 指令格式举例
指令集举例:
【4.1】IBM360 CPU的指令格式
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的指令格式
【5】RISC技术
RISC: 精简指令集计算机;
CISC: 复杂指令集计算机;
RISC技术作用: 把20%的高频简单指令组合形成80%的低频指令;
操作码都是寄存器对内存的传输;
以上是关于7-指令系统的主要内容,如果未能解决你的问题,请参考以下文章