Post on 11-Jan-2016
description
第 5 章 指令系统
•计算机的指令有微指令、机器指令和宏指令
之分。微指令是微程序级的命令,属于硬件;宏指
令是由若干机器指令组成,属于软件;机器指令介
于二者之间,因而是硬件和软件的界面。
•一台计算机能执行的机器指令全体称为该机的指令
系统。它是软件编程的出发点和硬件设计的依据,它
衡量机器硬件的功能,反映硬件对软件支持的程度。
5.1 指令格式
5.1.1 指令的格式
•机器指令必须规定硬件要完成的操作,并指出操作数或操作数地址。指令一般的格式如下 :
OP操作码 D地址码
1. 三地址指令
OP D1 D2 D3 执行( D1 ) OP ( D2 )→ D3
2. 二地址指令
OP D1 D2 执行( D1 ) OP ( D2 )→ D2
3.单地址指令
OP D 执行( D ) OP ( A )→ A
A( 称累加器) : CPU 中一个专用寄存器
4.零地址指令 这类指令无操作数,所以无地址码。例如空操作、
停机等不需要地址的指令 。
5.1.2 指令长度
原则:
1.指令长度应为存储器基本字长的整数倍 。
•如果指令长度任意,就会产生指令跨存储字边界存放的情况 。
•指令长度有固定长指令和可变长指令两类。
2.指令字长应尽量短 •指令短,有利于提高程序的效率,即减少所需存储量和加快运行速度。
•不能为了使指令短而影响指令系统的完备性
和规整性。指令系统的完备性差,机器的功
能受影响;规整性差,分析指令的时间必然加长。
5. 2 寻址方式 •指令如何指定操作数或操作数地址称为寻址方式。
希望指令内所含地址尽可能短;希望能访问尽可能大的存储空间;寻址方法尽可能简单;在不改变指令的情况下,仅改变地址的实际值。
常用的寻址方式有以下几类:
1. 立即寻址 •指令直接给出操作数本身,这种寻址方式又称立即数 寻址。
OP 操作数格式如下:
操作码存储器地址 存储器内容
8位立即数n+1操作码n
下条指令n+2
存储器地址 存储器内容
n+2n+1n
8立即数高 位8立即数低 位
n+3 下条指令
(a) 8位立即数 (b) 16位立即数
5.1 图 按字节编址机器中的立即寻址指令
2.直接寻址
•指令直接给出操作数地址。
OP 操作数地址格式如下:
操作码存储器地址 存储器内容
n+2n+1n
8操作数地址高 位 8操作数地址低 位
n+3 下条指令
5.2 图 按字节编址机器中的直接寻址指令
3.间接寻址
• 指令给出存放操作数地址的存储单元地址。
OP @ 间接地址格式如下: OP
操作数
有效地址
主存@ 间接地址
5.3 图 单级间接寻址
4. 寄存器 ( 直接 ) 寻址•操作数在指令指定的 CPU的某个寄存器中。
OP 寄存器号 或 OP 1寄存器号 2寄存器号
寄存器寻址有以下优点:
① CPU 寄存器数量远小于内存单元,所以
寄存器号比内存地址短,因而寄存器
寻址方式指令短;
② 操作数已在 CPU 中 , 不用访存,因而指令执行速度快。
5.寄存器间接寻址
•操作数地址在指令指定的 CPU 某个寄存器中。
•如: 8086 指令 MOV AX , [BX]
6.寄存器变址寻址
•指令指定一个 CPU 寄存器(称为变址寄存器)
和一个形式地址,操作数地址是二者之和。
OP 寄存器号 形式地址
•如: 8086 指令 MOV AL , [SI+1000H] 。
data n
data 1
data 2
…SI
形式地址
+
5.4 图 变址寻址选择数组数据
7.相对寻址 •相对寻址是把程序计数器 PC 的内容,加上
由指令给出的形式地址而形成操作数地址。
•采用相对寻址便于编制可浮动程序,这种程序随便放在内存什么位置,都能正常运行。
8.基址寻址
•基址寻址是把由指令中给出的地址 ( 或称位移量 ) 与CPU 中的某个基址寄存器相加而得到实际的操作数地址。
•变址寻址主要解决程序内部的循环问题,例如 “循环取数组中一个元素”等问题。而基址寻址则要求基址寄存器的内容能提供整个主存范围的寻址能力,指令给出的位移地址实际上指出了相对于基址的位移量。
•基址寻址为逻辑空间到物理空间的地址变换提供了支持,以便实现程序的动态再定位。
9.隐含寻址方式 •指令没有明显地给出操作数地址,而在操作码中隐含着操作数地址。
10.其它寻址方式
•有的计算机指令系统中还有更复杂的寻址方式,
如基址变址寻址、位寻址、块寻址、串寻址等等,
5.3 指令类型
•设计一台计算机的指令系统的功能时,以下几个原则必须考虑:
完备性或完整性:
兼容性:
均匀性: 可扩充性:
1.按功能可将指令分为以下几类:
(1) 算术和逻辑运算指令
(2) 移位指令和循环指令 ① 算术移位:
如图 5.5 所示。
② 逻辑移位:
如图 5.6 所示。
10100011操作数移位前:
移位后:1 01000110
操作数
C标志
C标志
0
(a) 算术左移
移位前:
移位后:11010001
10100010 ×
0
操作数
操作数 C标志
C标志
(b) 算术右移
5.5 图 算术移位
移位前:
移位后: 01010001
10100010 ×
0
操作数
操作数 C标志
C标志
5.6 图 逻辑右移
③ 环移: 1) 小环移
如图 5.7 所示。
2) 大环移
如图 5.8 所示。
C标志操作数
(a) 小循环左移
C标志操作数
(b) 小循环右移
5.7 图 小环移
(a) 大循环左移 (b) 大循环右移
5.8 图 大环移
C标志操作数 操作数
④ 半字交换
操作如图 5.9 所示。
交换前: 01001000 01101110
交换后: 01101110 01001000
5.9 图 半字交换
(3) 传送类指令
(4) 串指令
(5) 顺序控制指令
(7) 输入、输出指令 (6) CPU控制指令
2. 按操作数个数分有: (1) 双操作数指令
(2) 单操作数指令 (3) 无操作数指令
3.按操作数寻址方式分有: (1) R-R型:两个操作数都在 CPU 的寄存器中。 (2) R-S型:两个操作数中一个在 CPU 寄存器中,另一 个在内存中。 (3) S-S型:两个操作数都在内存中 。
5. 4 堆栈和堆栈存取方式
•堆栈是一种特定的数据结构 ,其特点是后进先出 (LIFO) 或先进后出 (FILO) 。 •堆栈存取方式决定它一端存取的特点,往堆栈里存数叫入(进)栈或压栈,从堆栈里取数叫出栈或弹出。
1. 用移位寄存器实现堆栈
•这是一种硬件实现的方法,用若干移位寄存器构成,又叫栈顶固定方式堆栈,如图 5.10 所示:
栈顶空栈: 栈底
栈顶b:存入b a
栈底
栈顶b:取出a
栈底
5.10图 栈顶固定方式堆栈及其存取
栈顶a:存入a
栈底
2. 内存中开辟堆栈区
•这种堆栈,存储器单元固定,而栈顶位置动态变化。
•在 CPU 中专门设置堆栈指针 SP ,指示栈顶位置。
1)自底向上生成堆栈:
•这种堆栈建栈时堆栈指针 SP 指向栈底下面一个单元(栈底是堆栈中地址最大的单元),每次入栈时, SP先减 1 ,再把入栈数据存入 SP 指向的单元。出栈时先读出 SP 所指单元的地址,然后 SP 加 1 ,即:
入栈操作( PUSH )步骤: i)SP-1→SP
ii) 存入数据→( SP )
出栈操作( POP )步骤: i) ( SP )内容读出
ii) SP+1→SP
1FFD
1FFE
1FFF
2000栈底SP堆栈指针
2000
a ( ) 建栈
1FFD
1FFE
1FFF
2000栈底
aSP堆栈指针
1FFF
b a( ) 入栈
1FFD
1FFE
1FFF
2000栈底
aSP堆栈指针
1FFF
d b( ) 出栈
5.11 图 自底向上生成堆栈
1FFD
1FFE
1FFF
2000栈底
ba
SP堆栈指针1FFE
c b( ) 入栈
2)自顶向下生成堆栈:
这种堆栈建栈时堆栈指针 SP 指向栈底上面一个单元(栈底是堆栈中地址最小的单元),每次入栈时, SP先加 1 ,再把入栈数据存入 SP 指向的单元。出栈时先读出 SP 所指单元的内容,然后 SP 减 1 ,即:
入栈操作( PUSH )步骤: i) SP+1→SP
ii) 存入数据→( SP )
出栈操作( POP )步骤: i) ( SP )内容读出
ii) SP-1→SP
5. 5 指令系统举例
5.5.1 IBM 370 系列机指令格式 •IBM 370 系列机指令格式如图5.12所示,它分为 RR
型( RRE型)、 RX型、 RS型、 SI型、 S型、 SS型及 SSE型指令等几类。其中 RR型指令为半个字长( 16 位), SS型(及 SSE型)指令为一个半字长(48 位),其余指令为单字长指令( 32 位)。 5.5.2 PDP-11 指令格式 PDP-11 是一个具有 8 个寄存器( R0-R7 )、 16 位字长的小型计算机。其中, R0-R5 为通用寄存器, R7是程序计数器 PC , R6 是栈指针 SP 。为了便于 8 位运算, PDP-11 的存储器按字节编址。
OP R1 R2RR型指令0 7 8 11 12 15
OPRRE型指令0 15
不用 R1 R2
27 28 312416 23
OPS 型指令0 15
B2 D2
312016 19
OP R1 X2RX型指令0 7 8 11 12 15
B2
19
D2
20 3116
OP I1SI型指令0 7 8 15
B2
19
D1
20 3116
OP LSS型指令0 7 8 15
B1
19
D1
20 3116
B2
32 35
D2
36 47
RS型指令 OP R1 R2
0 7 8 11 12 15
B2
1916
D2
20 31
5.12 IBM 370图 系列机指令系统
双操作数指令:操作码 4 位,每个地址码 6位,地址码由 3 位寄存器号和 3 位寻址方式字段构成 , 如图5.13(a) 所示:
单操作数指令:操作码 10 位,地址码 6 位。如图5.13(b) 所示。
转移指令:如图5.13(c) 所示,转移地址 ( 相对转移) 由 8 位位移量指出;
条件码操作指令:如图 5.13(d) 所示,低 5 位为条件标志。
操作码 寄存器号 寻址方式 寄存器号 寻址方式源操作数 目标操作数
15 12 11 9 8 6 5 3 2 0
操作码 位移量转移地址 (c) 转移指令格式
操作码 S N Z V C条件
4 3 2 1 0
(d) 条件码操作指令格式
5.13 PDP-11 图 指令格式
操作码 寄存器号 寻址方式目标操作数
5 3 2 0
(b) 单操作数指令格式
(a) 双操作数指令格式
15 6
15
15
078
5
5.5.3 Pentium 指令系统
1. 指令格式
•Pentium 采用可变长指令格式,最短的指令只有一个字节,最长的指令可有十几个字节。其指令由以下几个部分组成:
•前缀:位于指令操作码前,各类前缀的字节数如下 :
指令前缀 段前缀 操作数长度 地址长度 0 1或 0 1或 0 1或 0 1或
前缀类型:字节数:
指令:指令各部分的长度和含义如下: 操作码 寻址方式 SIB 位移 直接数据1 2或 0 1或 0 1或 1 2 4、 、 立即数
指令段: 字节数:
Mod SSR/MReg/OP BaseIndex
7 6 5 1234 670 2345 01
5.14 Pentium图 指令格式
(1) 前缀:
•前缀不是每条指令必须有的。如果有的话,各种前缀也都是可选的。
① 指令前缀:指令前缀由 LOCK前缀和重复
操作前缀组成。 LOCK前缀在多机环境下规
定是否对共享的存储器以独占方式使用;
重复操作前缀表示重复操作的类型,有以下
几种: REP 、 REPZ 、 REPE 、 REPNZ 、 REPNE。 ② 段前缀:如果有段前缀,则指令采用段前缀指定的段寄存器,而不用该指令缺省值规定的段寄存器。 ③ 操作数长度前缀:如果有该前缀,操作数长度将采用它规定的操作数长度处理,而不用该指令缺省值规定的操作数长度,以便操作数在 16 位和 32 位之间进行切换。
④ 地址长度前缀:如果有该前缀,地址长度将采用它规定的地址长度而不用该指令缺省值规定的地址长度,以便处理器用 16 位或 32 位地址来寻址存储器。
(2) 指令:
① 操作码: 1-2 字节,操作码除了指定指令的操作外,还有以下信息:数据是字节还是全字长;数据传送的方向,即寻址方式字节中 REG 字段指定的寄存器是源还是目标;指令中如果有立即数,是否对它进行符号扩展。
② 寻址方式字节:由 MOD 、 reg/OP 和 R/M三个段组成,由 MOD 和 R/M 联合指定 8 种寄存器寻址和 24 种变址寻址方式, reg/OP 指定某个寄存器为操作数或作为操作码的扩展用。
③ SIB :由 SS ( 2 位)、 Index 、 Base三部分组成。 SS 指定比例系数(变址寻址方式时,变址寄存器内容要乘以该系数); Index 指定变址寄存器; Base 指定基址寄存器。 ④ 位移量: 指令中如果有位移量,可以是 1 、 2 或 4个字节。 ⑤ 直接数据:指令中如果有立即数,可以是 1 、 2 或4 字节。
2. 寻址方式
(1) Pentium 物理地址的形成 逻辑地址段 偏移
...
目录 页号 位移 线性地址
... ...
物理地址
页目录表 页表
段表
5.15 Pentium图 物理地址的形成
•Pentium 的逻辑地址包括段和偏移量,段号经过段表直接得到该段的首地址,和有效地址 ( 即段内偏移 ) 相加形成一维的线性地址。如果采用页式存储管理,线性地址再转化为实际的物理地址。后一个步骤与指令系统无关,由存储管理程序实现,对程序员来讲是透明的 。
(2) Pentium 的寻址方式
5.1 Pentium表 的寻址方式
寻址方式 说明立即寻址 指令直接给出操作数
R指定的寄存器 的内容为操作数寄存器寻址位移 LA= SR +A( )
基址寻址 LA= SR + B( ) ( )基址加位移 LA= SR + B +A( ) ( )比例变址加位移 LA= SR +(I)×S + A( )
LA= SR + B + I +A( ) ( ) ()LA= SR + B +(I)×S + A( ) ( )
LA=(PC)+A
基址加变址加位移基址加比例变址加位移
相对寻址
LA: (X):X SR:注: 线性地址 的内容 段寄存器B: I: S:基址寄存器 变址寄存器 比例系数
PC:程序计数器A:指令中给定地址段的位移量
R:寄存器
5.5.4 Power PC 指令系统
1.指令格式
条件转移 选项 CR 位 转移位移量 L
条件转移 选项 CR 位 通过计数器或链接寄存器间接 L
A
无条件转移 选项 CR 位 通过计数器或链接寄存器间接 L
(a) 转移指令
注: L 为连接位, A 为绝对 / 相对标志
6 位 5 位 5 位 5 位
CR 目标位 源位 源位 与、或、异或等 /
(b) 条件寄存器逻辑指令
6 位 5 位 5 位 16 位
表 5.2 Power PC 指令简表
6 位 5 位 5 位 11 位位移
取数 / 存数间接 目标寄存器 基址寄存器 变址寄存器 大小、符号、更新 /取数 / 存数间接 目标寄存器 基址寄存器 位移 XO
(c) 取数 / 存数指令
取数 / 存数间接 目标寄存器 基址寄存器
算术运算 源寄存器 源寄存器 ADD 、 SUB 等 RO
ADD SUB 等目标寄存器
源寄存器 有符号立即数逻辑运算 源寄存器 源寄存器 ADD 、 SUB 等 R
AND 、 OR 等 源寄存器 有符号立即数环移 源寄存器
源寄存器 移位类型或屏蔽R
环移 平移 源寄存器 移位量 屏蔽起点 屏蔽终点
R
环移 源寄存器 R 移位量 屏蔽字 XO S
环移 源寄存器 R 移位量 屏蔽字 XO
源寄存器 类型或屏蔽平移 源寄存器 RS
(d) 整数算术/逻辑运算及环移/平移指令
6 位 5 位5 位 16 位
目标寄存器
目标寄存器目标寄存器目标寄存器目标寄存器目标寄存器
目标寄存器目标寄存器
源寄存器 浮点加等浮点运算 目标寄存器 源寄存器 R 源寄存器
(e) 浮点运算指令
注: A :绝对或 PC 相对 L : 链接至子程序 O :将溢出标志记录到 XER 中 R :将状态标志记录到 CR1 中 XO :操作码扩展 S :移位量字段的一部分
2.寻址方式 (1) 取数 / 存数指令的寻址方式 •这类指令主要有两种寻址方式:间接寻址和间接变址寻址,如图 5.16 所示。 •间接寻址其有效地址 EA=(BR)+D , BR 为基址寄存器,任何一个通用寄存器均可为基址寄存器; D 为 16 位 ( 有正负 ) 的位移量。间接变址寻址其有效地址EA=(BR)+(IR) , IR 为变址寄存器,任一通用寄存器也均可作为变址寄存器。
(BR)基址寄存器 (IR)变址寄存器
逻辑地址
至地址转换机构
(b) 变址间接寻址
(BR)基址寄存器 D有符号位移
逻辑地址
至地址转换机构
(a) 间接寻址
5.16 Power PC图 访存指令寻址方式
(2) 转移指令的寻址方式 ① 绝对地址: ② 相对寻址: ③ 间接寻址:
(3) 算术指令的寻址方式
•整数算术指令可采用寄存器寻址或立即寻址,立即数是 16 位有符号数。浮点算术指令只可采用寄存器寻址。
5. 6 CISC 与 RISC 指令
1.背景 •“复杂指令集计算机”,简称 CISC(Complex Instruction Set Computer) 。 •使指令系统越来越复杂的出发点有以下几点: ① 使目标程序得到优化:② 给高级语言提供更好的支持:③ 提供对操作系统的支持:
•精简指令集计算机 RISC ( Reduced Instruction Set Computer )。
2.特点 •精简指令系统计算机的着眼点不是简单地放在简化指令系统上,而是通过简化指令使计算机的结构更加简单合理,从而提高机器的性能。 •RISC 与 CISC 比较,其指令系统的主要特点为:
2 )指令长度固定,指令格式种类少,寻址方式 种类少;
3 )大多数指令可在一个机器周期内完成;
4 )通用寄存器数量多,只有存数 / 取数指令访问存储 器,而其余指令均在寄存器之间进行操作。
1) 指令数目较少,一般都选用使用频度最高的一些简单指令;
•采用 RISC技术后,由于指令系统简单, CPU 的控制逻辑大大简化,芯片上可设置更多的通用寄存器,指令系统也可以采用速度较快的硬连线逻辑来实现,且更适合于采用指令流水技术,这些都可以使指令的执行速度进一步提高。
•指令数量少,固然使编译工作量加大,但由于指令系统中的指令都是精选的,编译时间少,反过来对编译程序的优化又是有利的。 3. CISC与 RISC之争论 •随着速度、芯片密度的不断提高,使 RISC 系统日趋复杂,而 CISC 机也由于采用了部分 RISC先进技术,其性能更加提高。
5.7 MMX技术
•MMX(Microprocessor Media Extension) 是 Intel公司为提高 PC 机上处理多媒体和通信能力而推出的新一代处理器技术,它通过在 Pentium 或 pentium Pro处理器中增加 8 个 64 位寄存器和 57条新指令来实现。 1. MMX的由来与特点 多媒体应用中的图形、图像、视频、音频的操作中存在大量共同特征的操作,如:
· 短整数类型的并行操作 ( 如 8图形象素和 16 位音频信 号 ) ;
· 频繁的乘法累加 ( 如 FIR滤波,矩阵运算 ) ;· 短数据的高度循环运算 ( 如快速傅里叶变换 FFT 、离散余弦变换 DCT) ;· 计算密集型算法 ( 如三维图形、视频压缩 ) ;
· 高度并行操作 ( 如图像处理 ) 。
•MMX技术的特点: (1)引进了新的数据类型和通用寄存器 ;
• MMX技术的主要数据类型为定点紧缩 (Packed) 整数它定义了 4 种新的 64 位数据类型 ( 如图 5.17 所示) 。
63 56 55 48 31 24 23 16 15 8 7 0
63 48
63 0
紧缩字节
紧缩字
4字
紧缩双字
5.17 MMX图 技术引入的数据类型
47 32 31 16 15 0
47 40
63 32 31 0
3239
(2) 采用 SIMD(Single Instruction Multi Data技术
•单条指令同时并行地处理多个数据元素
(3) 饱和 (Situration) 运算
•两类运算模式:环绕运算和饱和运算。
•在环绕运算或称非饱和运算中,上溢或下溢的结果被截取,即进位被丢掉,仅返回低有效位值。
•饱和运算:即上溢与下溢结果被截取至各类数据值域的最大值或最小值。
(4) 兼容性
• MMX技术与现有的 IA(Intel Architecture)处理器和 OS保持向下兼容, IA MMX状态建立在 IA 浮点状态之上,无需增加新的状态。
2. MMX指令系统 • 7 大类:算术运算指令、逻辑运算指令、比较指令、转换指令、移位指令、数据传送指令、置空 MMX状态指令。
( 1 )指令句法 · 数据类型: 紧缩字节、紧缩字、紧缩双字、 64 位字;有符号数与无符号数;环绕和饱和运算。
· 句法: 词头; 指令; 词尾。
(2) 指令类型 1) 算术运算类指令:有紧缩加 (ADD) 、减 (SUB) 、乘法 (MUL) 、乘加 (MADD) 等指令。
2) 比较指令: PCMPEQ( 相等比较 ) 、 PCMPGT( 是否大于 ) ,这类指令用于条件转移操作。 3) 转换指令:实现各类紧缩数据之间的转换。 4) 逻辑指令:在 64 位数据上进行按位“与”、“与非” 或“与非”和“异或”操作。
5) 移位指令: 64 位数据的逻辑左 /右移和算术右移。 6) 数据传送指令:在主存储器和 MMX 寄存器之间或MMX 寄存器本身之间 64 位数据传送;或整型寄存器与 MMX 寄存器之间 32 位数据传送。 7) EMMX(Empty MMX State) :置空 MMX 状态。在 MMX 例程结束时,清除MMX状态。
(3) 操作数
•MMX 指令中除数据传送指令以外,源操作数都驻留在存储器或 MMX 寄存器中,而目标操作数驻留在 MMX 寄存器中;而传送指令,源和目标操作数还可以是整型寄存器内容。