-
1 教学内容
-
2 教学视频
本节教学内容:
1、机器指令
2、操作数类型
3、操作类型
教学目的和要求:
1、理解指令的一般格式及字长;
2、掌握操作数的类型;
3、掌握数据在存储器中的存放方式;
4、掌握操作类型;
5、了解RISC简介及与CISC的比较。
重点:1、指令的一般格式;
2、操作数的类型
难点:1、理解补数据在存储器中的存放方式和操作类型;
2、RISC简介及与CISC的区别。
第1讲指令的一般格式、字长和操作数类型
一、知识要点
1、指令的一般格式
2、指令字长
3、操作数类型
二、教学安排
首先,介绍机器指令的一般格式,以及指令的扩展方法,然后介绍指令字长,机器中常见的操作数类型,这部分,指令的一般格式是重点,要让学生理解操作码和地址码的区别和联系。
三、教学内容
1、机器语言的概念
机器语言(machine language)是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。
机器码有时也被称为原生码(Native Code),这个名词比较强调某种编程语言或库,它与运行平台相关的部份。
机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指
指令系统
指令系统
令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。[2] 不同型号的计算机其机器语言是不相通的,按着一种计算机的机器指令编制的程序,不能在另一种计算机上执行。
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如,操作码字段和地址码字段,其中操作码指明了指令的操作性质及功能,地址码则给出了操作数或操作数的地址。[3]
用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。
机器语言是微处理器理解和使用的,用于控制它的操作二进制代码。
8086到Pentium的机器语言指令长度可以从1字节到13字节。
尽管机器语言好像是很复杂的,然而它是有规律的。
存在着多至100000种机器语言的指令。这意味着不能把这些种类全部列出来。
2、指令的一般格式
计算机的指令格式与机器的字长、存储器的容量及指令的功能都有很大的关系。从便于程序设计、增加基本操作并行性、提高指令功能的角度来看,指令中应包含多种信息。但在有些指令中,由于部分信息可能无用,这将浪费指令所占的存储空间,并增加了访存次数,也许反而会影响速度。因此,如何合理、科学地设计指令格式,使指令既能给出足够的信息,又使其长度尽可能地与机器的字长相匹配,以节省存储空间,缩短取值时间,提高机器的性能,这是指令格式设计中的一个重要问题。
计算机是通过执行指令来处理各种数据的。为了指出数据的来源、操作结果的去向及所执行的操作,一条指令必须包含下列信息:
(1)操作码。它具体说明了操作的性质及功能。一台计算机可能有几十条至几百条指令,每一条指令都有一个相应的操作码,计算机通过识别该操作码来完成不同的操作。
(2)操作数的地址。CPU通过该地址就可以取得所需的操作数。
(3)操作结果的存储地址。把对操作数的处理所产生的结果保存在该地址中,以便再次使用。
(4)下条指令的地址。执行程序时,大多数指令按顺序依次从主存中取出执行,只有在遇到转移指令时,程序的执行顺序才会改变。为了压缩指令的长度,可以用一个程序计数器(ProgramCounter,PC)存放指令地址。每执行一条指令,PC的指令地址就自动+1(设该指令只占一个主存单元),指出将要执行的下一条指令的地址。当遇到执行转移指令时,则用转移地址修改PC的内容。由于使用了PC,指令中就不必明显地给出下一条将要执行指令的地址。
一条指令实际上包括两种信息即操作码和地址码,如下图所示。操作码(OperationCode,OP)用来表示该指令所要完成的操作(如加、减、乘、除、数据传送等),其长度取决于指令系统中的指令条数。地址码用来描述该指令的操作对象,它或者直接给出操作数,或者指出操作数的存储器地址或寄存器地址(即寄存器名)。

指令包括操作码域和地址域两部分。根据地址域所涉及的地址数量,常见的指令格式有以下几种。
①四地址指令:这种指令的地址字段有4个,其格式如下,OP为操作码;A1为第一操作数地址;A2为第二操作数地址;A3为结果地址;A4为下一条指令的地址,该指令完成(A1)OP(A2)A3的操作。

②三地址指令:其格式如下,一般地址域中A1、A2分别确定第一、第二操作数地址,A3确定结果地址。下一条指令的地址通常由程序计数器按顺序给出。

③二地址指令:地址域中A1确定第一操作数地址,A2同时确定第二操作数地址和结果地址。

④单地址指令:地址域中A1确定第一操作数地址。固定使用某个寄存器存放第二操作数和操作结果。因而在指令中隐含了它们的地址。

⑤零地址指令:在堆栈型计算机中,操作数一般存放在下推堆栈顶的两个单元中,结果又放入栈顶,地址均被隐含,因而大多数指令只有操作码而没有地址域。
可变地址数指令:地址域所涉及的地址的数量随操作定义而改变。如有的计算机的指令中的地址数可少至0个,多至6个。
操作码长度不固定会增加指令译码和分析的难度,使控制器的设计复杂。通常采用扩展操作码技术,使操作码的长度随地址数的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长,如下图所示是一种扩展操作码的安排示意图。
图中指令字长为16位,其中4位为基本操作码字段OP,另有3个4位长的地址字段为A1、A2、A3。4位基本操作码若全部用于三地址指令,则有16条。若采用扩展码技术,当操作码取4位时,三地址指令最多为15条;操作码取8位时,二地址指令最多为15条‘操作码取12位时,一地址指令最多为15条;操作码取16位时,零地址指令为16条。共61条。可见操作码的位数随地址数的减少而增加。

例:某计算机指令字长为16位,操作数的地址码6位,指令有零地址、一地址、二地址三种格式。
(1)设操作码固定,若零地址指令有P种,一地址指令有Q种,则二地址指令最多有几种?
(2)采用扩展操作码技术,若二地址指令有X种,零地址指令有Y种,则一地址指令最多有几种?
解:(1)根据操作数地址码为6位,则二地址指令种操作码的位数为16-6-6=4。这4位操作码可有24=16种操作。由于操作码固定,则除去了零地址指令P种,一地址指令Q种,剩下二地址指令最多有16-P-Q种。
(2)采用扩展操作码技术,操作码位数可变,则二地址、一地址和零地址的操作码长度分别为4位、10位和16位。可见二地址指令操作码每减少一种,就可多构成26种一地址指令操作码;一地址指令操作码每减少一种,就可多构成26种零地址指令操作码。
因二地址指令有X种,则一地址指令最多有(24-X)×26种。设一地址指令有M种,则零地址指令最多有[(24-X)×26-M]×26种。
根据题中给出零地址指令有Y种,即
Y=[(24-X)×26-M]×26
则一地址指令
M=(24-X)×26-Y×26
在设计操作码不固定的指令系统时,应尽量考虑安排指令使用频度高的指令占用短的操作码,对使用频度低的指令可占用较长的操作码,这样可以缩短经常使用的指令的移码时间。当然,考虑操作码长度时也应考虑地址码的要求。
3、指令字长
指令字长是指机器指令中二进制代码的总位数。指令字长取决于从操作码的长度、操作数地址的长度和操作数地址的个数。不同的指令的字长是不同的。
早期计算机的存储字长一般和机器的指令字长与数据字长相等,故访问一次主存便可取一条指令或一个数据。随着计算机的应用范围的不断扩大,解题精度的不断提高,往往要求指令字长是可变的,数据字长也要求可变。为了适应指令和数据字长的可变性,其长度不由存储字长来确定,而用字节的个数来表示。1个字节(Byte)被定义为由8位(Bit)二进制代码组成。当然,此时存储字长、指令字长、数据字长三者可各不相同,但它们必须是字节的整数倍。一台机器的指令系统可以采用位数不同的指令,即指令的字长是可变的,如单字长指令、多字长指令。
四、互动及练习
本次课采用提问的互动方式:
1、某计算机指令字长为16位,指令有双操作数、单操作数和无操作数3种格式,每个操作数字段均用6位二进制表示,该指令系统共有m条(m<16)双操作数指令,并存在无操作数指令。若采用扩展操作码技术,那么最多还可设计出( )条单操作数指令。
在讲完指令操作码的扩展的知识后,请同学们先自己计算,然后通过讨论来分析此题,得出正确答案,让同学们自己核对自己做的过程和结果是否正确,加深印象。
2、什么时指令字长。
请同学们先谈谈自己的想法,然后引入指令字长的概念,在讲经概念时注意和机器字长、存储字长等概念区分,分析它们之间的共同点和区别。
第2讲操作数类型和操作类型
一、知识要点
1、操作数类型
2、数据在存储器中的存放方式
3、操作类型
4、RISC技术简介
5、RISC及与CISC的比较
二、教学安排
首先,介绍机器中常见的操作时类型,然后介绍数据在存储器中的存放方式,注意边界对齐的概念,介绍所有机器都有的几类通用的操作,这里要注意操作数类型和操作类型时两个不同的概念。最后介绍RISC技术,将RISC的特点与CISC的特点进行对比,重点在于RISC与CISC的比较。
三、教学内容
1、操作数类型
机器中常见的操作数类型有地址、数字、字符、逻辑数据等。
(1)地址
地址实际上也可看做是一种数据,在许多情况下要计算操作数的地址。这时,地址可被认为是一个无符号的整数,有关地址的计算问题将在后面章节讨论。
(2)数字
计算机中常见的数字有定点数、浮点数和十进制数。前两种数字在第6章中已经进行了介绍。
(3)字符
在应用计算机时,文本或者字符串也是一种常见的数据类型。由于计算机在处理信息过程中不能以简单的字符形式存储和传送,因此普遍采用ASCII码,它是很重要的一种字符编码。当然还有其他一些字符编码,如8位EBCDIC码,又称扩展BCD交换码,在此不作详述。
(4)逻辑数据
计算机除了作算术运算外,有时还需作逻辑运算,此时n个0和1的组合不是被看做算术数字,而是被看做逻辑数。例如,在ASCII码中的0110101,它表示十进制数5,若要将它转换为NBCD短十进制码,只需通过它与逻辑数0001111完成逻辑与运算,抽取低4位,即可获得0101。此时,有时希望存储一个不二类型的数据,它们的每一位都代表着真(1)和假(0),这时n个0和1组合的数就都被看做逻辑数。
2、数据在存储器中的存放方式
通常计算机中的数据存放在存储器或寄存器中,而寄存器的位数便可反映机器字长。一般机器字长可取字节的1、2、4、8倍,这样便于字符处理。在大、中型机器中字长为32位和64位,在微型计算机中字长从4位、8位逐渐发展到目前的16位、32位和64位。
由于不同的机器数据字长不同,每台机器处理的数据字长也不统一,例如奔腾处理器可处理8(字节)、16(字)、32(双字)、64(四字);PowerPC可处理8(字节)、16(半字)、32(字)、64(双字)。因此,为了便于硬件实现,通常要求多字节的数据在存储器的存放方式能满足“边界对齐”的要求,如下图所示。

现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如果存放在偶地址开始的地方,那么一个读周期就可以读出这32bit,而如果存放在奇地址开始的地方,就需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该32bit数据。显然在读取效率上下降很多。
3、操作类型
不同的机器,操作类型也是不同的,但几乎所有的机器都有以下几类通用的操作。
1)数据传送
数据传送包括寄存器与寄存器、寄存器与存储单元、存储单元与存储单元之间的传送。如从源到目的之间的传送、对存储器读(LOAD)和写(STORE)、交换源和目的的内容、置1、清零、进栈、出栈等。
2)算术逻辑操作
这类操作可实现算术运算(加、减、乘、除、增1、减1、取负数即求补)和逻辑运算(与、或、非、异或)。对于低档机而言,一般算术运算只支持最基本的二进制加减、比较、求补等,高档机还能支持浮点运算和十进制运算。
3)移位
移位可分为算术移位、逻辑移位和循环移位三种。算术移位和逻辑移位分别可实现对有符号数和无符号数乘以2n(左移)或整除以2n(右移)的运算,并且移位操作所需时间远比乘除操作执行时间短,因此,移位操作经常被用来代替简单的乘法和除法运算。
4)转移
在多数情况下,计算机是按顺序执行程序的每条指令的,但有时需要改变这种顺序,此刻可采用转移类指令来完成。转移指令按其转移特征又可分为无条件转移、条件转移、跳转、过程调用与返回、陷进等几种。
无条件转移
无条件转移不受任何条件约束,可直接把程序转移到下一条需执行指令的地址。例如“JMP X”,其功能是将指令地址无条件转至X。
条件转移
条件转移是根据当前指令的执行结果来决定是否需要转移。若条件满足,则转移;若条件不满足,则继续按顺序执行。一般机器都能提供一些条件码,这些条件码是某些操作的结果。
调用与返回
在编写程序时,有些具有特定功能的程序段会被反复使用。为避免重复编写,可将这些程序段设定为独立自程序,当需要执行某子程序时,只需用子程序调用指令即可。此外,计算机系统还提供了通用子程序,如申请资源、读写文件、控制外设等。需要时均可由用户直接调用,不必重新编写。
通常调用指令包括过程调用、系统调用和子程序调用。它可实现从一个程序转移到另一个程序的操作。
调用指令(CALL)一般与返回指令(RETURN)配合使用。CALL用于从当前的程序位置转至子程序的入口;RETURN用于子程序执行完后重新返回到原程序的断电。下图示意了调用(CALL)和返回(RETURN)指令在程序执行中的流程。

图(a)示意了主程序和子程序在主存所占空间。主程序从2000地址单元开始,并在2100处有一个调用指令,当执行到2100处指令时,CPU停止下一条顺序号为2101的指令,而转至2400执行SUB1子程序。在SUB1中又有两次调用子程序SUB2。每一次都将SUB1挂起,而执行SUB2。子程序末尾的RETURN指令可使CPU返回调用点。
图(b)示意了主程序àSUB1àSUB2àSUB1àSUB2àSUB1à主程序的执行流程。
需要注意以下几点。
子程序可在多处被调用。
子程序调用可出现在子程序中,即允许子程序嵌套。
每个CALL指令都对应一条RETURN指令。
由于可以在多处调用子程序,因此CPU必须记住返回地址,使子程序能准确返回。返回地址可存放在以下3处。
寄存器内。
子程序的入口地址。
栈顶内。
陷进与陷阱指令
陷进其实是一种意外事故的中断。例如,机器在允许中,可鞥会出现电源电压不稳定、存储器校验出差错、输入输出设备出现了故障、用户使用未被定义的指令、除数出现为0、运算结果溢出以及特权指令等种种意外事件,致使计算机不能正常工作。此时必须及时采取措施,否则将影响整个系统的正常运行。
陷阱指令,即TRAP,是CPU的内部事件,是由于系统调用引起处理机中断的指令,用于查看操作系统不明的。
陷阱指令(TRAP)是CPU的内部事件,是由于系统调用引起处理机中断的指令。
在系统调用中,TRAP负责由用户模式转换为内核模式,并将返回地址保存至堆栈中以备后用。
陷阱标志(TRAP FLAG,TF),用于调试时的单步方式操作。当TF位为1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF位为0时,CPU正常工作,不产生陷阱。
5)输入输出
对于I/O单独编址的计算机而言,通常设有输入输出指令,它完成从外设中的寄存器读入一个数据到CPU的寄存器内,或将数据从CPU的寄存器输出至某外设的寄存器中。
6)其他
其他包括等待指令、停机指令、空操作指令、开中断指令、关中断指令、置条件码指令等。
4、RISC技术简介
相信大家在日常电脑使用或CPU的广告介绍中时常听到见到“RISC”这个词,什么Pentium Ⅱ/Pro采用先进RISC技术……K6采用RISC86结构,从而……总之大凡稍高档点的中央处理器都称采用RISC技术,那么RISC究竟是什么东西呢?
首先,要了解RISC技术就该从计算机的指令谈起,我们都知道计算机的工作就是取指令、执行指令,一条指令一般给出的是操作码和地址码,这是基本的结构,然而指令又涉及以下几个问题。首先指令字长有多少位,是定字长还是变字长;其次,操作码结构需几位,位数是定量还是浮动量;再次,地址的结构和寻址方式如何。这种种因素使计算机指令产生了“简单指令”和“复杂指令”之分。70年代以前的计算机均用传统的CISC指令结构,即完全采用复杂指令来支持高级语言、应用程序和操作系统。这种PC不但成本高且效率较低,速度受限,后来人们发现机器执行的指令中85%左右的都是简单指令,复杂指令甚少,因此开始研制精简指令系统计算机(RISC)。自从Intel的Pentium问世以来(92年末),RISC技术更是得到了广泛的应用,并开始渗透到小、中、大型机领域,可谓发展前景一片光明。
影响因素编辑
下面具体谈谈RISC技术。CPU执行运算速度受三个因素的影响:
(1)程序中指令数I;
(2)每条指令执行所用周期数CPI;
(3)周期时间T。
优化措施编辑
这三者又有:程序执行时间=I*CPI*T,因此,从这个等式可看出减小其中任一个都可提高CPU的速度,因此RISC技术就从这三方面下手,对I、CPI、T进行优化改良,其措施如下:
1)采用多级指令流水线结构
采用流水线技术可使每一时刻都有多条指令重叠执行,以减小CPI的值,使CPU不浪费空周期。实例:Pentium Ⅱ/Pro/Celeron可同时发出执行十条指令,AMD-K6/K6-2可同时发出六条指令。
2)选取机器中使用频率最高的简单指令及部分复杂指令
这样可减小时钟周期数量,提高CPU速度,其实质是减小CPI下的值实现。实例:选取运算指令、加载、存储指令和转移指令作主指令集。
3)采用加载(Load)、存储(Store)结构
只允许Load和Store指令执行存储器操作,其余指令均对寄存器操作。实例:Amd-K6/K6-2、PⅡ/Celeron/Pro均支持对寄存器的直接操作和重新命名,并大大增加通用寄存器的数量。
4)延迟加载指令和转移指令
由于数据从存储器到寄存器存在二者速度差、转移指令要进行入口地址的计算,这使CPU执行速度大大受限,因此,RISC技术为保证流水线高速运行,在它们之间允许加一条不相关的可立即执行的指令,以提高速度。实例:主要体现于预测执行、非顺序执行和数据传输等方面,除Intel P54/55C不支持,像K6-2、PⅡ均支持。
5)采用高速缓存(cache)结构
为保证指令不间断地传送给CPU运算器,CPU设置了一定大小的Cache以扩展存储器的带宽,满足CPU频繁取指需求,一般有两个独立Cache,分别存放“指令+数据”。实例:PⅡ/Celeron:16K+16K,AMD-K6/K6-2为32K+32K,Cyrix MⅡ:64K(实也为2个32K Cache,此作共享Cache),PⅡ还加了L2 Cache,更是大幅提高了CPU速度。
CISC 的主要特征

5、RISC与CISC的比较

四、互动及练习
本次课采用提问的互动方式:
1、什么是RISC,RISC与CISC的区别是什么?
让同学们先谈谈自己的看法,然后RISC的简介集特征,关键在于分析RISC与CISC的区别,以便学生能够区分各自的应用领域。
2、根据计算机能做的事分析计算机有哪些类型的指令?
让同学们先谈谈自己的看法,然后引入机器操作类型的分类,即分别介绍各有哪些指令可以实现这些类型的操作。
五、课后作业
1、指令系统中采用不同寻址方式的目的主要是( )。
A.可降低指令译码难度 B. 可提高译码速度
C. 缩短指令字长,扩大寻址空间,提高编程灵活性
D.实现程序控制
2、一地址指令中,为完成两个数的算术运算,除地址译码指明的一个操作数外,另一个数常采用( )。
A. 堆栈寻址方式 B. 立即寻址方式
C. 间接寻址方式 D. 隐含寻址方式
3、二地址指令中,操作数的物理位置可安排在( )(多选)。
A.两个主存单元 B.两个寄存器
C.一个主存单元和一个寄存器 D.栈顶和次栈顶
4、操作数在寄存器中的寻址方式称为( )寻址。
A.寄存器直接 B. 寄存器间接 C.直接 D.间接
5、寄存器间接寻址方式中,操作数在( )中。
A. 通用寄存器 B. 专用寄存器 C.堆栈 D.主存单元
6、变址寻址方式中,操作数的有效地址是( )。
A. 基址寄存器内容加上形式地址(位移量)
B. 程序计数器内容加上形式地址
C. 变址寄存器内容加上形式地址
D. 只有形式地址
7、基址寻址方式中,操作数的有效地址是( )。
A. 基址寄存器内容加上形式地址(位移量)
B. 程序计数器内容加上形式地址
C. 变址寄存器内容加上形式地址
D. 只有形式地址
8、采用基址寻址可扩大寻址范围,且( )。
A.基址寄存器内容由用户确定,在程序执行过程中不可变
B.基址寄存器内容由用户确定,在程序执行过程中可变
C.基址寄存器内容由操作系统确定,在程序执行过程中不可变
D.基址寄存器内容由操作系统确定,在程序执行过程中可变
9、变址寻址和基址寻址的有效地址形成方式类似,但是( )
A. 变址寄存器的内容在程序执行过程中是不可变的
B. 在程序执行过程中,变址寄存器、基址寄存器的内容都可变
C.在程序执行过程中,变址寄存器、基址寄存器的内容都不可变
D.在程序执行过程中,变址寄存器中的内容可变、基址寄存器的内容不可变
10、堆栈寻址方式中,设A为累加器,SP为堆栈指示器,M为SP指示的栈顶单元,如果进栈操作的动作顺序是(SP)-1àSP,(A)àM ,那么出栈操作的动作顺序应为( )。
A. (M) àA,(SP)+1 àSP B. (SP)+1 àSP ,(M) àA
C. (M) àA,(SP)-1 àSP D. (SP)-1 àSP ,(M) àA
11、程序控制类指令的功能是( )。
A. 进行主存和CPU之间的数据传送
B.进行CPU和设备之间的数据传送
C. 进行主存与设备之间的数据传送
D. 改变程序执行的顺序
12、运算型指令的寻址和转移型指令的寻址不同点在于( )
A. 前者取操作数,后者决定程序转移地址
B. 前者决定程序转移地址,后者取操作数
C.前者是短指令,后者是长指令
D.前者是长指令,后者是短指令
13、指令的寻址方式有顺序和跳跃两种,采用跳跃寻址方式可以实现( )。
A.程序浮动 B.程序的无条件转移和浮动
C.程序的条件转移和浮动 D.程序的条件转移和无条件转移
14、设相对寻址的转移指令占两个字节,第一字节是操作码,第二字节是相对位移量,则转移的地址范围是( )。
A.128 B.254 C.255 D.256
15、一条指令中包含的信息有( )。
A.操作码、控制码 B.操作码、向量地址
C.操作码、地址码 D.操作码、条件码

