指令系统
重点 #
- 什么是指令系统,指令的格式及其各部分的含义;
- 操作数的寻址方式,每种寻址方式的有效地址的计算方法;
- 利用扩展操作码法进行变长操作码指令格式的设计;
- 什么是CISC、RISC,各自的主要特点。
概述 #
指令:指示计算机执行某种操作的命令。
指令系统(指令集):一台计算机中所有机器指令的集合。
指令系统是和机器密切相关的,它体现了CPU的功能,不同CPU的指令系统是不同的。指令系统是计算机硬件与软件的接口。
指令系统设计主要是确定指令格式、数据类型、操作功能及操作数地址访问方式。基本过程如下:
- 首先拟出初步指令系统的设计及实现;
- 然后设计出指令系统的编译程序,进行模拟测试;
- 接着研究分析指令操作码、寻址方式的效能,进行指令系统的优化。
一、指令格式 #
一条指令由操作码和操作数地址码两部分组成。
一条指令一般应包含如下信息:
- 操作码:规定指令的操作及功能。
- 地址码:指明该指令的操作对象,可以是具体的数也可以是存放具体数的地址。
- 操作结果的存放地址:指令应明确操作的结果存放的位置。
- 下一条要执行指令的地址。
1、操作码 #
定长操作码:每条指令的操作码长度均相同。
- 优点:简化了计算机的硬件设计,提高了指令译码和识别速度。
- 缺点:可能会导致指令字长度过长。
- 适用于字长较长的大中型机计算机。 例如IBM360/370系列,操作码(OP)为8位。
变长操作码:指令操作码的长度不全相同。将使用频率较高而地址码要求较多的指令用较少位表示操作码;对地址码位数要求较少的指令,用较多位表示操作码;对无操作数的指令,整个指令字均用作操作码。
- 优点:在比较短的指令字中,既能表示出比较多的指令条数,又能尽量满足操作数地址的要求。
- 缺点:计算机的硬件设计复杂,指令译码和执行速度较慢。
2、地址码 #
地址码指出操作数的存贮位置,也就是指出操作数的来源、去处。
操作数可能的存储位置:
- 在指令中:最快;
- CPU内部的通用寄存器中:较快,与运算器速度匹配,例如:MOV R2,R1;
- 内存单元中:次之,与运算器速度不匹配,例如:MOV [R12],R1;
- 外设接口中的寄存器中:最慢,较少使用,例如:IN PORT。
根据指令中地址码部分地址的个数划分,指令格式可分为以下几种: 四地址指令、三地址指令、二地址指令、单地址指令、零地址指令。
3、指令字长 #
指令字长是一条指令中所包含的二进制位数,等于操作码长度与地址码长度之和。
指令字长与机器字长无固定关系,指令字长可以大于、等于、小于机器字长。考虑到指令存取方便,通常使指令字长与机器字长匹配。例如,单字长指令的指令字长等于机器字长;半字长指令的指令字长等于1/2机器字长;双字长指令的指令字长等于2倍机器字长。
4、变长操作码的设计 #
变长操作码的设计将操作码的设计与地址码的作为一个整体考虑,以形成高效、合理的指令编码。有些指令不用地址码或只用少量的地址码,因此可以把操作码扩展到这些地址码的位置,也称其为扩展操作码。在变长操作码中,较短的操作码不能为较长操作码的前缀。
例如,如果一个指令系统的操作码为2位,那么可以有00,01, 10,11这4条不同的指令。若把11作为保留,把操作码扩展到4位,那 么除了有00,01,10外,还有1100,1101,1110,1111,共7条指令。
二、寻址方式 #
当一个操作数或一条指令存放在某个存储单元时,该存储单元的编号,就是该操作数或指令在存储器中的地址。形成操作数或指令地址的方式,称为寻址方式。寻址方式分为两类,即指令寻址方式和数据寻址方式。
1、指令寻址方式 #
顺序寻址方式:指令在内存中按地址顺序存储, 当执行一段程序时,通常是一条指令接一条指令的执行,这种程序顺序执行的过程,称为指令的顺序寻址方式。使用程序计数器PC(又称指令指针寄存器IP)来记录指令的顺序号,该顺序号就是指令在内存中的地址。
转移寻址方式:所谓转移,是指下条指令的地址码不是由程序计数器PC给出,而是由本条指令给出。程序转移后,按新的指令地址开始顺序执行。当程序转移执行的顺序时,指令的寻址就采取转移寻址方式。
2、操作数的寻址方式 #
操作数的寻址就是寻找操作数的有效地址,其目的是寻找所需要的操作数。指令中地址码字段给出的地址为形式地址(此地址有时不能直接用于访问操作数,需经过某种运算才能得到有效地址)。
操作数通常有以下三种情况:
- 操作数在指令中:指令的地址码部分就是操作数本身,这种操作数称为立即数。
- 操作数在寄存器中:指令的地址码部分是某个寄存器,操作数就在该寄存器中。
- 操作数在内存中:指令的地址码部分是内存单元的地址,操作数就在该内存中。
约定:
- EA:操作数的有效地址(Effective Address)
- (X):X中的内容,X为寄存器时,则表示寄存器中的内容,X为存储器时,则表示存储器中的内容
- R:寄存器
- M:存储器
立即寻址 操作数包含在指令中,操作数由指令直接给出,称为立即数寻址方式,简称立即寻址。
- 优点:取指令时将操作码和一个操作数同时取出,不必再次访问存储器,提高了指令的执行速度。
- 缺点:操作数是指令的一部分,不能被修改,灵活性差;而且数值大小受到限制

直接寻址
直接寻址是指指令字中的形式地址 A 就是操作数的有效地址 EA ,即 EA=A 。按这个地址可直接在存储器中存入或取得操作数,因此通常把形式地址A又称为直接地址。如果用S表示操作数,那么S与地址码A的关系为:S=(EA)=(A)。

间接寻址
指令中的地址码部分给出的是存放操作数地址的内存单元的地址,这个地址叫做间接地址。其寻址方式称为间接寻址方式,简称间址。当采用一级间接寻址时,操作数 S 与指令格式中的地址码 A 的关系为:S=((A))。此外,还有多级间接寻址。

寄存器寻址
寄存器直接寻址:指令的地址码给出的是寄存器名/编号Ri,Ri 寄存器中存放操作数,则称为寄存器直接寻址。操作数S与指令格式中的Ri的关系为:S =(Ri);
寄存器间接寻址:寄存器间接寻址,是指令中地址字段的寄存器中存放的是操作数的地址。操作数S与指令格式中的Ri的关系为:S = ((Ri))。

基址寻址
指令中给出一个寄存器Rb和一个偏移量X,操作数的有效地址是指令中给出的寄存器的内容(基准地址A)与给出的偏移量X之和,即: EA=(Rb)+X。
用途:用于将程序的逻辑地址转换成主存物理地址。

变址寻址
将指令中给出的形式地址 A 与变址寄存器 Rx 中的内容相加,形成操作数的有效地址。即:EA=(RX)+形式地址A。
用途:数组、字符串中的元素的读写。

相对寻址
相对寻址是把程序计数器 PC 的内容加上指令格式中的形式地址而形成操作数的有效地址。EA=PC+形式地址(偏移量X),也称为程序计数器寻址。程序计数器的内容就是当前指令的下一条指令的地址。“相对”寻址,就可以看做相对于当前的指令地址而言。

堆栈寻址 堆栈与堆栈寻址的特点:
- 堆栈是数据访问具有“先进后出”特征的数据结构;
- 堆栈中数据的存取不需要提供地址,而是由存入的顺序决定取出的顺序;
- 数据的存取只能在栈顶进行。
堆栈寻址有两种方式,寄存器堆栈和存储器堆栈,寄存器堆栈访问速度快,但成本高,容量较小。


三、精简指令集计算机 #
根据计算机指令系统,计算机分为两大类:复杂指令集计算机,简称CISC(Complex Instruction Set Computer)和精简指令集计算机,简称RISC(Reduced Instruction Set Computer)。
CISC 设计的主要特点:机器功能强,指令条数多,指令系统庞大,研制周期长,系统效率低。
RISC思想:指令系统尽可能简单,尽量减少指令的执行时间以提高效率(指令格式一致,寻址方式简单,多用寄存器指令,少用访内存指令)。
评论
0评论功能待配置数据库后启用。