第5章 指令系统 5.1 指令系统的发展 5.2 指令格式与数据表示 5.3寻址方式(编址方式) 5.4 指令类型与指令系统的兼容性 5.5 RISC和CISC 5.6 指令系统举例 5.7 机器语言、汇编语言和高级语言
本章重难点 1、指令系统的定义、作用 2、指令格式 3、寻址方式
5.1 指令系统的发展 计算机系统包含硬件和软件两部分: 5.1 指令系统的发展 计算机系统包含硬件和软件两部分: 硬件:由中央处理机(CPU)、存储器以及外部设备等组成的实际装置 软件:是为了方便用户使用计算机而编写的各种程序,最终转换成一系列机器指令后在计算机上执行 计算机的工作就是执行计算机程序来完成用户规定的功能,计算机程序由一系列机器指令组成,每一条指令都可以完成一个特定的操作,如算术运算或逻辑运算。
指令系统的定义:一台计算机能直接识别并执行的机器指令的集合. 指令系统的作用: 指令系统是硬件设计的任务书,是软件设计的基础,与计算机的性能有密切关系. 每条指令的功能必须通过硬件来实现,设置哪些指令应该有相应的硬件 结构来支持。因此指令系统能够反映计算机的硬件结构、具有哪些功能 计算机的性能不仅与机器的硬件性能有密切的关系,还与它的指令系统 有很大的关系。 如果指令系统中的指令复杂、通用性强、功能齐全,写出的程序相对较 短,效率较高,但是必须有相应的硬件结构 指令系统不仅是硬件逻辑设计的基础,也是软件程序员编制程序的基础, 决定如何使用计算机和计算机如何工作
硬件结构简单,指令系统也相对简单,指令系统一般只有定点加减、逻辑运算、数据传送和转移等十几至几十条最基本的指令,而且寻址方式简单。 1. 20世纪50年代和60年代早期: 硬件结构简单,指令系统也相对简单,指令系统一般只有定点加减、逻辑运算、数据传送和转移等十几至几十条最基本的指令,而且寻址方式简单。 2.到60年代中、后期: 还设置了乘除法运算指令、浮点运算指令、十进制运算指令以及字符串处理指令等,指令数多达一、二百条,寻址方式也趋于多样化。
3. 60年代出现了系列(series)计算机 原因:当硬件价格下降以后,相对来说软件的价格不断上升,为了继承已有的软件,减少软件开发费用. 所谓系列计算机是指基本指令系统相同,基本体系结构相同的一系列计算机,如IBM370系列,VAX—11系列,IBMPC(XT/AT/286/386/486/Pentium)微机系列等。 优点:在旧机种上运行各种软件可以不加任何修改地在新机种上运行。 通常新机器的指令系统一定包含旧机种的所有指令
指令系统的改进是围绕着缩小指令与高级语言的语义差异以及有利于操作系统的优化而进行的。 例如,高级语言中的实数计算是通过浮点运算实现的,因此对用于科学计算的计算机来讲,如能设置浮点运算指令能显著提高运算速度;另外在高级语言程序中经常用到IF语句、DO语句等,为此设置功能较强的条件转移指令是有好处的;为了便于程序嵌套,设置了调用指令(Call)和返回指令(Return)等。 例如:为了便于操作系统的实现和优化,还设置有控制系统状态的特权指令、管理多道程序和多处理机系统的专用指令等。
随着指令的增加,指令系统就变得越来越复杂, CISC(Complex Instruction Set Computer) ,CISC的问题: (1)设计周期长,正确性难以保证且不易维护等; (2) 需要大量硬件支持的大多数较复杂的指令却利用率很低,造成硬件资源的极大浪费。 但通过调查发现,指令系统中20%的简单指令出现在80%的程序中,而另外的80%的复杂指令使用并不多,而需要大量的硬件支持,占机器硬件成本的大部分,造成了资源的浪费,因此70年代末提出了RISC(reduced instruction set computer):精简指令计算机系统。
5.2 指令格式与数据表示 计算机的指令格式与机器的字长、存储器的容量及指令的功能都有很大的关系。 设计指令格式的要求: 5.2 指令格式与数据表示 计算机的指令格式与机器的字长、存储器的容量及指令的功能都有很大的关系。 设计指令格式的要求: (1)使指令能给出足够的信息 (2)其长度又尽可能地与机器的字长相匹配,以便节省存储空间,缩短取指时间,提高机器的性能。
指令格式 指令基本格式 操作码OP 地址码AD 一个 0个或几个 操作码:指明操作的性质和功能,即要求CPU做什么。计算机通过识别操作码来完成不同操作。其长度取决于指令系统中的指令条数; 地址码:用来描述该指令的操作对象,或者直接给出操作数或者指出操作数的存储器地址或寄存器地址(即寄存器名)。
地址码中给出了与操作数有关的信息,CPU通过该地址信息就可以取得所需的操作数。可以直接指明: 参与运算的操作数(或操作数的来源) 运算结果的存放位置 下一条指令如何取得
设计指令时考虑四个问题 1. 指令字长:整个指令占有多少位,定长还是变长? 定长指令格式:指令长度固定,便于控制 变长指令格式:指令长度可变:复杂指令,所需的信息多,位数多,占用存储空间多,读取指令的时间可能多,执行时间就长。合理利用存储空间 NOVA采用定长指令格式,现在多采用变长格式。 指令存放在主存中,一般是字节的整数倍。 指令字长 操作码OP 地址码AD
指令长度与字长的关系 字长:计算机能直接处理的二进制数据的位数。字长决定了计算机的运算精度。字长越长,计算机的运算精度越高。一般机器的字长都是字节(8位)的倍数。 指令的长度主要取决于操作码的长度、操作数地址的长度和操作数地址的个数。 指令的长度与机器的字长没有固定的关系,可以小于或等于机器字长,也可以大于机器字长。前者称为短格式指令,后者称为长格式指令,一条指令存放在地址连续的存储单元中。 通常是把最常用的指令(如算术逻辑运算指令、数据传送指令)设计成短格式指令,以便节省存储空间和提高指令的执行速度。
地址码的长度与字长关系紧密. 地址码的长度直接决定了指令直接寻址的能力(若地址码为n位,则直接地址寻址2n个存储单元),要扩大寻址能力要么增加字长,要么采用地址扩展技术以增加寻址能力。 这对于字长较短(8位或16位)的微型机来说,地址码远远满足不了实际需要。 扩大寻址能力的方法: 一是通过增加机器字长来增加地址码的长度; 二是采用地址扩展技术,把存储空间分成若干个段,用基地址加位移量的方法(参见寻址方式)来增加地址码的长度。
2 .操作码结构:位数和位置固定还是可扩展,是一段操作码或是分段操作码? (1) 定长操作码: 操作码的位数与位置固定。 注意: OP的位数为n,则指令的条数为2n 特点:这种格式对于简化硬件设计,减少指令译码时间非常有利,在字长较长的大、中型机和超级小型机以及RISC上广泛采用。 操作码OP 地址码AD
(2) 方式码: 基本操作 进位 移位 回送 判跳 操作数 将一条指令的操作码分成几段,每一段表示与某一类基本操作有关的几种操作。如: 0 1 2 3 4 5 6 7 8 15 基本操作 进位 移位 回送 判跳 操作数
(3)扩展操作码 关键在设置扩展标志。 各指令OP的位置、位数不固定,根据需要变化。 当指令字较短时,可以利用某些类指令中地址段位数的减少来扩展操作码的位数。 特点:这种格式能够有效地压缩程序中操作码的平均长度,在字长较短的微型机上广泛采用。如Z80,Intel8086/Pentium等,操作码的长度都是可变的。
例. 指令字长16位,可含有3、2、1或0个地址,每个地址占4位。 操作码 地址码 15~ 12 11~ 8 7 ~ 4 3 ~ 0 0000 X Y Z 1110 X Y Z 三地址指令 15条 ... 1111 0000 Y Z 1111 1110 Y Z 二地址指令 15条 ... 1111 1111 0000 Z 1111 1111 1110 Z 一地址指令 15条 ... 1111 1111 1111 0000 1111 1111 1111 1111 零地址指令 16条 ...
在可变长度的指令系统的设计中,到底使用何种扩展方法有一个重要的原则,就是使用频度(即指令在程序中的出现概率)高的指令应分配短的操作码;使用频度低的指令相应地分配较长的操作码。 这样不仅可以有效地缩短操作码在程序中的平均长度,节省存储器空间,而且缩短了经常使用的指令的译码时间,因而可以提高程序的运行速度。
这不是压缩到最小代码的方案,因为在计算机中的操作码还是希望有一定的规整性,否则会引起硬件实现的复杂化。 假如某计算机模型有7条指令(I1~I7),它们在程序中出现的概率用Pi表示,则可考虑下表的方案,这就是扩展操作码,使用频率高的指令的操作码为2位,低的用4位。 这不是压缩到最小代码的方案,因为在计算机中的操作码还是希望有一定的规整性,否则会引起硬件实现的复杂化。
操作码扩展技术是一种重要的指令优化技术,它可以缩短指令的平均长度,减少程序的总位数以及增加指令字所能表示的操作信息。 当然,扩展操作码比固定操作码译码复杂,使控制器的设计难度增大,且需更多的硬件来支持。
3.地址结构:指令中涉及到哪些地址,如何给出? 直接或间接给出 指令中提供地址的方式 显地址方式 隐地址方式 :指令中明显指明地址。 :地址隐含约定,不出现在指令中。 指令中显示提供的地址 存储单元地址码 寄存器编号 操作码OP 地址码AD
使用隐地址可以减少指令中的地址数, 简化地址结构。 对双操作数指令,指令中应指明四个地址: 两个源操作数地址 结果存放地址 下一条要执行的指令地址 OP D1 D2 D3 D4 操作数地址 结果地址 下条指令地址 使用隐地址可以减少指令中的地址数, 简化地址结构。
地址结构的简化 (1)四地址结构指令 格式: OP D1 D2 D3 D4 功能: (D1)OP(D2) D3 (D4) 下条指令 操作数地址 结果地址 下条指令地址 功能: (D1)OP(D2) D3 (D4) 下条指令 缺点:给出D4,程序不能根据操作结果灵活转移 用指令计数器PC指示指令地址。
(2)三地址结构指令 格式: OP D1 D2 D3 功能: (D1)OP(D2) D3 (PC) + 1 PC (3)二地址结构指令 操作数地址 结果地址 功能: (D1)OP(D2) D3 (PC) + 1 PC 下条指令地址 转移时,用转移 地址修改PC内容。 (3)二地址结构指令 格式: OP D1 D2 源/目的 目的/源 功能: (D1)OP(D2) D2/D1 (PC) + 1 PC
在某些字长较短的微型机中(如早期的Z80,Intel8080,MC6800等),大多数算术逻辑运算指令也采用这种格式. (4)一地址结构指令 格式: OP D1 隐含约定 功能: 双操作数: (D1)OP(A) A (PC) + 1 PC 单操作数: OP(D1) D1 (PC) + 1 PC 有两种形态: 隐含约定目的地的双操作数指令:有一个事先约定的寄存器提供目的操作数,运算结果也放入其中(一般称为累加器A) 只有目的地的单操作数指令:如减1,加1,求补 在某些字长较短的微型机中(如早期的Z80,Intel8080,MC6800等),大多数算术逻辑运算指令也采用这种格式.
(5)零地址结构指令 格式: OP 零地址指令的应用场合: 指令本身不需要任何操作数,如空操作,停机等 可以对隐含指定的寄存器内容进行操作,如OP (A) →A, 结果送A; 对堆栈内容进行操作,使用堆栈指针SP, 如PUSH、POP等。
((SP))OP((SP)+1) (SP)+1 (SP)+1 SP 用于堆栈: ((SP))OP((SP)+1) (SP)+1 (SP)+1 SP 执行前: 执行后: 例.ADD; SP 10 20 46 低 SP 30 46 低 高 高 用于特殊指令: (如串操作指令) ((SI))OP((DI)) (DI) 修改SI、DI、计数值
(6)多地址指令 为了描述一批数据,指令中需要多个地址来指出数据存放的首地址、长度和下标等信息。如字符串处理指令,向量、矩阵运算指令等。
各种地址格式的适应范围: 零地址、一地址和两地址指令具有指令短,执行速度快,硬件实现简单等特点,多为结构较简单,字长较短的小型、微型机所采用; 两地址、三地址和多地址指令具有功能强,便于编程等特点,多为字长较长的大,中型机所采用。
数据表示 在计算机中的基本数据有逻辑(布尔)数、定点数(整数)、浮点数(实数)、十进制数、字符串、数组等。对这些数据的运算可以设置专门的指令;也可以仅设置最简单的算术逻辑运算指令,而通过程序的执行实现其他类型数据的处理,但后者的速度下降很多。
为便于硬件实现,一般要求多字节数据对准边界,如图5.2(a)所示。当所存数据不能满足此要求时,则填充一个至多个空白字节。 目前计算机所用数据字长一般为32位。存储器的地址,一般按字节表示。计算机的指令系统可支持对字节、半字、字、双字的运算,有些计算机有位处理指令。 为便于硬件实现,一般要求多字节数据对准边界,如图5.2(a)所示。当所存数据不能满足此要求时,则填充一个至多个空白字节。 也有的计算机不要求对准边界,但可能增加访问存储器次数。
在数据对准边界的计算机中,当以二进制来表示地址时,半字地址的最低位恒为零,字地址的最低两位为零,双字地址的最低三位为零。图5.3为按字节编址的双字数据的两种字节次序:(1)低字节为低地址,如图5.3(a)所示;(2)高字节为低地址,如图5.3(b)所示。
4.寻址方式,如何获得操作数地址,是直接给出或间接给出等?
指令和数据的联系和区别: 联系:都是以二进制码的形式存储的。 区别: 指令的地址是由程序计数器(PC)规定的,而数据的地址是由指令规定的。在程序执行过程中,要避免修改指令,但可以修改数据。
5.3 寻址方式(编址方式) 存放操作数的部件: (1)在运算部件的某个寄存器中——寄存器名 (2)存储器中——存储地址 5.3 寻址方式(编址方式) 存放操作数的部件: (1)在运算部件的某个寄存器中——寄存器名 (2)存储器中——存储地址 (3)在指令中——操作数本身 组成程序的指令代码,一般是在存储器中的。
寻址方式(或编址方式)是指: 一个指令系统具有哪些寻址方式,能否为编制程序提供方便是指令系统设计的关键。 确定本条指令的数据地址及下一条要执行的指令地址的方法,它与计算机硬件结构紧密相关,而且对指令格式和功能有很大影响。 一个指令系统具有哪些寻址方式,能否为编制程序提供方便是指令系统设计的关键。 从程序员角度来看,寻址方式与汇编程序设计的关系极为密切;与高级语言的编译程序设计也同样密切。 不同的计算机有不同的寻址方式,但其基本原理是相同的。
二.常见的寻址方式: 1、直接寻址: 主要围绕操作数在哪里。 指令的地址码给出操作数在存储器中的地址A。例:MOV AX,[2000] 有效地址
操作数在寄存器中,指令中给出该寄存器号,操作数 S = (R)。 如:例:MOV AX,BX 2、寄存器寻址: 操作数在寄存器中,指令中给出该寄存器号,操作数 S = (R)。 如:例:MOV AX,BX 优点:地址码短,从寄存器中存取数据比从存储器中存取快得多. 寄存器寻址方式可以缩短指令长度、节省存储空间,提高指令的执行速度,在计算机中得到广泛应用。 有效地址
3、基址寻址: 有效地址D+B OP RB D 操作码 基址寄存器号 位移地址 CPU中有一个专用的基址寄存器(或指定一通用寄存器)。指令中给出基址寄存器号,形式地址给出位移量。基址寄存器的内容与位移量相加,得到操作数的有效地址,按照此地址访问主存得到操作数。S =(( RB)+D)。 例:MOV AX,50[BX] 有效地址D+B
通常基址寄存器中的值只能由系统程序设定,由特权指令修改,而不能被一般用户指令所修改,因此确保了系统的安全性。 应用场合: (1)解决程序在存储器中的定位。 ——操作系统 (2)扩大寻址空间。——分段 例:段的首地址存放在基址寄存器中 通常基址寄存器中的值只能由系统程序设定,由特权指令修改,而不能被一般用户指令所修改,因此确保了系统的安全性。 (1). 为程序和数据分配存储区,方便实现程序的逻辑地址到物理地址的转换; (2). 当存储容量较大时,指令的地址码不能直接访问到所有的存储单元时,通常将存储空间分成若干段,段的首址由基址寄存器给出,段内位移量由指令给出。在这里基址寄存器主要用于解决程序在存储器中的定位和扩大寻址空间。因此基址寄存器应能提供全字长的地址码,足以指向整个主存空间,位移量提供在有限的区间内的位移,不必是全字长。分段、分页管理是其应用。 (3). 基址寄存器的值只能由系统程序设定,由特权指令执行,不能被一般用户指令所修改。
4、变址寻址: 指令中给出变址寄存器号和形式地址,变址寄存器的内容与形式地址相加,得到操作数的有效地址;按照此地址访问主存,得到操作数。 S =(( RX)+D)。 例:MOV AX,table[SI] 作用:支持一维数组。 OP RX D 操作码 变址寄存器号 形式地址
变址寻址的寻址过程 形式地址 指令字 X 有效地址A+i 形式地址应能提供全字长的地址码,以覆盖整个存储编址空间,变址寄存器提供位移量,不用提供全字长的地址码,只需覆盖操作对象所在的区间即可,一般位数要求较短。通过修改变址寄存器的内容,可以访问数组,或对连续块操作。 变址寄存器号 形式地址 指令字 变址寄存器号 (读寄存器)→变址量,与形式地址相加→操作数地址(读主存)→操作数。 X 有效地址A+i
例:设16位变址寄存器内容为37ACH,8位的形式地址为补码83H,求有效地址。 解:带符号位移量一般用补码表示,计算有效地址时要将形式地址扩展为与主存地址相同的位数,方法是在高位增补符号位。 (83H补 = 1000 0011B补 = -111 1101B = -000 0000 0111 1101B = 1111 1111 1000 0011B补 = FF83H补) 有效地址 = 37ACH + FF83H = 372FH
5.间接寻址 方式:寄存器间接寻址、存储器间接寻址 例:MOV AX,[BX] 定义:在寻址时,有时根据指令的地址码所取出的内容是操作数的地址或指令的地址,这种方式称为间接寻址或间址。 方式:寄存器间接寻址、存储器间接寻址 例:MOV AX,[BX] 特点:对于存储器一次间址情况,需访问两次存储器才能取得数据,第一次从存储器读出操作数地址,第二次读出操作数。
例:MOV AX,[BX] A R 寄存器间接寻址过程 有效地址 指令字 寄存器号 指令中给出寄存器号,该寄存器中存放操作数在主存中的地址。 寻址过程:寄存器号 (读寄存器)→操作数地址(读主存)→操作数。 寄存器间接寻址过程
int *p;(一级间址) int **p;(二级间址) 指令字 间接地址 A1 A A1 操作数在主存某单元中,指令中给出存放该单元的地址的地址码。操作数 S =((D))。 寻址过程:间址单元地址 (读主存)→操作数地址(读主存)→操作数。间址地址不变时,可修改其内容指向不同的主存单元,可实现程序的循环。 有效地址 存储器间接寻址过程
例: 直接寻址:JMP near ptr A1 间接寻址:JMP dword ptr [2000]
把程序计数器PC的内容(即当前执行指令的地址)与指令的地址码部分给出的位移量(disp)之和作为操作数的地址或转移地址,称为相对寻址。 6.相对寻址 把程序计数器PC的内容(即当前执行指令的地址)与指令的地址码部分给出的位移量(disp)之和作为操作数的地址或转移地址,称为相对寻址。 主要用于转移指令,执行本条指令后,将转移到(PC)+disp,(PC)为程序计数器的内容。 例:JS SHORT PTR L1 指令字 有效地址B+D
计算机的程序和数据一般是分开存放的,程序区在程序执行过程中不允许修改。在程序与数据分区存放的情况下,不用相对寻址方式来确定操作数地址。 相对寻址有两个特点: (1)转移地址不是固定的,它随着PC值的变化而变化,并且总是与PC相差一个固定值disp,因此无论程序装入存储器的任何地方, 均能正确运行,对浮动程序很适用。 (2)位移量可正、可负,通常用补码表示。如果位移量为n位,则这种方式的寻址范围在(PC)-2n-1到(PC)+2n-1 -1之间。 计算机的程序和数据一般是分开存放的,程序区在程序执行过程中不允许修改。在程序与数据分区存放的情况下,不用相对寻址方式来确定操作数地址。
7.立即数 所需的操作数由指令的地址码部分直接给出,就称为立即数(或直接数)寻址方式。 例:MOV AL,5 应用场合:给某一寄存器或存储器单元赋初值或提供一个常数等。 OP 立即数
优点:取指时,操作码和一个操作数同时被取出,不必再次访问存储器,提高了指令的执行速度。 缺点:(1) 数据固定在指令中,灵活性差,不能修改。 (2) 对定长指令格式,操作数位数有限,只能提供短字长的立即数或字符。对变字长指令,立即数可为若干字节,如80386:8,16,32位。MOV AX,03FFH将03FFH传到AX寄存器中
8.堆栈寻址 堆栈:由若干个连续存储单元组成的先进后出的存储区。 堆栈的存取规则:后进先出 堆栈的硬件设置:设置堆栈区和堆栈指针。 堆栈区:大的堆栈可以是主存中划出的一个区域,也可以是单独的一个小存储器;小的堆栈可以用一组寄存器组成。 堆栈指针SP:指向浮动的栈顶(当前可以访问的堆栈单元),用于表示栈顶位置的寄存器或存储单元,能自增和自减。 无硬件设置用软件实现。 堆栈的工作方式:压入和弹出,均在栈顶进行
注意:在计算机中可以组合使用上述寻址方式. 例如在一条指令中可以同时实现基址寻址与变址寻址,其有效地址为: 基址寄存器内容+变址寄存器内容+指令地址码A 对程序员: (1)用高级语言编程,根本不用考虑寻址方式. (2)用汇编语言编程,则应对寻址方式有确切的了解,才能编出正确而又高效率的程序。此时应认真阅读指令系统的说明书,因为不同计算机采用的寻址方式是不同的,即使是同一种寻址方式,在不同的计算机中也有不同的表达方式或含义。
寻址方式比较 间接寻址慢,直接寻址快 间接寻址复杂,直接寻址简单 间接寻址灵活,直接寻址死板 存储器慢,寄存器快,立即数更快 内存地址长,寄存器地址短 要运算的慢,不需运算的快
8088通用指令格式 其中: 操作码: D W 7~2 1 操作码 D=0:操作数的传输方向 D=1:REG段为目的操作数 W=0:字节运算 字节1 字节2 字节3 字节4 操作码 寻址方式 数据/偏移量低8位 数据/偏移量高8位 字节5 字节6 其中: 操作码: 数据低8位 数据高8位 7~2 1 操作码 D W D=0:操作数的传输方向 D=1:REG段为目的操作数 W=0:字节运算 W=1:字运算
8088寻址方式格式 MOD=00:存储器寻址,无偏移量,即DISP=0 MOD= 01:存储器寻址,一个字节的偏移量 7 6 5 4 3 2 1 0 MOD REG R/M MOD=00:存储器寻址,无偏移量,即DISP=0 MOD= 01:存储器寻址,一个字节的偏移量 MOD=10: 存储器寻址,两个字节的偏移量 MOD=11: 寄存器寻址,R/M表示寄存器
8088寄存器的选择 W=0 W=1 000 AL AX 001 CL CX 010 DL DX 011 BL BX 100 AH SP REG字段 (或MOD=11时R/M字段) W=0 W=1 000 AL AX 001 CL CX 010 DL DX 011 BL BX 100 AH SP 101 CH BP 110 DH SI 111 BH DI
R/M字段(MOD!=11,存储器寻址): R/M MOD=00 MOD=01 MOD=10 000(基址变址且相对寻址) (BX)+(SI) (BX)+(SI)+D8 (BX)+(SI)+D16 001 (基址变址且相对寻址) (BX)+(DI ) (BX)+(DI)+D8 (BX)+(DI)+D16 010 (基址变址且相对寻址) (BP)+(SI) (BP)+(SI)+D8 (BP)+(SI)+D16 011 (基址变址且相对寻址) (BP)+(DI) (BP)+(DI)+D8 (BP)+(DI)+D16 100(相对寻址/间接寻址) (SI) (SI+D8) (SI)+D16 101 (相对寻址/间接寻址) (DI) (DI+D8) (DI)+D16 110 (相对寻址/直接寻址) 直接寻址 (BP)+D8 (BP)+D16 111(相对寻址/间接寻址) (BX) (BX)+D8 (BX)+D16
指令格式举例 MOV [DI],AX 100010 0 1 00 000 101 操作码 D W MOD REG R/W 100010 0 1 00 000 101 操作码 D W MOD REG R/W MOV AX,[SI] 100010 1 1 00 000 100 D=0表示指令中指定的寄存器是源操作数,(AX)->(Di) D=1表示指令中指定的寄存器是目的操作数,(si)->AX
5.4 指令类型与指令系统的兼容性 指令系统决定了计算机的基本功能,因此指令系统的设计(即指令系统包含的指令类型)是计算机系统设计中的一个核心问题。 重要性:它不仅与计算机的硬件结构紧密相关,而且直接影响到编写操作系统和编写编译程序的难易程度,它对机器的性能价格比有很大影响。
指令系统中的指令设置: (1)一台计算机最基本的、必不可少的指令. (2)大量指令是为了提高程序的执行速度,编制的程序占用的存储器空间小,便于程序员编写程序而设置的。
5.4.1 指令的分类及功能 一台计算机的指令系统按功能可分为: 5.4.1 指令的分类及功能 一台计算机的指令系统按功能可分为: 算术逻辑运算指令、移位操作指令、浮点运算指令、十进制运算指令、字符串处理指令、向量运算指令、数据传送指令、转移指令、堆栈操作指令、输入输出指令、特权指令等。
1.算术逻辑运算指令 二进制加、减法、比较、求补码(取负数) 、乘、除法算术运算指令和与、或、非(求反)、异或(按位加)等逻辑运算指令。 例:ADD AX,BX AND AX,BX 特点:通常根据运算的结果置状态位,一般有Z(结果为0)、N(结果为负)、V(结果溢出)、C(产生进位或借位)四个状态位。
2.移位操作指令 例:SHL AL,1
特点:移位指令的执行时间比乘除运算的执行时间短。 应用: 移位指令用于实现简单的乘除运算。 算术左移或右移n位,分别实现对带符号数据乘以2N或整除以2N的运算. 逻辑左移或右移n位,分别实现对无符号数据乘以2N或整除以2N的运算。 特点:移位指令的执行时间比乘除运算的执行时间短。
3.浮点运算指令 高级语言中的实数(float,double)经常是先转换成浮点数的形式而后再进行处理。 某些机器没有设置浮点运算指令而用子程序实现,其速度较低。 主要用于科学计算的计算机应该设置浮点运算指令,一般能对单精度(32位)、双精度(64位)数据进行处理。
4.十进制运算指令 例:AAA 在不具有十进制运算指令的计算机中,首先将十进制数据转换成二进制数,再在机器内运算;尔后又转换成十进制数据输出。 在输入输出数据频繁的计算机系统中设置十进制运算指令能提高数据处理的速度。
5.字符串处理指令 例:MOVS 字符串处理指令就是一种非数值处理指令,一般包括字符串传送、字符串比较、字符串查询、字符串转换等指令。-----数据块的操作.
6.数据传送指令 这类指令用以实现寄存器与寄存器,寄存器与存储器单元,存储器单元与存储器单元之间的数据传送,即完成数据复制。 数据传送指令一次可以传送一个数据或一批数据。 有些机器设置了数据交换指令,完成源操作数与目的操作数互换,实现双向数据传送。
7.转移类指令 这类指令用以控制程序流的转移。在大多数情况下,计算机是按顺序方式执行程序的,但是也经常会遇到离开原来的顺序转移到另一段程序或循环执行某段程序的情况。 按转移的性质,转移指令分为无条件转移、条件转移、过程调用与返回、陷阱(trap)等几种。
(1)无条件转移与条件转移 无条件转移指令:不受任何条件约束,直接把程序转移到指令所规定的目的地,在那里继续执行程序。 例:JMP JS 无条件转移指令:不受任何条件约束,直接把程序转移到指令所规定的目的地,在那里继续执行程序。 条件转移指令:根据计算机处理结果来决定程序如何执行。它先测试根据处理结果设置的条件码,然后根据所测试的条件是否满足来决定是否转移。
(2)调用指令与返回指令 在编写程序过程中,常常需要编写一些经常使用的、能够独立完成某一特定功能的程序段,这种程序段就称为子程序或过程。 例:CALL RET 在编写程序过程中,常常需要编写一些经常使用的、能够独立完成某一特定功能的程序段,这种程序段就称为子程序或过程。 调用(call)与返回(return)是一对配合使用的指令. 子程序调用指令call指令与转移指令的主要差别是需要保留返回地址。 子程序返回指令(return)从堆栈中取出返回地址,继续执行调用指令的下一条指令。
(3)陷阱(trap)与陷阱指令 例:INT 20H 陷阱实际上是一种意外事故中断,它中断的主要目的不是为了请求CPU的正常处理,而是通知CPU已出现了故障,并根据故障情况,转入相应的故障处理程序。
有些计算机设置可供用户使用的陷阱指令或“访管”指令,利用它来实现系统调用和程序请求。 在一般计算机中,陷阱指令作为隐含指令(即指令系统中不提供的指令,它所完成的功能是隐含的)不提供给用户使用,只有在出现故障时,才由CPU自动产生并执行。 有些计算机设置可供用户使用的陷阱指令或“访管”指令,利用它来实现系统调用和程序请求。
8.堆栈及堆栈操作指令 堆栈(stack)是由若干个连续存储单元组成的先进后出存储区. 使用:如:PUSH AX 堆栈指针表示栈顶的地址.任何堆栈操作只能在栈顶进行 有两个指令: PUSH(压入):SP-1,存入一个字节。 POP(弹出) :取出一个字节,SP+1。 使用:如:PUSH AX
堆栈的应用: (1)堆栈是用来提供操作数和保存运算结果的主要存储区. (2)用来暂存中断和子程序调用时现场数据及返回地址。 (3)用于子程序调用时参数的传递,特别是在不同语言(如Pascal语言和汇编语言)程序之间相互调用过程中,使用堆栈来传递参数更加普遍。 sp
9.输入输出(I/O)指令 例:IN OUT 输入输出指令的一般格式如下: 应用:完成外设和主机数据信息的交换,同时也可用来转送控制命令和回答信号. 例如:IN AL,port
10.特权指令 只能用于操作系统或其他系统软件,而不提供给用户使用的指令称为特权指令.
11.其他指令 (1)向量指令 (2)多处理机指令 (3)控制指令
5.4.2 双字长运算(子程序举例) 有时候,需对双字长操作数进行运算,而机器本身并没有双字长指令,这样就需要通过子程序予以实现。
5.4.3 指令系统的兼容性 各计算机公司设计生产的计算机,其指令的数量与功能、指令格式、寻址方式、数据格式都有差别,将用机器语言表示的程序移植到其他机器上去几乎是不可能的。 问题:从计算机的发展过程已经看到,由于构成计算机的基本硬件发展迅速,计算机的更新换代是很快的,这就存在软件如何跟上的问题。
为了缓解新机器的推出与原有应用程序的继续使用之间的矛盾,系列机思想较好地解决了这一问题: 同一系列的计算机尽管其硬件实现方法可以不同,但指令系统、数据格式、I/O系统等保持相同,软件完全兼容(在此基础上,产生了兼容机)。即低档机或旧机型上的软件不加修改即可在新机器上运行,以保护用户在软件上的投资。
指令兼容的优缺点 优点:软件兼容 缺点:指令字设计不尽合理,指令系统过于庞大。
5.5 精简指令系统计算机(RISC)和复杂指令系统计算机(CISC) 1 什么是复杂指令系统计算机 在指令系统中增加更多的指令和复杂的指令,来提高操作系统的效率,减少与高级语言的语义差别。同一系列计算机的新机器的指令系统只能扩充而不能减去任意一条,促使指令系统越来越复杂,某些计算机的指令多达几百条。这样的计算机就称为 ------ CISC
5.5.2 RISC的产生与发展 1. RISC的产生 (1)最常使用的是一些比较简单的指令,仅占指令总数的20%,但在程序中出现的频率却占80%。 (2)复杂的指令系统必然增加硬件实现的复杂性,这增加了研制时间和成本. (3)由于复杂指令需要进行复杂的操作,与功能较简单的指令同时存在于一个机器中,很难实现流水线操作. (4)难以将基于CISC技术的高档微型机的全部硬件集成在一个芯片上或将大、中型机的CPU装配在一块板上,延迟时间很大,这也会影响CISC的速度
表5.2 生产RISC芯片的公司及其产品 从技术发展的角度来讲,CISC技术已很难再有突破性的大进展,要想大幅度提高性能价格比也已很困难。而RISC技术是在CISC基础上发展起来的,且发展势头正猛。
5.5.3 RISC的特点 计算机执行程序所需要的时间P可用下式表示: P=I╳ CPI ╳T
(1) RISC的I要比CISC多20%一40%: 由于RISC指令比较简单,原CISC机中比较复杂的指令在这里用子程序来代替, (2) RISC的CPI的值要比CISC小得多: RISC的大多数指令只用一个机器周期实现. (3) RISC的T值大为减少: 因为RISC结构简单,所以完成一个操作所经过的数据通路较短。
(2)指令长度固定,指令格式种类少,寻址方式种类少。指令之间各字段的划分比较一致,各字段的功能也比较规整。 RISC特点: (1)优先选取使用频率最高的一些简单指令。 (2)指令长度固定,指令格式种类少,寻址方式种类少。指令之间各字段的划分比较一致,各字段的功能也比较规整。 (3)只有取数/存数指令(load/store)访问存储器,其余指令的操作都在寄存器之间进行。 (4)CPU中通用寄存器数量相当多。 (5)大部分指令在一个或小于一个机器周期内完成。 (6)以硬布线控制逻辑为主,不用或少用微码控制。 (7)一般用高级语言编程,特别重视编译优化工作,以减少程序执行时间。
RISC的主要优缺点 优点:简化了指令系统,以寄存器-寄存器方式工作,采用流水方式,减少访存等。 缺点:指令功能简单使程序代码较长,占用了较多的存储器空间。
5. 9 机器语言、汇编语言和高级语言 一台计算机能够直接识别并执行的语言是一种用二进制码表示的、由一系列指令组成的机器语言。 5. 9 机器语言、汇编语言和高级语言 一台计算机能够直接识别并执行的语言是一种用二进制码表示的、由一系列指令组成的机器语言。 特点:不需翻译,与硬件相关,可读性差、不易编程和不易维护。
汇编语言: 用助记符来表示二进制码指令序列的语言,称为汇编语言. 例如: ADD 表示加法操作 SUB 表示减法操作 A 表示累加器 R 表示通用寄存器
汇编语言特点: (1)基本上是与机器语言一一对应的。 (2)用汇编语言编写的程序,计算机不能直接识别,必须将它翻译成机器语言后才能执行。翻译过程是由计算机执行汇编程序来完成。 (3)它同计算机的硬件结构、指令系统的设置关系非常密切。
方便,它的可读性较好,出错也便于检查和修改. 缺陷: (1)汇编语言的基本操作简单,描述问题的能力差,用它编写程序工作量大,源程序较长。 优点: 方便,它的可读性较好,出错也便于检查和修改. 缺陷: (1)汇编语言的基本操作简单,描述问题的能力差,用它编写程序工作量大,源程序较长。 (2)用汇编语言编写的程序与问题的描述相差甚远,其可读性仍然不好。 (3)汇编语言依赖于计算机的硬件结构和指令系统,而不同的机器有不同的结构和指令,因而用它编写的程序不能在其他类型的机器上运行,可移植性差。
高级语言: 优点: (1)与计算机的硬件结构及指令系统无关. 与自然语言接近的计算机编程语言. 优点: (1)与计算机的硬件结构及指令系统无关. (2)表达方式比较接近于自然语言,描述问题的能力强,通用性、可读性和可维护性都很好。 (3) 无需考虑机器的字长、寄存器、状态、寻址方式和内存单元地址等,因而,要比用汇编语言容易得多。
缺陷: (1)用高级语言编写的程序,必须翻译成机器语言才能执行,这一工作通常是由计算机执行编译程序来完成。翻译出来的机器语言非常冗长,与有经验的程序员用汇编语言编写的程序相比至少要多占内存2/3,速度要损失一半以上。 (2)由于高级语言程序“看不见”机器的硬件结构,因面不能用它来编写需访问机器硬件资源的系统软件或设备控制软件。
汇编语言和高级语言的应用场合: 汇编语言与硬件的关系密切,用它编写的程序紧凑,占内存小,速度快,特别适合于编写经常与硬件打交道的系统软件; 高级语言不涉及机器的硬件结构,通用性强,编写程序容易,特别适合于编写与硬件没有直接关系的应用软件。
本章重难点 1、指令系统的定义、作用 2、指令格式 3、寻址方式
作业 (P160) 5.1 5.2 5.3 5.6 5.8 5.10 5.11