54
第5第 第第第第第 第第第第第 () 让让让让让让让让让让让让让让 :。 第第第让让让让让让让让让让让让让让让 一。

第 5 章 指令系统

  • Upload
    emera

  • View
    147

  • Download
    2

Embed Size (px)

DESCRIPTION

第 5 章 指令系统. 指令(机器指令) :让计算机执行某种操作的命令。 指令系统: 一台计算机中所有机器指令的集合。. 第 5 章 指令系统. §5.1 指令格式 §5.2 寻址方式 §5.3 指令类型 §5.4 堆栈和堆栈存取方式 §5.5 CISC 与 RISC 指令 §5.6 MMX 技术. §5.1 指令格式. 一、指令格式 二、指令长度. 操作码字段 OP. 地址码字段 D. 一、指令格式. 1 、机器指令的组成: 由 操作码 (表示操作性质)和 操作数 (表示操作对象)或 操作数的地址码 组成。. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 5 章  指令系统

第 5章 指令系统 指令(机器指令):让计算机执行某种操作的命令。 指令系统:一台计算机中所有机器指令的集合。

Page 2: 第 5 章  指令系统

第 5章 指令系统§5.1 指令格式 §5.2 寻址方式 §5.3 指令类型 §5.4 堆栈和堆栈存取方式 §5.5 CISC 与 RISC 指令§5.6 MMX 技术

Page 3: 第 5 章  指令系统

§5.1 指令格式一、指令格式二、指令长度

Page 4: 第 5 章  指令系统

一、指令格式1 、机器指令的组成: 由操作码(表示操作性质)和操作数(表示操作对象)或操作数的地址码组成。

操作码字段 OP 地址码字段 D2 、指令的基本格式:

例 :(51) ADD A, direct

25 direct

00101001 00001000

Page 5: 第 5 章  指令系统

一、指令格式3 、按指令包含的地址的个数分类:

OP D1 D2 D3( 1)三地址指令:

OP D( 3)一地址指令:

OP D1 D2( 2)二地址指令:

OP( 4)零地址指令:

Page 6: 第 5 章  指令系统

二、指令长度 原则:1. 指令长度应为存储器基本字长的整数倍 : 指令长度可以固定,也可以变化。2.指令字长应尽量短: 有利于提高程序的效率,即减少所需存储量和加快运行速度。

Page 7: 第 5 章  指令系统

§5.2 寻址方式 一、立即寻址二、直接寻址三、间接寻址四、寄存器 (直接 )寻址五、寄存器间接寻址六、寄存器变址寻址七、相对寻址八、基址寻址九、隐含寻址方式 十、其它寻址方式

Page 8: 第 5 章  指令系统

§5.2 寻址方式 一、立即寻址: 指令直接给出操作数(立即数)本身。

例如: MOV A, #data74 data

操作码存储器地址 存储器内容8 位 立 即数n+1操作码n

下条指令n+2

存储器地址 存储器内容

n+2n+1n

立即数高 8位立即数低 8位

n+3 下条指令(a) 8 位立即数 (b) 16 位立即数图 5.1 按字节编址机器中的立即寻址指令

Page 9: 第 5 章  指令系统

§5.2 寻址方式 二、直接寻址: 指令直接给出操作数地址。

操作码存储器地址 存储器内容

n+2n+1n

操作数地址高 8位 操作数地址低 8位

n+3 下条指令图 5.2 按字节编址机器中的直接寻址指令

例如: MOV A,directE5 direct

Page 10: 第 5 章  指令系统

§5.2 寻址方式 三、间接寻址: 指令给出存放操作数地址的存储单元地址。

OP

操作数有效地址

主存@ 间接地址

图 5.3 单级间接寻址

Page 11: 第 5 章  指令系统

§5.2 寻址方式 四、寄存器 (直接 )寻址: 操作数在指令指定的 CPU 的某个寄存器中。 优点: 1 、 CPU 寄存器数量远小于内存单元,所以寄存器号比内存地址短,因而寄存器寻址方式指令短; 2 、操作数已在 CPU 中 ,不用访存,因而指令执行速度快。

OP 寄存器号 OP 寄存器号1 寄存器号2

例如: MOV A,RnE8-EF

Page 12: 第 5 章  指令系统

§5.2 寻址方式 五、寄存器间接寻址: 操作数地址在指令指定的 CPU 某个寄存器中。 例如: MOV A , @Ri

E6,E7

Page 13: 第 5 章  指令系统

§5.2 寻址方式 六、寄存器变址寻址: 指定一个 CPU 寄存器(称为变址寄存器)和一个形式地址,操作数地址是二者之和。

OP 寄存器号 形式地址 形式地址:指令的操作数地址字段不是操作数的真实地址。 例如: MOV AL , [SI+1000H] 其中: SI 为变址寄存器, 1000 为形式地址。

Page 14: 第 5 章  指令系统

+

§5.2 寻址方式

data n

data 1data 2

SI

形式地址图 5.4 变址寻址选择数组数据

Page 15: 第 5 章  指令系统

§5.2 寻址方式 七、相对寻址: 相对寻址是把程序计数器 PC 的内容,加上由指令给出的形式地址而形成操作数地址。 相对寻址实际上是规定了操作数和指令的相对位置,因而得名。 采用相对寻址便于编制可浮动程序,这种程序随便放在内存什么位置,都能正常运行。 相对寻址是以程序计数器 PC 作为变址寄存器的特殊变址寻址的情况。

例如 :MOVC A, @A+PC

Page 16: 第 5 章  指令系统

§5.2 寻址方式 八、基址寻址: 基址寻址是把由指令中给出的地址 (形式地址,或称位移量 )与 CPU 中的某个基址寄存器相加而得到实际的操作数地址。

Page 17: 第 5 章  指令系统

§5.2 寻址方式 九、隐含寻址方式 : 操作码中隐含着操作数地址。 例如单地址指令中只给出一个操作数地址,另一个操作数规定为累加器,它的地址就是隐含的。另外,如堆栈指令,其操作数在堆栈内,指令中无需指出具体地址。

Page 18: 第 5 章  指令系统

§5.2 寻址方式 十、其它寻址方式: 有的计算机指令系统中还有更复杂的寻址方式,如基址变址寻址、位寻址、块寻址、串寻址等等 。

Page 19: 第 5 章  指令系统

§5.3 指令类型 一、指令系统的设计原则 二、指令分类

Page 20: 第 5 章  指令系统

一、指令系统的设计原则 1 、完备性: 指令系统的功能应尽量完备 。2 、兼容性: 至少要能做到“向上兼容”,即低档机上运行的软件可以在高档机上运行。3 、均匀性: 数据处理指令能对多种类型的数据进行处理,包括三种整数 (字节、字、双字 )和两种浮点数 (单精度和双精度浮点数 )。4 、可扩充性: 操作码字段要保留一定的空间,以便需要时进行功能扩充。

Page 21: 第 5 章  指令系统

指令操作码的扩展技术 在指令字中用一个固定长度的字段来表示基本操作码,而对于一部分不需要某个地址码的指令,把它们的操作码扩充到该地址字段,这样既能充分地利用指令字的各个字段,又能在不增加指令长度的情况下扩展操作码的长度,使它能表示更多的指令。

Page 22: 第 5 章  指令系统

指令操作码的扩展技术 例 1:已知指令字长为 16位,每个地址码为4位,采用扩展操作码的方式,设计 15条三地址指令、 15条二地址指令、 15条一地址指令、 16条零地址指令。

Page 23: 第 5 章  指令系统

指令操作码的扩展技术OP A1 A2 A30000 ×××× ×××× ××××0001 ×××× ×××× ××××…… …… …… ……1110 ×××× ×××× ××××1111 0000 ×××× ××××1111 0001 ×××× ××××…… …… …… ……1111 1110 ×××× ××××1111 1111 0000 ××××1111 1111 0001 ××××…… …… …… ……1111 1111 1110 ××××1111 1111 1111 00001111 1111 1111 0001…… …… …… ……1111 1111 1111 1111

Page 24: 第 5 章  指令系统

指令操作码的扩展技术 例 2:某机指令系统采用定字长指令格式,指令字长 32位,每个操作数的地址编码长 12位。指令分二地址、单地址和无地址三类。若二地址指令有 K条,一地址指令有 L条,则无地址指令有多少条? 解:1、 [( 28-K)×212-L] ×2122 、 232 - K×224 - L×212

Page 25: 第 5 章  指令系统

二、指令分类1 、按功能分类2、按操作数个数分类3、按操作数寻址方式分类

Page 26: 第 5 章  指令系统

1 、按功能分类1 、按功能分类:( 1)、算术和逻辑运算指令( 2)、移位指令和循环指令( 3)、传送类指令( 4)、串指令( 5)、顺序控制指令( 6)、 CPU控制指令 ( 7)、输入、输出指令

Page 27: 第 5 章  指令系统

1 、按功能分类( 1)、算术和逻辑运算指令 : 加( ADD )、减( SUB)、比较( CMP )、乘( MUL )、除( DIV )、与( AND )、或( OR)、取反( NOT)、异或( XOR )、变补( NEG)、加 1( INC )、减 1( DEC )、带进位的加( ADC )、带借位的减( SBB)指令等。

Page 28: 第 5 章  指令系统

1 、按功能分类( 2)、移位指令和循环指令: 算术移位、逻辑移位、环移、半字交换等。( 3)、传送类指令: 传送( MOV )、交换( XCHG)等。 ( 4)、串指令: 对字符串进行操作的指令。如有字符串传送、比较、检索等指令。

Page 29: 第 5 章  指令系统

1 、按功能分类( 5)、顺序控制指令: 用来控制程序执行的顺序。 有条件转移、无条件转移( JMP )、跳步( SKIP )、转子( CALL )、返主( RET)等指令。 ( 6)、 CPU 控制指令: 停机、开中断、关中断等指令。( 7)、输入、输出指令: 用于完成 CPU 与外部设备交换数据或传送控制命令及状态信息

Page 30: 第 5 章  指令系统

2 、按操作数个数分类( 1)、双操作数指令:如: ADD 、 SUB、 AND等。 ( 2)、单操作数指令:如: NEG、 NOT、 INC、 DEC 等。 ( 3)、无操作数指令:如:停机,开中断、关中断等。

Page 31: 第 5 章  指令系统

3 、按操作数寻址方式分类( 1)、 R-R 型:两个操作数都在 CPU 的寄存器中。 ( 2)、 R-S 型:两个操作数中一个在 CPU 寄存器中,另一个在内存中。( 4)、 S-S 型:两个操作数都在内存中。

Page 32: 第 5 章  指令系统

§5.4 堆栈和堆栈存取方式 堆栈 :一种特定的数据结构 , 其特点是后进先出 (LIFO) 或先进后出 (FILO) 。 入栈(进栈、压栈) :往堆栈里存数。 出栈(弹出):从堆栈里取数。 一、用移位寄存器实现堆栈 二、内存中开辟堆栈区

Page 33: 第 5 章  指令系统

一、用移位寄存器实现堆栈 用若干寄存器构成,又叫栈顶固定方式堆栈。 栈顶空栈: 栈底

栈顶存入 b: b a 栈底

栈顶取出 b: a 栈底

图 5.10 栈顶固定方式堆栈及其存取

栈顶存入 a: a 栈底

Page 34: 第 5 章  指令系统

二、内存中开辟堆栈区 在内存中开辟堆栈区。 存储器单元固定,而栈顶位置动态变化。在 CPU 中专门设置堆栈指针 SP,指示栈顶位置,存取只能在栈顶进行。1、自底向上生成堆栈 2、自顶向下生成堆栈

Page 35: 第 5 章  指令系统

二、内存中开辟堆栈区1 、自底向上生成堆栈: 建栈:堆栈指针 SP 指向栈底下面一个单元。 入栈操作( PUSH )步骤: 1 ) SP-1→SP 2 )存入数据→( SP) 出栈操作( POP )步骤: 1 )( SP )内容读出 2 ) SP+1→SP 入栈操作时,指针向减小的方向变化,所以叫自底向上生成堆栈。

Page 36: 第 5 章  指令系统

二、内存中开辟堆栈区 1FFD 1FFE 1FFF 2000

栈底SP堆栈指针2000

a ( ) 建栈

1FFD 1FFE 1FFF 2000

栈底a

SP堆栈指针1FFF

b a( ) 入栈

1FFD 1FFE 1FFF 2000

栈底a

SP堆栈指针1FFF

d b( ) 出栈

5.11 图 自底向上生成堆栈

1FFD 1FFE 1FFF 2000

栈底

ba

SP堆栈指针1FFE

c b( ) 入栈

Page 37: 第 5 章  指令系统

二、内存中开辟堆栈区2 、自顶向下生成堆栈 : 堆栈:指针 SP 指向栈底上面一个单元。 入栈:操作( PUSH )步骤: 1 ) SP+1→SP 2 )存入数据→( SP) 出栈:操作( POP )步骤: 1 )( SP )内容读出 2 ) SP-1→SP 入栈操作时,指针向增大的方向变化,所以叫自顶向下生成堆栈。

Page 38: 第 5 章  指令系统

§5.4 CISC 与 RISC 指令 CISC :复杂指令集计算机。 RISC :精简指令集计算机。 一、复杂指令集计算机 CISC 二、精简指令集计算机 RISC三、 CISC 与 RISC 之争论

Page 39: 第 5 章  指令系统

一、复杂指令集计算机 CISC使指令系统越来越复杂的出发点:1、使目标程序得到优化。2、给高级语言提供更好的支持。3、提供对操作系统的支持。

Page 40: 第 5 章  指令系统

一、复杂指令集计算机 CISC 设计目的:用最少的机器语言指令来完成所需的计算任务。 例如:乘法运算, MUL ADDRA, ADDRB C语言: a*=b 可以直接编译为一条乘法指令。

Page 41: 第 5 章  指令系统

二、精简指令集计算机 RISC 通过简化指令使计算机的结构更加简单合理,从而提高机器的性能。 RISC 的特点 : 1 、 指令数目较少,一般都选用使用频度最高的一些简单指令; 2 、指令长度固定,指令格式种类少,寻址方式种类少; 3 、大多数指令可在一个机器周期内完成; 4 、通用寄存器数量多,只有存数 /取数指令访问存储器,而其余指令均在寄存器之间进行操作。

Page 42: 第 5 章  指令系统

二、精简指令集计算机 RISC 例如:乘法运算, MUL ADDRA, ADDRB C语言: a*=b RISC架构要求软件来指定各个操作步骤。 MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A 。 这种架构可以降低 CPU 的复杂性以及允许在同样的工艺水平下生产出功能更强大的 CPU ,但对于编译器的设计有更高的要求。

Page 43: 第 5 章  指令系统

三、 CISC 与 RISC 之争论

Page 44: 第 5 章  指令系统

§5.6 MMX 技术 MMX 是 Intel 公司为提高 PC机上处理多媒体和通信能力而推出的新一代处理器技术。 它通过在 Pentium或 Pentium Pro 处理器中增加 8 个 64 位寄存器和 57 条新指令来实现。

Page 45: 第 5 章  指令系统

作业 P150 1、 9、 10

Page 46: 第 5 章  指令系统

指令操作码的扩展技术 课堂练习:某机指令系统采用定字长指令格式,指令字长 20 位,每个操作数的地址编码长 6位。指令分二地址、单地址和无地址三类。若二地址指令数取最大值,而且一地址指令数也取最大值,这 3种指令最多可能拥有的指令数各是多少? 解:二地址: 255 、单地址: 63、无地址: 64

Page 47: 第 5 章  指令系统

8086 指令详解 8086 采用变字节指令格式,指令由 1-6 个字节组成。一般指令格式如下:

7 6 5 4 3 2 1 0第一字节:

操作码 D W D :方向位。 D=0 : REG为源操作数寄存器; D=1: REG为目的操作数寄存器。 W :字位。 W=0 :参加运算的操作数为字节; W=1:参加运算的操作数为字。

Page 48: 第 5 章  指令系统

8086 指令详解

MOD : R/M 中的操作数方式编码。 REG :寄存器编码。 R/M : MOD=11 :第二操作数的寄存器编号; MOD=00、 01 、 10 :指出存储器操作数的计算方法。

7 6 5 4 3 2 1 0第二字节:

MOD REG R/M

第 3-6 字节根据指令需要取舍,一般由它指出存储器操作数地址的位移量或立即数。

Page 49: 第 5 章  指令系统

8086 指令详解

MOD 字段编码表:MOD 方 式00 存储器方式,没有位移量。01 存储器方式,有 8位位移量。10 存储器方式,有 16位位移量。11 寄存器方式,没有位移量。

Page 50: 第 5 章  指令系统

8086 指令详解 REG 字段编码表:

REG W=1 W=0000 AX AL001 CX CL010 DX DL011 BX BL100 SP AH101 BP CH110 SI DH111 DI BH

Page 51: 第 5 章  指令系统

8086 指令详解ADC : ( Add with carry ) - 带进位位的加法指令。操作: if(CF)=1 then( DEST)←( LSRC ) +( RSRC) +1 else ( DEST )←( LSRC ) + ( RSRC )编码:有 3种格式。 1 、存储器或寄存器操作数与寄存器操作数:000100 d w mod reg r/m If d = 0 then LSRC = REG, RSRC = EA,DEST = REG else LSRC = EA, RSRC =REG,DEST = EA 。 EA:16 位有效地址。 举例: ADC AX SI ;?

Page 52: 第 5 章  指令系统

8086 指令详解HLT : ( Halt)- 处理器暂停指令。操作:没有。编码: 11110100

Page 53: 第 5 章  指令系统

8086 指令详解MOV : ( MOVE ) - 传送指令。 共有七种类型的传送指令。 每种类型又有多种使用方法,其编码依赖于被传送数据的类型及该数据所在的位置。汇编程序根据这两个因素生成该指令的目标代码。 如果类型为字,则指令代码中相应于 w的位置为“ 1”,否则为“ 0”。

Page 54: 第 5 章  指令系统

8086 指令详解2、从存储器到累加器的数据传送:1010000w1010000w addr-lowaddr-low addr-hightaddr-hight

If w = 0 then SRC = addr, DEST = AL else SRC = addr+1:addr, DEST = AX 。 举例: MOV AX , [1234] ;?