操作码字段 |
地址码字段 |
第4章 指令系统
4.1 知识要点扫描
4.1.1指令各式 图2-4-1 指令基本格式
1.指令的基本格式
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如图2-4-1所示。
其中操作码指明了指令的操作性质及功能,地址码则给出了操作数的地址。
地址码中的地址可以是主存的地址,也可以是寄存器的地址(编号),甚至可以是I/O设备的地址。
对于双操作数运算指令来说,需要操作数的地址、结果的地址以及下一条指令的地址,这些地址可以在指令中明显给出,称为显地址;也可以依照某种事先的约定,用隐含的地址给出,称为隐地址。根据显地址的个数有:三地址和二地址指令(通用寄存器指令)、一地址指令(累加型计算机)和零地址指令(堆栈型计算机)。
2.定长操作码指令格式
定长操作码以称为规整型编码,这是一种最简单的编码方法,操作码字段的位数和位置是固定的。为了能表示整个系统中的全部指令,指令的操作码字段应当有足够的位数。
假定指令系统共有m条指令,指令操作码字段的位数为N位,则应有如下关系式
所以。
定长编对于简化硬件设计,减少指令的译码时间是非常有利的。
3.扩展操作码指令格式
扩展操作码以称为非规整编码,操作码字段的位数不固定,且分散地放在指令字的不同位置上。这种方式能够有效地压缩指令中操作码字段的平均长度,显然,操作码字段的位数和位置不固定将增加指令译码和分析的难度,使控制器的设计复杂化。
典型的扩展操作码编码让操作数地址个数多的指令(三地址指令)的操作码字段短些,操作数地址个数少的指令(一或零地址指令)的操作码字段长些,这样既能充分地利用指令的各个字段,又能在不增加指令长度的情况下扩展操作码的位数,使它能表示更多的指令以。
4.1.2 指令的寻址方式
1.有效地址的概念
通常,把指令中地址码字段给出的地址称为形式地址(用字母A表示),这个地址可不能直接用来访问主存。形式地址经进某种运算而得到的能够直接访问主存的地址称为有效地址(用字母EA表示)。
2.数据寻址和指令寻址
寻址可以分为数据寻址和指令寻址。寻找下一条将要执行的指令地址称为指令寻址,寻找操作数的寻址称为数据寻址。指令寻址比较简单,又可以分为顺序寻址和跳跃寻址。而数据寻址方式种类较多,其最终目的都是寻找所需要的操作数。
顺序寻址可通过程序计数器加1,自动形成下一条指令的地址;跳跃建起则需要通过程序转移类指令实现。
3.常见寻址方式
(1)立即寻址
立即寻址是一种特殊的寻址方式,指令中在操作码字段后面的部分不是通常意义上的操作数地址,而是操作数本身。
(2)寄存器寻址
寄存器寻址指令的地址码部分给出某一个通用寄存器的编号Ri,这个指定的寄存器中存放着操作数。有效地址EA=Ri。这种方式可以缩短指令长度,提高指令的执行速度。
(3)直接寻址
指令中地址码字段给出的地址A就是操作数的有效地址,即形式地址等于有效地址:EA=A。由于这样给出的操作数地址是不能修改的,与程序本所在的位置无关,所以又叫绝对寻址方式。
(4)间接寻址
间接寻址意味着指令中给定的地址A不是操作数的地址,而是存放操作数地址的主存单元的地址,简称为操作数地址的地址,即EA=(A)。间接寻址的指令在执行阶段要多次访存,可扩大寻址范围,便于编制程序。
(5)寄存器间接寻址
寄存器间接寻址指令中的地址码给出某一通用寄存器的编号,在被指定的寄存器中存放操作数的有效地址,EA=(Ri),而操作数则存放在主存单元中。这种寻址方式的指令较短,并且在取指后只需一次访存便可得到操作数,因此指令执行的速度较间接寻址方式快。
(6)变址寻址
变址寻址就是把变址寄存器Rx的内容与指令中给出的形式地址A相加,形成操作数有效地址,即EA=(Rx)+A。Rx的内容称为变址值。
(7)基址寻址
基址寻址是将基址寄存器Rb的内容与指令中给出的位移量D相加,形成操作数有效地址,即EA=(Rb)+D。Rb的内容称为基址值。
(8)相对寻址
相对寻址是基址寻址的一种变通,由程序计数器(PC)提供基准地址,指令中的地址码字段作为位移量D,两者相加后得到操作数的有效地址,即EA=(PC)+D。位移量指出的是操作数和现行指令之间的相对位置。
(9)页面寻址
存储器的有效地址就被分为两部分:前部分为页面地址,后部为页内地址。页内地址是由指令的地址码自动直接提供,它与页面地址通过简单的拼装连接就可得到有效地址,无须进行计算,因此寻址迅速。根据页面地址的来源不同,页面寻址以可分为三种不同的方式。
①基页寻址,又称为零页寻址。由于页面的地址全等于0,所以有效地址EA=0//A。基页寻址实际就是直接寻址。
②当前页寻址。页面地址就等于程序计数器(PC)的高位部分的内容,所以有效地址EA=(PC)H//A,操作数S与指令本身处于同一页面中。
③页寄存器地址。页面地址取自页寄存器,与形式地址相拼接形成有效地址。
(10)堆栈寻址
堆栈是一种按特定顺序进行存取的存储区,这种特定的顺序可归结为“后进先出(LIFO)”或“先进后出(FILO)”。
寄存器堆栈由 一组专门的寄存器构成,又称为硬堆栈。这种堆栈的栈顶是固定的,寄存器组中各寄存器是互相连接的,它们之间具有对应位自动推移的功能,即可将一个寄存器的内容推移到相邻的另一个寄存器中去。
利用主存的一段区域构成的堆栈称为软堆栈,软堆栈的大小可变,栈底固定,栈顶浮动,故需要一个专门的硬件寄存器作为堆栈的栈顶,简称堆栈指针(SP)。
若软堆栈的栈底地址大于栈顶地址,且栈指针始终指向栈顶的满单元,则进栈时的操作:
(SP)-1→SP 修改栈指针
(A)→(A) 将A中的内容压入栈顶单元
出栈时操作:
((SP))→A 将栈顶单元的内容弹出送入A中
(SP)+1→SP 修改栈指针
上述10种寻址方式是计算机常用的基本寻址方式,可以单独使用,也可以把它们中的某几种组合在一起,如变址后再间接寻址、变址加基址寻址等,但并不是每一种计算机都使用所有的寻址方式。
4.1.3
CISC和RISC的基本概念
指令系统的发展有两种截然不同的方向,一种是增强原有指令的功能,设置更为复杂的新指令实现软件功能的硬化;另一种是减少指令各类和简化指令功能,提高指令的执行速度。前者称为复杂指令系统,后者称为精简指令系统。
基于复杂指令系统设计的计算机称为复杂指令系统计算机(CISC),基于精简指令系统设计的计算机称为精简指令系统计算机(RISC)。
RISC的中心思想是要求指令系统简化,尽量寄存器-寄存器操作指令,除去访存指令(Load和Store)外,其他指令的操作均在单周期内完成,指令格式力求一致,寻址方式尽可能减少,并提高编译的效率,最终达到加快机器处理速度的目的。表2-4-1所示为CISC和RISC的区别。
表2-4-1 CISC和RISC的区别
|
CISC |
RISC |
指令系统 |
复杂,庞大 |
简单,精简 |
指令数目 |
一般大于200条 |
一般小于100条 |
指令字长 |
不固定 |
等长 |
寻址方式 |
一般大于4 |
一般小于4 |
可访存指令 |
不加限制 |
只有LOAD/STORE指令 |
各种指令执行时间 |
相差较大 |
绝大多数在一个周期内完成 |
通用寄存器数量 |
较少 |
多 |
控制方式 |
绝大多数为微程序控制 |
绝大多数为硬布线控制 |