Degang Xu,Henan University Of Technology.
Xulaoshi @tom,com
2009年 7月 27日 8时 37分第四章 指令系统
概述
寻址方式
指令系统
2009年 7月 27日 8时 37分 2年 月 日 时 分概 述
指令,是指示计算机某种操作的命令。
微指令,机器指令,宏指令
指令系统,一台计算机中所有机器指令的集合。
它是机器硬件设计的依据,也是软件设计的基础。
它决定了一台计算机硬件的主要性能和基本功能。
是硬件和软件间的界面。
系列计算机,有共同的指令集,相同的基本体系结构。
CISC和 RISC
2009年 7月 27日 8时 37分 3年 月 日 时 分
一个完善的指令系统应满足:
1.完备性:指令丰富,功能齐全,使用方便。
2.有效性:程序占空间小,执行速度快。
3.规整性:对称性,匀齐性,指令格式和数据格式的一致性。
4.兼容性:
,向上兼容,----系列机中低档机上运行的软件可以在高档机上运行。
2009年 7月 27日 8时 37分 4年 月 日 时 分计算机语言与硬件结构的关系
高级语言的语句和用法与具体机器的指令系统无关;
低级语言分机器语言和汇编语言,他们和具体机器的指令系统密切相关。
汇编语言与硬件的关系密切,编写的程序紧凑、
占内存小、速度快,特别适合与编写经常与硬件打交道的系统软件;而高级语言不涉及机器的硬件结构,通用性强、编写程序容易,特别适合与编写与硬件没有直接关系的应用软件。
2009年 7月 27日 8时 37分 5年 月 日 时 分概 述
机器指令的要素
– 操作码
– 源操作数
– 目的操作数
– 下一条指令的引用指令字 ( 简称指令 ) 即表示一条指令的机器字 。
指令格式 则是指令字用二进制代码表示的结构形式,由 操作码 字段和 地址码 字段组成 。
操作码 地址码 地址码
2009年 7月 27日 8时 37分 6年 月 日 时 分
1,操作码设计计算机时,对指令系统的每一条指令都要规定一个操作码 。
指令操作码表示该指令进行什么性质的操作,
表征指令的操作特性与功能 。
组成操作码字段的位数一般取决于计算机指令系统的规模 。
例如,一个指令系统只有 8条指令,则有 3位操作码就够;如果有 32条指令,那么就需要 5位操作码 。
2009年 7月 27日 8时 37分 7年 月 日 时 分
2,地址码地址码字段通常指定参与操作的操作数的地址 。
根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令 。 目前,
二地址指令和一地址指令用的最多 。
零地址指令一地址指令二地址指令三地址指令操作码
A1操作码
A2A1操作码
A3A2A1操作码
2009年 7月 27日 8时 37分 8年 月 日 时 分
(1)零地址指令的指令字中只有操作码,而没有地址码。
(2)一地址指令常称为单操作数指令。
OP (A) -> A (AC) OP (A) -> AC
(3)二地址指令常称为双操作数指令。
(A1) OP (A2) -> A1
(4)三地址指令字中有三个操作数地址。
(A1) OP (A2) -> A3
OP表示操作性质 ;( AC) 表示累加寄存器 AC中的数;
( A) 表示内存中地址为 A的存储单元中的数或运算器中地址为 A的通用寄存器中的数; → 表示把操作(运算)结果传送到指定的地方。
2009年 7月 27日 8时 37分 9年 月 日 时 分
二地址指令格式中,从操作数的物理位臵来说,
又可归结为三种类型。
存储器 -存储器( SS)型指令,操作时都是涉及内存单元,参与操作的数都放在内存里,从内存某单元中取操作数,操作结果存放至内存另一单元中,因此机器执行这种指令需要多次访问内存。
寄存器 -寄存器( RR)型指令,需要多个通用寄存器或个别专用寄存器,从寄存器中取操作数,把操作结果放到另一寄存器。机器执行寄存器 -寄存器型指令的速度很快,因为执行这类指令,不需要访问内存。
寄存器 -寄存器( RS)型指令,执行此类指令时,
既要访问内存单元,又要访问寄存器。
2009年 7月 27日 8时 37分 10年 月 日 时 分
3,指令字长度一个指令字中包含二进制代码的位数,称为指令字长度 。 而机器字长是指计算机能直接处理的二进制数据的位数,与主存单元的位数一致,
它决定了计算机的运算精度 。
它们之间关系如上:其中 L为指令字长度,N为机器字长度
2009年 7月 27日 8时 37分 11年 月 日 时 分
使用多字长指令,目的在于 提供足够的地址位来解决访问内存任何单元的寻址问题 。 其主要缺点 是必须两次或多次访问内存以取出一整条指令,降低了 CPU的运算速度,又占用了更多的存储空间 。
等长指令字结构,各种指令字长度是相等的 。
这种指令字结构简单,且指令字长度是不变的 。
变长指令字结构,各种指令字长度随指令功能而异 。 结构灵活,能充分利用指令程度,但指令的控制较复杂 。
2009年 7月 27日 8时 37分 12年 月 日 时 分
4.指令助记符
由于硬件只能识别 1和 0,所以采用二进制操作码是必要的,但是书写程序却非常麻烦。
为了便于书写和阅读程序,每条指令通常用 3个或 4个英文缩写字母来表示。
这种缩写码叫做 指令助记符 。
在不同的计算机中,指令助记符的规定是不一样的。因此,指令助记符还必须转换成与它们相对应的二进制码。
2009年 7月 27日 8时 37分 13年 月 日 时 分指令格式举例八位微型计算机的指令格式
8位微型机字长只有 8位,指令结构是一种可变字长形式,包含单字长、双字长、三字长指令等多种。
内存按字节编址,所以单字长指令每执行一条指令后,指令地址加1。双字长指令或三字长指令每执行一条指令时,指令地址要加 2或加 3,可见多字长的指令格式不利于提高机器速度。
操作数地址操作数地址操作数操作数地址操作数操作数单字长指令双字长指令三字长指令
2009年 7月 27日 8时 37分 14年 月 日 时 分指令和指令系统 —— 指令的使用
一般的操作数类型大小选择主要有:字节,半字 ( 16位 ),单字 ( 32位 ),和双字 ( 64位 ) 。
74%
19%
7%
69%
31%
0% 20% 40% 60% 80%
×?
μ¥ ×?
°? ×?
×ú
Díù μù
2009年 7月 27日 8时 37分 15年 月 日 时 分例:指令格式如下所示,其中机器字长 16位,OP
为操作码,试分析指令格式的特点。
OP ----- 源寄存器 目标寄存器
15 9 7 4 3 0
[解 ]:
(1)单字长二进制指令。
(2)操作码字段 OP可以指定 27=128条指令。
(3)源寄存器和目标寄存器都是通用寄存器(可分别指定 16个),所以是 RR型指令,两个操作数均在寄存器中。
(4)这种指令结构常用于算术逻辑运算类指令。
2009年 7月 27日 8时 37分 16年 月 日 时 分
例,指令格式如下所示,OP为操作码字段,试分析指令格式特点。
15 10 7 4 3 0
[解 ]:
( 1)双字长二地址指令,用于访问存储器。
( 2)操作码字段 OP为 6位,可以指定 64种操作。
( 3)一个操作数在源寄存器(共 16个),另一个操作数在存储器中(由变址寄存器和位移量决定)
所以是 RS型指令。
2009年 7月 27日 8时 37分 17年 月 日 时 分指令和数据的寻址方式
指令的寻址方式计算机中有两种信息 。 即 指令 和 数据 ( 或称操作数 ),它们都存放在存储器相应的地址中 。 运行程序时,计算机逐条执行指令,并对数据进行处理 。
如何从存储器中找到所需要的指令或数据呢? 很明显,只要找到它们在存储器的有效地址即可 。
所谓 寻址方式,就是寻找指令或操作数的有效地址的方式 。
1,顺序寻址方式,按照指令在内存的存放位臵顺序地取出指令,然后执行的过程,为顺序寻址方式。
2,跳跃寻址方式,程序转移执行的顺序。
2009年 7月 27日 8时 37分 18年 月 日 时 分
1.顺序寻址为了达到顺序寻址的目的,CPU中必须有一个程序计数器( PC)
对指令的顺序号进行计数。 PC中开始时存放程序的首地址,然后每执行一条指令,PC加 1,
以指出下条指令的地址,
直到程序结束。
100
PC
+1
内存
100
101
2009年 7月 27日 8时 37分 19年 月 日 时 分
2,跳跃寻址当程序中出现分支或循环时,
就会改变程序的执行顺序 。 此时,
对指令寻址就要采取跳跃寻址方式 。 所谓跳跃,就是指下条指令的地址不是通过程序计数器 PC加
1获得的,而是由指令本身给出 。
100 Jmp 103
PC 主存
100
101
102
103
2009年 7月 27日 8时 37分 20年 月 日 时 分操作数的寻址方式
1,隐含寻址
2,立即寻址
3,直接寻址
4,间接寻址
5,寄存器寻址方式和寄存器间接寻址方式
6,相对寻址方式
7,基值寻址方式
8,变址寻址方式
9,块寻址方式
10,段寻址方式
2009年 7月 27日 8时 37分 21年 月 日 时 分指令和数据的寻址方式
隐含寻址这种类型的指令,不是明显地给出操作数的地址,而是指令中隐含着操作数的地址 。
在指令中不明显的给出而是隐含着操作数的地址 。 例如,单地址的指令格式,没有在地址字段中指明第二操作数地址,而是规定累加寄存器 AC作为第二操作数地址,AC对单地址指令格式来说是隐含地址 。
2009年 7月 27日 8时 37分 22年 月 日 时 分指令和数据的寻址方式
立即地址指令的地址字段指出的不是操作数的地址,而是 操作数本身,这种寻址方式称为立即寻址 。 立即寻址方式的特点是指令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间 。
例如,单地址的 移位指令 格式为这里,D不表示地址,而是表示某寄存器中存放的操作数需要移位的次数,因此 D可看做移位指令的操作数。 F
为标志位,当 F=1时,进行右移;当 F=0时,进行左移。
OP( 移位 ) F D
2009年 7月 27日 8时 37分 23年 月 日 时 分指令和数据的寻址方式直接寻址直接寻址是一种基本的寻址方法,其特点是:
在指令格式的地址字段中 直接指出操作数在内存的地址 D。 由于操作数的地址直接给出而不需要经过某种变换或运算,所以称这种寻址方式为直接寻址方式 。
操作数 =2000H
OP X D=1350H
2000H
1350H
2009年 7月 27日 8时 37分 24年 月 日 时 分指令和数据的寻址方式
间接寻址间接寻址是相对于直接寻址而言的,
在间接寻址的情况下,指令地址字段中的形式 地址 D不是操作数的真正地址,而是操作数地址的指示器,或者说 D单元的内容才是操作数的有效地址 。
2009年 7月 27日 8时 37分 25年 月 日 时 分指令和数据的寻址方式操作数 =1234H
OP X2 D=1000H
操作数地址 =2000H
S=1234H
1000H
2000H
2009年 7月 27日 8时 37分 26年 月 日 时 分指令和数据的寻址方式
寄存器寻址和寄存器间接寻址方式当操作数不放在内存中,而是放在中央处理器的通用寄存器中时,可采用寄存器寻址方式 。 显然,此时指令中给出的操作数地址不是内存的地址单元号,
而是通用寄存器的编号,操作数在 CPU的内部寄存器中 。 如,(AX,BX,CX,DX)
寄存器间接寻址方式与寄存器寻址方式的区别在于:指令格式中的寄存器内容不是操作数,而是操作数的地址,该地址指明的操作数在内存中 。
2009年 7月 27日 8时 37分 27年 月 日 时 分指令和数据的寻址方式
相对寻址把 程序计数器 PC的内容 加上指令格式中的 形式地址 D而形成操作数有效地址 。 程序计数器的内容就是当前指令的地址 。
因此,所谓,相对,寻址,就是相对于当前指令地址而言 。 采用相对寻址方式的好处是程序员勿需用指令的绝对地址编程,因而所编程序可以放在内存任何地方 。
2009年 7月 27日 8时 37分 28年 月 日 时 分指令和数据的寻址方式假设 D=1000H,PC=2000H,则有效地址 =( PC) +D
=2000H+1000H=3000H
操作数 =( 3000H) =1234H
PC
操作数 =1234H+
OP X3 D
1234H
3000H
2009年 7月 27日 8时 37分 29年 月 日 时 分指令和数据的寻址方式
变址和基值寻址方式
变址寻址方式与基值寻址方式有点类似,它们都是把某个变址寄存器或基值寄存器的内容,加上指令格式中的形式地址而形成操作数的有效地址。
但使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的规律变化。
2009年 7月 27日 8时 37分 30年 月 日 时 分指令和数据的寻址方式
A
操作数
OP X3 D
+ S
E=S=D+(A)
2009年 7月 27日 8时 37分 31年 月 日 时 分指令和数据的寻址方式
复合寻址方式
复合寻址方式是把间接寻址方式同相对寻址方式或变址相结合而形成的寻址方式 。 它分为先间接方式与后间接方式两种 。
( 1) 变址间接式
这种寻址方式是先把变址寄存器的内容 A
和形式地址 D相加得 A+D,然后间接寻址,求得操作数的有效地址 。 操作数的有效地址为 E=
( A+D)
2009年 7月 27日 8时 37分 32年 月 日 时 分指令和数据的寻址方式假设变址寄存器 A的值为 0050H,D=1000H,则有效地址
=(( A) +D) =( 0050H+1000H) =2345H
操作数 =( 2000H) =2345H
A
N
S 操作数
OP X3 D
+
2009年 7月 27日 8时 37分 33年 月 日 时 分指令和数据的寻址方式
( 2) 间接变址式
这种寻址方式是先将形式地址取间接变换 ( D) =N然后把 N和变址寄存器的内容 A相加,即得操作数的有效地址 。 操作数的有效地址表达式为 E=A+( D)
=A+N
2009年 7月 27日 8时 37分 34年 月 日 时 分指令和数据的寻址方式假设变址寄存器 A的值为 0050H,D=1000H,
则有效地址 =A+( D)
=0050H+( 1000H) =0050+2000 =2050H
操作数 =( 2050H) =3456H
A 操作数
N
S+
OP X3 D
2000H
3456H
2009年 7月 27日 8时 37分 35年 月 日 时 分指令和数据的寻址方式
块寻址:
通常在指令中指出数据块的起始地址和数据块的长度,常用在输入输出指令中。
多用于 I/O指令。对顺序连续的成块数据字进行寻址。
目的:压缩程序的长度,加块执行速度。
用于,1)两个部件间的数据交换;
2)程序,数据块的浮动。
若块的长度可变,格式如下:
操作码 源首址 标志位 末首址
2009年 7月 27日 8时 37分 36年 月 日 时 分指令和数据的寻址方式
段寻址以 8086的段寻址为例。这种寻址方式的 实质是基值寻址 。 Intel 8086/8088微机中,ALU16位运算,但其寻址范围可到 1M,即地址有 20位 。 16位逻辑地址
16位段寄存器 4位
20位物理地址
ALU
2009年 7月 27日 8时 37分 37年 月 日 时 分操作数寻址方式设计的要求
1.指令内包含的地址尽可能短;
短地址指令占存储空间小,且能减少存储时间。
2.能访问尽可能大的存储空间;
3.地址能隐含在寄存器里;
寄存器字长与机器字长相同,一般对应整个存储空间。这样在发生大跨步跳跃时,用短指令也行。
4.希望在不改变指令的情况下改变地址的实际值;能够处理数组,表格或数据串。
5.寻址方式尽可能简单。
2009年 7月 27日 8时 37分 38年 月 日 时 分例:一种二地址 RS型指令的结构如下所示:
其中 I为间接寻址标志位,X为寻址模式字段,D位偏移量字段。通过 I,X,D的组合,可构成下表所示的寻址方式。 请写出六种寻址方式的名称。
[解 ]:
⑴直接寻址 ⑵相对寻址 ⑶变址寻址
⑷寄存器间接寻址 ⑸间接寻址 ⑹基址寻址
6位 4位 1位 2位 16位
2009年 7月 27日 8时 37分 39年 月 日 时 分堆栈寻址方式堆栈 ------能存取数据的暂时存储单元,
一,串联堆栈一组专门的寄存器,一个 R保存一个数据。
数据的传送在栈顶和累加器之间进行。
特点,速度高,后进先出。
A
B
C
D
AC
缺点:
1、寄存器的数目有限的
2、堆栈读出是破坏性的
2009年 7月 27日 8时 37分 40年 月 日 时 分二,存储器堆栈用一部分主存空间作堆栈,
优点,1.长度可随意 ;
2.堆栈的数目可随意指定 ;
3.寻址简单 --------用访内指令,
硬件支持,
SP---堆栈指示器 (栈指针 ),CPU中一个专门寄存器。
SP的内容是栈顶的单元地址。改变 SP的内容即可移动栈顶的位臵。
注意,主存中某一部分作为堆栈区后,该部分不能作其它用途。
2009年 7月 27日 8时 37分 41年 月 日 时 分一 ) 进栈 --------累加器中的数送堆栈保存,
( AC) → Msp (sp) - 1 →sp
97 97
AC 98 AC 98
99 99--sp
100 --sp 100
97
AC 98--sp
99
100
b
a
a b a
2009年 7月 27日 8时 37分 42年 月 日 时 分二 )出栈 -------将堆栈中的数取出送累加器,
(sp)+1 →sp (Msp) →AC
97 97
98—sp 98
99 AC 99--sp
100 100
97
98
99
100
b
a
b
a
a
2009年 7月 27日 8时 37分 43年 月 日 时 分
8086 堆栈指令设 sp的初值 MOV sp,im
采用下推式 ( PUSH DOWN)
堆栈的最大容量为 sp的初值与 ss间的距离。
例,PUSH AX
分两次完成,AH →sp,(sp) - 1 →sp
AL →sp,(sp) - 1 →sp
注意,
存储器堆栈中,进栈时先存入数据,后修改堆栈指示器;出栈时,先修改堆栈指示器,
然后取出数据。
2009年 7月 27日 8时 37分 44年 月 日 时 分典型指令
一台计算机最基本的、必不可少的指令是不多的,因为很多指令都可以用这些最基本的指令组合来实现。
既可以直接用硬件实现,也可以用其他指令编成子程序来实现,但两者在执行时间上差别很大,
因此在指令系统中,有相当一部分指令是为了提高程序的执行速度和便于程序员编写程序而设臵的。
另外,指令系统的有效性还表现在用它所编制的程序占用的存储器空间小。
2009年 7月 27日 8时 37分 45年 月 日 时 分
分类 ( 8088/8086)
1.数据传送类取数 MOV AX,TEMP
存数 MOV TEMP,AX
传送 MOV AX,CX
2.算术运算类定点+,-,×,÷,ADD,ADC,INC,
SUB,DEC,MUL,DIV等浮点+,-,×,÷,求反,求补 NEG,比较 CMP
3.逻辑运算类
NOT,AND,OR,XOR,TEST
2009年 7月 27日 8时 37分 46年 月 日 时 分
4.程序控制类无条件转移 JMP
条件转移 C,Z,S,P,O
转子程序 JSR
子程序返回 RET
中断返回 IRET
5.输入 /输出类
IN AX,n OUT n,AX
6.其他类标志操作,CLC( clear carry flag)
STC (set carry flag)
CLI (clear interrupt elable flag)
HLT,WAIT,ESC,LOCK
2009年 7月 27日 8时 37分 47年 月 日 时 分指令和指令系统 —— 指令的使用算术和逻辑运算 整数的算术和逻辑操作:加、减、与、或等。
数据传输 Lo ad /St ore
控制 分支、跳转、过程调用和返回、自陷等。
系统 操作系统调用、虚拟存储器管理等。
浮点 浮点操作:加、乘等。
十进制 十进制加、十进制乘、十进制到字符的转换。
字符串 字符串移动、字符串比较、字符串搜索等。
图形 象素操作、压缩 / 解压操作等。
2009年 7月 27日 8时 37分 48年 月 日 时 分指令和指令系统 —— 指令的使用执行频率排序 80 X 86 指令 指令执行频率
1 Lo a d 22 %
2 条件分支 20 %
3 比较 16 %
4 S t ore 12 %
5 加 8 %
6 与 6 %
7 减 5 %
8 寄存器-寄存器间数据移动 4 %
9 调用 1 %
10 返回 1 %
合 计 96 %
2009年 7月 27日 8时 37分 49年 月 日 时 分
CISC和 RISC
CISC,复杂指令系统
RISC,精简指令系统
2009年 7月 27日 8时 37分 50年 月 日 时 分
CISC和 RISC—— 问题的提出
CISC的问题
– 庞大的指令集
– 纷繁复杂的寻址模式
– 硬件实现复杂 ( 硬件资源的利用率低 )
2009年 7月 27日 8时 37分 51年 月 日 时 分精简指令集结构
RISC的理由
– 减小代码空间
精简指令集结构的特征
– 每周期一条指令
– 寄存器 -寄存器操作(除 Load/Store类型结构)
– 简单的寻址方式
– 简单的指令格式
2009年 7月 27日 8时 37分 52年 月 日 时 分
RISC指令系统的最大特点是:
⑴ 选取使用频率最高的一些简单指令,
指令条数少;
⑵ 指令长度固定,指令格式种类少;
⑶ 只有取数/存数指令访问存储器,其余指令的操作都在寄存器之间进行 。
2009年 7月 27日 8时 37分 53年 月 日 时 分例题,分析指令格式及寻址方式特点 。
15 12 11 9 8 65 3 2 0
源地址 目标地址答,指令格式及寻址方式的特点如下:
1) 单字长二地址指令;
2) 操作码可指定 16条指令;
3) 源和目的均有 8种寻址方式;
4) 源地址寄存器和目的地址寄存器均有 8个 。
OP 寻址方式 寄存器 寻址方式 寄存器