2.1.3 自定义数据表示
( 目前在多数计算机中数据存储单元(寄存器、主存储器、外存储器等)只存放纯数据通过指令中的操作码来解释:
数据的类型(定点数、浮点数、复数、字符、字符串、逻辑数、向量等)
进位制(2进制、10进制、16进制等)
数据字长(字、半字、双字、字节等)
寻址方式(直接寻址、间接寻址、相对寻址、寄存器寻址等)
数据的功能(地址、数值、控制字、标志等)等同一种操作指令通常需要很多条
( 在高级语言和其它许多应用软件中数据的属性必须由数据自己定义,
( 在高级语言与机器语言之间的语义差距,要靠编译器等填补
( 60年代开始,Burroughs公司在大型计算机中引入自定义数据表示方式
和带标志符的数据表示方式
1、带标志符的数据表示法
( Burroughs公司的标志符数据表示方法
在B5000大型机中,每个数据有一位标志符在B6500和B7500大型机中,每个数据有三位来标志符在R-2巨型机中采用10位标志符
标志符
数 值
带有标志符的数据表示方式
2位 2位 1位 4位 1位功能
陷井
封写
类型
校验
数 值
10位标志符在R-2巨型机中带标志符的数据表示方式
( R-2巨型机中的标志符功能位:操作数、指令、地址、控制字陷井位:由软件定义四种捕捉方式封写位:指定数据是只读的还是可读可写类型位:对于操作数:二进制、十进制、定点数、浮点数、复数、
字符串、单精度、双精度等
对于地址:绝对地址、相对地址、变址地址、未连接的地址等
( 标志符由编译器或其它系统软件建立,对程序员透明
( 程序(包括指令和数据)的总存储量分析
数据存储量增加,指令存储量减少例2.6:假设X处理机的数据不带标志符,其指令字长和数据字长均为32位。Y处理机的数据带有标志符,每个数据的字长增加至35位,其中有3位是标志符,其指令字长由32位减少至30位。并假设一条指令平均访问两个操作数,每个操作数平均被访问R次。现有一个程序,它的指令条数为I,分别计算在这两种不同类型的处理机中程序所占用的存储空间。
解:X处理机程序占用的存储空间总和为:,
Y处理机程序占用的存储空间总和为:,
Y处理机与X处理机的程序占用存储空间的比值:
当R>3时,有,在实际应用中经常是R>10,
即带标志符的处理机所占用的存储空间通常要小。
采用标志符的数据长度
带标志符和不带标志符两种情况下程序所占存储空间比较采用标志符数据表示方法的主要优点:
1、简化了指令系统。
2、由硬件自动实现一致性检查和数据类型的转换。
例如:在IBM 370系列机中执行A=A+B运算,若A、B都是十进制数,只需要一条指令,共6个字节,在IBM 370/145机上的执行时间是13微秒,若A与B中有一个是定点二进制数,由于要进行数据类型的一致性检查和转换,在PL/I语言中的编译结果为13条指令,共64个字节,在IBM 370/145机上的执行时间是408微秒,两者相比,存储空间节省5倍,运算速度快30多倍。
3、简化程序设计,缩小了人与机器之间的语义差距。
4、简化编译器,使高级语言与机器语言之间的语义差距大大缩短。
5、支持数据库系统,一个软件不加修改就可适用于多种数据类型。
6、方便软件调试,在每个数据中都有陷井位。
采用标志符数据表示方法的主要缺点:
1、数据和指令的长度可能不一致。
2、指令的执行速度降低(程序的设计时间、编译时间和调试时间缩短)
3、硬件复杂度增加。
2、数据描述符表示法
( 数据描述符与标志符的区别:
标志符只作用于一个数据,而数据描述符要作用于一组数据。
( Burroughs公司生产的B-6700机中采用的数据描述符表示方法。
最高三位为101时表示数据描述符,
最高三位为000时表示数据。
101
标志位
长 度
地 址
数据描述符
000
数 值
数据
例如:用数据描述符表示方法表示一个3×4矩阵A。
用数据描述符表示方法表示一个3×4矩阵
……
101
标志位
3
101
标志位
4
101
标志位
4
101
标志位
4
000
a11
000
a12
000
a13
000
a14
……
000
a21
000
a22
000
a23
000
a24
……
000
a31
000
a32
000
a33
000
a34
……
2.2 寻址技术
( 寻址技术研究的主要内容:编址方式、寻址方式和定位方式
( 寻址技术研究的主要对象:寄存器、主存储器、堆栈和输入输出设备
( 方法:分析各种寻址技术的优缺点,如何选择和确定寻址技术
2.2.1 编址方式
2.2.2 寻址方式
2.2.3 定位方式
2.2.1 编址方式
( 定义:编址方式是指对各种存储设备进行编码的方法。
( 主要内容:编址单位、零地址空间个数、并行存储器的编址技术、输入输出设备的编址技术
1、编址单位
( 常用的编址单位:字编址、字节编址、位编址、块编址等
( 编址单位与访问字长一般:字节编址,字访问部分机器:位编址,字访问辅助存储器:块编址,位访问
( 字节编址字访问的优缺点有利于信息处理地址信息浪费存储器空间浪费读写逻辑稍复杂
0字节位置引起的问题
2、零地址空间个数需要编址的设备主要有通用寄存器、主存储器和输入输出设备。
( 三个零地址空间:通用寄存器、主存储器和输入输出设备均独立编址
( 两个零地址空间:主存储器与输入输出设备统一编址
( 一个零地址空间:所有存储设备统一编址
最低端是通用寄存器,最高端是输入输出设备,中间为主存储器
( 隐含编址方式,实际上没有零地址空间堆栈、Cache等
3、输入输出设备的编址
( 一台设备一个地址
( 一台设备两个地址:数据寄存器、状态或控制寄存器多个需要编址的寄存器共用同一个地址的方法:
依靠地址内部来区分,适用于被编址的接口寄存器的长度比较短
,下跟法”隐含编址方式,必须按顺序读写寄存器。
( 一台设备多个地址。
4 并行存储器的编址技术
( 高位交叉编址,主要目的是用来扩大存储器容量。
( 低位交叉编址,主要目的是提高存储器速度。
2.2.2 寻址方式
( 定义:寻找操作数及数据存放单元的方法称为寻址方式。
( 主要内容:设计思想和设计方法
1、寻址方式的设计思想
( 立即数寻址方式,用于数据比较短、源操作数
( 面向寄存器的寻址方式
OPC R
OPC R, R
OPC R, R, R
OPC R, M
( 面向主存储器的寻址方式:
OPC M
OPC M, M
OPC M, M, M
( 面向堆栈的寻址方式:
OPC
OPC M
2、间接寻址方式与变址寻址方式的比较
( 目标相同:都是为了解决操作数地址的修改问题都能做到不改变程序而修改操作数地址。
原则上,仅需设置间址寻址方式与变址寻址方式中的任何一种即可。
( 如何选取间址寻址方式与变址寻址方式?
例2.7:一个由N个元素组成的数组,已经存放在起始地址为AS的主存连续单元中,现要把它搬到起始地址为AD的主存连续单元中。不必考虑可能出现的存储单元的重叠问题。为了编程简单,采用一般的两地址指令编写程序。
解:用间接寻址方式编写程序如下:
START,MOVE ASR,ASI ;保存源数组的起始地址
MOVE ADR,ADI ;保存目标数组的起始地址
MOVE NUM,CNT ;保存数据的个数
LOOP,MOVE @ASI,@ADI ;用间址寻址方式传送数据
INC ASI ;源数组的地址增量
INC ADI ;目标数组的地址增量
DEC CNT ;个数减1
BGT LOOP ;测试N个数据是否传送完
HALT ;停机
ASR,AS ;源数组的起始地址
ADR,AD ;目标数组的起始地址
NUM,N ;需要传送的数据个数
ASI,0 ;当前正在传送的源数组地址
ADI,0 ;当前正在传送的源数组地址
CNT,0 ;剩余数据的个数
用变址寻址方式编写程序如下:
START,MOVE AS,X ;把源数组的起始地址送入变址寄存器
MOVE NUM,CNT ;保存数据个数,为了程序具有再入性
LOOP,MOVE (X),AD-AS(X);AD-AS为地址偏移量,在汇编时计算
INC X ;增量变址寄存器
DEC CNT ;个数减1
BGT LOOP ;测试N个数据是否传送完成
HALT ;停机
NUM,N ;需要传送的数据个数
CNT,0 ;剩余数据的个数
( 主要优缺点比较:
采用变址寻址方式编写的程序简单、易读。
对于程序员,两种寻址方式的主要差别是:
间址寻址方式:间接地址在主存储器中,没有偏移量
变址寻址方式:基地址在变址寄存器中,带有偏移量实现的难易程度:间址寻址方式容易指令的执行速度:间址寻址方式慢对数组运算的支持:变址寻址方式比较好
( 自动变址:在访问间接地址过程中,地址自动增减
( 变址与间址混合时,有前变址与后变址两种方式前变址寻址方式:EA=((X)+A)
后变址寻址方式:EA=(X)+(A)
3、寄存器寻址
( 主要优点:
指令字长短指令执行速度快支持向量、矩阵运算
( 主要缺点:
不利于优化编译现场切换困难硬件复杂
4、堆站寻址方式
( 主要优点:
支持高级语言,有利与编译程序节省存储空间支持程序的嵌套和递归调用,支持中断处理
( 主要缺点:
运算速度比较低
栈顶部分设计成一个高速的寄存器堆
2.2.3 定位方式
( 内容:程序的主存物理地址在什么时间确定?采用什么方式来实现?
( 程序需要定位的主要原因:
程序的独立性程序的模块化设计数据结构在程序运行过程中,其大小往往是变化的有些程序本身很大,大于分配给它的主存物理空间
( 直接定位方式:在程序装入主存储器之前,程序中的指令和数据的主存物理就已经确定了的称为直接定位方式。
( 静态定位:在程序装入主存储器的过程中随即进行地址变换,确定指令和数据的主存物理地址的称为静态定位方式。
( 动态定位:在程序执行过程中,当访问到相应的指令或数据时才进行地址变换,确定指令和数据的主存物理地址的称为动态定位方式。
2.3 指令格式的优化设计
( 主要目标:
节省程序的存储空间,
指令格式尽量规整
( 研究内容:
操作码优化表示地址码优化表示
2.3.1 指令的组成
2.3.2 操作码的优化设计
2.3.3 地址码的优化设计
2.3.4指令格式设计举例
2.3.1 指令的组成
( 一般的指令主要由两部分组成:
操作码(OPC)
地址码(A)
( 操作码通常包括两部分内容:
操作种类:加、减、乘、除、数据传送、移位、转移、输入输出操作数描述
数据的类型:定点数、浮点数、复数、字符、字符串、逻辑数、向量
进位制:2进制、10进制、16进制
数据字长:字、半字、双字、字节
( 地址码通常包括三部分内容:
地址:还包括间接地址、立即数、寄存器编、变址寄存器地址的附加信息:偏移量、块长度、跳距寻址方式:直接寻址、间接寻址、立即数寻址、变址寻址、相对寻址、
寄存器寻址
2.3.2 操作码的优化表示
( 操作码的三种编码方法:固定长度,Huffman编码、扩展编码
( 改进操作码编码方式节省程序存储空间(Burroughs公司的B-1700机)
操作码编码方式
整个操作系统所用指令的操作码总位数
改进的百分比
8位定长编码
301,248
0
4-6-10扩展编码
184,966
39%
Huffman编码
172,346
43%
1、固定长操作码
( 主要优点:规整,译码简单
( 主要缺点:浪费信息量(操作码的总长位数增加)
2、Huffman编码法
1992年由Huffman首先提出的一种编码方法,
( 操作码的最短平均长度可以通过如下公式计算:
其中:Pi表示第i种操作码在程序中出现的概率
( 固定长操作码相对于Huffman操作码的信息冗余量为:
例2.7:假设一台模型计算机共有7种不同的操作码,如果采用固定长操作码需要3位。已知各种操作码在程序中出现的概率如下表,计算采用Huffman编码法的操作码平均长度,并计算固定长操作码和Huffman操作码的信息冗余量。
指令序号
I1
I2
I3
I4
I5
I6
I7
出现的概率
0.45
0.30
0.15
0.05
0.03
0.01
0.01
解:利用Huffman树进行操作码编码的方法,又称为最小概率合并法。
1、把所有指令按照操作码在程序中出现的概率,自左向右从排列好。
2、选取两个概率最小的结点合并成一个概率值是二者之和的新结点,并把这个新结点插入到其它还没有合并的结点中间形成一个新结点集合。
3、在新的结点集合中选取两个概率最小的结点进行合并,如此继续进行下去,直至全部结点都合并完毕。
4、最后得到一个根结点,根结点的概率值为1。
5、每个结点都有两个分支,分别用一位代码“0”和“1”表示。
6、从根结点开始,沿尖头所指方向,到达属于该指令的概率结点,把沿线所经过的代码组合起来得到这条指令的操作码编码。
形成的操作码编码并不是唯一的,但操作码的平均长度是唯一的。
模型机的操作码Huffman编码法指令序号
出现的概率
Huffman编码法
操作码长度
I1
0.45
0
1位
I2
0.30
1 0
2位
I3
0.15
1 1 0
3位
I4
0.05
1 1 1 0
4位
I5
0.03
1 1 1 1 0
5位
I6
0.01
1 1 1 1 1 0
6位
I7
0.01
1 1 1 1 1 1 1
6位
采用Huffman编码法所得到的操作码的平均长度为:
=0.45×1+0.30×2+0.15×3+0.05×4
+0.03×5+0.01×6+0.01×6=1.97(位)
采用最优Huffman编码法,操作码的平均长度为:
=0.45×1.152+0.30×1.737+0.15×2.737
+0.05×4.322+0.03×5.059+0.01×6.644+0.01×6.644
=1.95
采用3位固定长操作码的信息冗余量为:
Huffman编码法的信息冗余量仅为:
与采用3位固定长操作码的信息冗余量35%相比要小得多。
3、扩展编码法
( Huffman操作码的主要缺点:
操作码长度很不规整,硬件译码困难
与地址码共同组成固定长的指令比较困难
(?扩展编码法:由固定长操作码与Huffman编码法相结合形成
7条指令的操作码扩展编码法指令序号
出现的概率
1-2-3-5扩展编码
2-4等长扩展编码
I1
0.45
0
0 0
I2
0.30
1 0
0 1
I3
0.15
1 1 0
1 0
I4
0.05
1 1 1 0 0
1 1 0 0
I5
0.03
1 1 1 0 1
1 1 0 1
I6
0.01
1 1 1 1 0
1 1 1 0
I7
0.01
1 1 1 1 1
1 1 1 1
平均长度
2.0
2.2
信息冗余量
2.5%
11.4%
例如:例改为1-2-3-5扩展编码法,其操作码平均长度为:
H=0.45×1+0.30×2+0.15×3+(0.05+0.03+0.01+0.01)×5
=2.00
信息冗余量为:
又例如:例改为2-4等长扩展编码法,其操作码平均长度为:
H=(0.45+0.30+0.15)×2+(0.05+0.03+0.01+0.01)×4
=2.20
信息冗余量为:
(?操作码等长扩展编码法操作码编码
说 明
操作码编码
说 明
0000
0001
……
1110
4位长度的操作码共15种
0000
0001
……
0111
4位长度的操作码共8种
1111 0000
1111 0001
……
1111 1110
8位长度的操作码共15种
1000 0000
1000 0001
……
1111 0111
8位长度的操作码共64种
1111 1111 0000
1111 1111 0001
……
1111 1111 1110
12位长度的操作码共16种
1000 1000 0000
1000 1000 0001
……
1111 1111 0111
12位长度的操作码共512种
等长15/15/15……扩展法 等长8/64/512……扩展法不等长操作码扩展编码法(4-6-10扩展编码法)
编码方法
各种不同长度操作码的指令
指令种类
4位操作码
6位操作码
10位操作码
15/3/16
15
3
16
34
8/31/16
8
31
16
55
8/30/32
8
30
32
70
8/16/256
8
16
256
280
4/32/256
4
32
256
292
2.3.3 地址码的优化表示
1、地址码个数的选择
( 地址码个数通常有三个、两个、一个及0个等四种情况
( 评价地址码个数应该取多少的标准主要有两个:
一是程序的存储容量,包括操作码和地址码
二是程序的执行速度,以程序执行过程中访问主存的信息量代表
( 通过一个典型例子来分析:
例如:计算算术表达式,
用三地址指令编写的程序如下:
MUL X,A,B ;X单元暂时用来存放中间运算结果
ADD X,X,C
SUB X,X,D ;X单元中存放的是分子运算的结果
ADD Y,E,F ;计算分母
DIV X,X,Y ;最后运算结果在X单元中用普通二地址指令编写的程序如下:
MOVE X,A ;复制一个临时变量到X单元中
MUL X,B
ADD X,C
SUB X,D ;X单元中存放的是分子运算的结果
MOVE Y,E ;复制一个临时变量到Y单元中
ADD Y,F ;Y单元中存放的是分母运算的结果
DIV X,Y ;最后运算结果在X单元中采用通用寄存器结构的二地址指令编写的程序如下:
MOVE R1,A ;把操作数a取到R1通用寄存器中
MUL R1,B
ADD R1,C
SUB R1,D ;通用寄存器R1中存放分子运算结果
MOVE R2,E
ADD R2,F ;通用寄存器R2中存放分母运算结果
DIV R1,R2 ;最后运算结果在通用寄存器R1中
MOVE X,R1 ;把最后运算结果存入X单元中用一地址指令编写的程序如下:
LOAD E ;先计算分母,取一个操作数到累加器中
ADD F ;分母运算结果在累加器中
STORE X ;保存分母运算结果,腾出累加器
LOAD A ;取分子的一个操作数到累加器中
MUL B
ADD C
SUB D ;累加器中是分子运算结果
DIV X ;最后运算结果在累加器中
STORE X ;保存最后运算结果到X单元中首先转换成逆波兰表达式:ab*c+d-ef+/,程序如下:
PUSH A ;操作数a压入堆栈
PUSH B ;操作数a压入堆栈
MUL ;栈顶的两个操作数做乘法,结果压回堆顶
PUSH C
ADD
PUSH D
SUB ;栈顶是分子运算的结果
PUSH E
PUSH F
ADD
DIV ;栈顶是最后运算的结果
POP X ;保存最后运算结果
5个用不同地址数编写的程序的有关参数:
地址数目
指令条数
访存次数
程序存储量
执行速度(访存信息量)
三地址
5
20
5P+15A=65B
5P+15A+15D=185B
二地址
7
26
7P+14A=63B
7P+14A+19D=215B
一地址
9
18
9P+ 9A=45B
9P+ 9A + 9D=117B
零地址
12
41
12P+7A=40B
12P+7A+29D=272B
二地址R型
8
15
8P+7A+9R=40B
8P+7A+9R+7D=96B
注:P表示操作码长度,A表示地址码长度,D表示数据长度,R表示通用
寄存器的地址码长度,B表示字节数。并取:D=2A=8P=16R=8B
各种不同地址数指令的特点及适用场合地址数目
指令长度
程序存储量
程序执行速度
适用场合
三地址
短
最大
一般
向量,矩阵运算为主
二地址
一般
很大
很低
一般不宜采用
一地址
较长
较大
较快
连续运算,硬件结构简单
零地址
最长
最小
最低
嵌套,递归,变量较多
二地址R型
一般
最小
最快
多累加器,数据传送较多
地址码个数结论:
对于一般处理机,采用通用寄存器结构二地址指令是最理想的,其程序存储器容量最省,指令执行速度最快。
2、如果强调硬件结构简单,并且以连续运算(如求累加和等)为主,宜采用一地址结构。
3、对于以向量,矩阵运算为主的计算机系统,最好采用三地址结构。
4、对于解决以递归问题为主的计算机系统,宜采用零地址结构。
2、缩短地址码长度的方法目的:用一个短的地址码表示一个大的逻辑地址空间
( 用间址寻址方式缩短地址码长度在主存储器的低端开辟一个专门存放地址区域,
( 用变址寻址方式缩短地址码长度由于程序的局部性,变址寻址方式中的地址偏移量比较短,
( 用寄存器间接寻址方式缩短地址码长度,很有效的方法例如,16个间址寄存器,用4位地址码就能表示一个任意长的逻辑地址用来支持间接寻址的寄存器,可以借用通用寄存器
2.3.4 指令格式设计举例指令的长度:有固定长度和可变长度两种,
操作码长度:有固定长度和可变长度两种,
例如:IBM370系列机,
操作码长度固定:8位
指令长度有16位、32位和48位等多种
地址个数以两地址为主
16个通用寄存器,可兼做变址寄存器和基址寄存器使用
8
4
4
RR型
OPC
R1
R2
8
4
4
4
12
RX型
OPC
R1
X2
B2
D2
8
4
4
4
12
RS型
OPC
Rn
Rm
B
D
8
8
4
12
SI型
OPC
I2
B1
D1
8
8
4
12
4
12
SS型
OPC
L
B1
D1
B2
D2
( 目前在多数计算机中数据存储单元(寄存器、主存储器、外存储器等)只存放纯数据通过指令中的操作码来解释:
数据的类型(定点数、浮点数、复数、字符、字符串、逻辑数、向量等)
进位制(2进制、10进制、16进制等)
数据字长(字、半字、双字、字节等)
寻址方式(直接寻址、间接寻址、相对寻址、寄存器寻址等)
数据的功能(地址、数值、控制字、标志等)等同一种操作指令通常需要很多条
( 在高级语言和其它许多应用软件中数据的属性必须由数据自己定义,
( 在高级语言与机器语言之间的语义差距,要靠编译器等填补
( 60年代开始,Burroughs公司在大型计算机中引入自定义数据表示方式
和带标志符的数据表示方式
1、带标志符的数据表示法
( Burroughs公司的标志符数据表示方法
在B5000大型机中,每个数据有一位标志符在B6500和B7500大型机中,每个数据有三位来标志符在R-2巨型机中采用10位标志符
标志符
数 值
带有标志符的数据表示方式
2位 2位 1位 4位 1位功能
陷井
封写
类型
校验
数 值
10位标志符在R-2巨型机中带标志符的数据表示方式
( R-2巨型机中的标志符功能位:操作数、指令、地址、控制字陷井位:由软件定义四种捕捉方式封写位:指定数据是只读的还是可读可写类型位:对于操作数:二进制、十进制、定点数、浮点数、复数、
字符串、单精度、双精度等
对于地址:绝对地址、相对地址、变址地址、未连接的地址等
( 标志符由编译器或其它系统软件建立,对程序员透明
( 程序(包括指令和数据)的总存储量分析
数据存储量增加,指令存储量减少例2.6:假设X处理机的数据不带标志符,其指令字长和数据字长均为32位。Y处理机的数据带有标志符,每个数据的字长增加至35位,其中有3位是标志符,其指令字长由32位减少至30位。并假设一条指令平均访问两个操作数,每个操作数平均被访问R次。现有一个程序,它的指令条数为I,分别计算在这两种不同类型的处理机中程序所占用的存储空间。
解:X处理机程序占用的存储空间总和为:,
Y处理机程序占用的存储空间总和为:,
Y处理机与X处理机的程序占用存储空间的比值:
当R>3时,有,在实际应用中经常是R>10,
即带标志符的处理机所占用的存储空间通常要小。
采用标志符的数据长度
带标志符和不带标志符两种情况下程序所占存储空间比较采用标志符数据表示方法的主要优点:
1、简化了指令系统。
2、由硬件自动实现一致性检查和数据类型的转换。
例如:在IBM 370系列机中执行A=A+B运算,若A、B都是十进制数,只需要一条指令,共6个字节,在IBM 370/145机上的执行时间是13微秒,若A与B中有一个是定点二进制数,由于要进行数据类型的一致性检查和转换,在PL/I语言中的编译结果为13条指令,共64个字节,在IBM 370/145机上的执行时间是408微秒,两者相比,存储空间节省5倍,运算速度快30多倍。
3、简化程序设计,缩小了人与机器之间的语义差距。
4、简化编译器,使高级语言与机器语言之间的语义差距大大缩短。
5、支持数据库系统,一个软件不加修改就可适用于多种数据类型。
6、方便软件调试,在每个数据中都有陷井位。
采用标志符数据表示方法的主要缺点:
1、数据和指令的长度可能不一致。
2、指令的执行速度降低(程序的设计时间、编译时间和调试时间缩短)
3、硬件复杂度增加。
2、数据描述符表示法
( 数据描述符与标志符的区别:
标志符只作用于一个数据,而数据描述符要作用于一组数据。
( Burroughs公司生产的B-6700机中采用的数据描述符表示方法。
最高三位为101时表示数据描述符,
最高三位为000时表示数据。
101
标志位
长 度
地 址
数据描述符
000
数 值
数据
例如:用数据描述符表示方法表示一个3×4矩阵A。
用数据描述符表示方法表示一个3×4矩阵
……
101
标志位
3
101
标志位
4
101
标志位
4
101
标志位
4
000
a11
000
a12
000
a13
000
a14
……
000
a21
000
a22
000
a23
000
a24
……
000
a31
000
a32
000
a33
000
a34
……
2.2 寻址技术
( 寻址技术研究的主要内容:编址方式、寻址方式和定位方式
( 寻址技术研究的主要对象:寄存器、主存储器、堆栈和输入输出设备
( 方法:分析各种寻址技术的优缺点,如何选择和确定寻址技术
2.2.1 编址方式
2.2.2 寻址方式
2.2.3 定位方式
2.2.1 编址方式
( 定义:编址方式是指对各种存储设备进行编码的方法。
( 主要内容:编址单位、零地址空间个数、并行存储器的编址技术、输入输出设备的编址技术
1、编址单位
( 常用的编址单位:字编址、字节编址、位编址、块编址等
( 编址单位与访问字长一般:字节编址,字访问部分机器:位编址,字访问辅助存储器:块编址,位访问
( 字节编址字访问的优缺点有利于信息处理地址信息浪费存储器空间浪费读写逻辑稍复杂
0字节位置引起的问题
2、零地址空间个数需要编址的设备主要有通用寄存器、主存储器和输入输出设备。
( 三个零地址空间:通用寄存器、主存储器和输入输出设备均独立编址
( 两个零地址空间:主存储器与输入输出设备统一编址
( 一个零地址空间:所有存储设备统一编址
最低端是通用寄存器,最高端是输入输出设备,中间为主存储器
( 隐含编址方式,实际上没有零地址空间堆栈、Cache等
3、输入输出设备的编址
( 一台设备一个地址
( 一台设备两个地址:数据寄存器、状态或控制寄存器多个需要编址的寄存器共用同一个地址的方法:
依靠地址内部来区分,适用于被编址的接口寄存器的长度比较短
,下跟法”隐含编址方式,必须按顺序读写寄存器。
( 一台设备多个地址。
4 并行存储器的编址技术
( 高位交叉编址,主要目的是用来扩大存储器容量。
( 低位交叉编址,主要目的是提高存储器速度。
2.2.2 寻址方式
( 定义:寻找操作数及数据存放单元的方法称为寻址方式。
( 主要内容:设计思想和设计方法
1、寻址方式的设计思想
( 立即数寻址方式,用于数据比较短、源操作数
( 面向寄存器的寻址方式
OPC R
OPC R, R
OPC R, R, R
OPC R, M
( 面向主存储器的寻址方式:
OPC M
OPC M, M
OPC M, M, M
( 面向堆栈的寻址方式:
OPC
OPC M
2、间接寻址方式与变址寻址方式的比较
( 目标相同:都是为了解决操作数地址的修改问题都能做到不改变程序而修改操作数地址。
原则上,仅需设置间址寻址方式与变址寻址方式中的任何一种即可。
( 如何选取间址寻址方式与变址寻址方式?
例2.7:一个由N个元素组成的数组,已经存放在起始地址为AS的主存连续单元中,现要把它搬到起始地址为AD的主存连续单元中。不必考虑可能出现的存储单元的重叠问题。为了编程简单,采用一般的两地址指令编写程序。
解:用间接寻址方式编写程序如下:
START,MOVE ASR,ASI ;保存源数组的起始地址
MOVE ADR,ADI ;保存目标数组的起始地址
MOVE NUM,CNT ;保存数据的个数
LOOP,MOVE @ASI,@ADI ;用间址寻址方式传送数据
INC ASI ;源数组的地址增量
INC ADI ;目标数组的地址增量
DEC CNT ;个数减1
BGT LOOP ;测试N个数据是否传送完
HALT ;停机
ASR,AS ;源数组的起始地址
ADR,AD ;目标数组的起始地址
NUM,N ;需要传送的数据个数
ASI,0 ;当前正在传送的源数组地址
ADI,0 ;当前正在传送的源数组地址
CNT,0 ;剩余数据的个数
用变址寻址方式编写程序如下:
START,MOVE AS,X ;把源数组的起始地址送入变址寄存器
MOVE NUM,CNT ;保存数据个数,为了程序具有再入性
LOOP,MOVE (X),AD-AS(X);AD-AS为地址偏移量,在汇编时计算
INC X ;增量变址寄存器
DEC CNT ;个数减1
BGT LOOP ;测试N个数据是否传送完成
HALT ;停机
NUM,N ;需要传送的数据个数
CNT,0 ;剩余数据的个数
( 主要优缺点比较:
采用变址寻址方式编写的程序简单、易读。
对于程序员,两种寻址方式的主要差别是:
间址寻址方式:间接地址在主存储器中,没有偏移量
变址寻址方式:基地址在变址寄存器中,带有偏移量实现的难易程度:间址寻址方式容易指令的执行速度:间址寻址方式慢对数组运算的支持:变址寻址方式比较好
( 自动变址:在访问间接地址过程中,地址自动增减
( 变址与间址混合时,有前变址与后变址两种方式前变址寻址方式:EA=((X)+A)
后变址寻址方式:EA=(X)+(A)
3、寄存器寻址
( 主要优点:
指令字长短指令执行速度快支持向量、矩阵运算
( 主要缺点:
不利于优化编译现场切换困难硬件复杂
4、堆站寻址方式
( 主要优点:
支持高级语言,有利与编译程序节省存储空间支持程序的嵌套和递归调用,支持中断处理
( 主要缺点:
运算速度比较低
栈顶部分设计成一个高速的寄存器堆
2.2.3 定位方式
( 内容:程序的主存物理地址在什么时间确定?采用什么方式来实现?
( 程序需要定位的主要原因:
程序的独立性程序的模块化设计数据结构在程序运行过程中,其大小往往是变化的有些程序本身很大,大于分配给它的主存物理空间
( 直接定位方式:在程序装入主存储器之前,程序中的指令和数据的主存物理就已经确定了的称为直接定位方式。
( 静态定位:在程序装入主存储器的过程中随即进行地址变换,确定指令和数据的主存物理地址的称为静态定位方式。
( 动态定位:在程序执行过程中,当访问到相应的指令或数据时才进行地址变换,确定指令和数据的主存物理地址的称为动态定位方式。
2.3 指令格式的优化设计
( 主要目标:
节省程序的存储空间,
指令格式尽量规整
( 研究内容:
操作码优化表示地址码优化表示
2.3.1 指令的组成
2.3.2 操作码的优化设计
2.3.3 地址码的优化设计
2.3.4指令格式设计举例
2.3.1 指令的组成
( 一般的指令主要由两部分组成:
操作码(OPC)
地址码(A)
( 操作码通常包括两部分内容:
操作种类:加、减、乘、除、数据传送、移位、转移、输入输出操作数描述
数据的类型:定点数、浮点数、复数、字符、字符串、逻辑数、向量
进位制:2进制、10进制、16进制
数据字长:字、半字、双字、字节
( 地址码通常包括三部分内容:
地址:还包括间接地址、立即数、寄存器编、变址寄存器地址的附加信息:偏移量、块长度、跳距寻址方式:直接寻址、间接寻址、立即数寻址、变址寻址、相对寻址、
寄存器寻址
2.3.2 操作码的优化表示
( 操作码的三种编码方法:固定长度,Huffman编码、扩展编码
( 改进操作码编码方式节省程序存储空间(Burroughs公司的B-1700机)
操作码编码方式
整个操作系统所用指令的操作码总位数
改进的百分比
8位定长编码
301,248
0
4-6-10扩展编码
184,966
39%
Huffman编码
172,346
43%
1、固定长操作码
( 主要优点:规整,译码简单
( 主要缺点:浪费信息量(操作码的总长位数增加)
2、Huffman编码法
1992年由Huffman首先提出的一种编码方法,
( 操作码的最短平均长度可以通过如下公式计算:
其中:Pi表示第i种操作码在程序中出现的概率
( 固定长操作码相对于Huffman操作码的信息冗余量为:
例2.7:假设一台模型计算机共有7种不同的操作码,如果采用固定长操作码需要3位。已知各种操作码在程序中出现的概率如下表,计算采用Huffman编码法的操作码平均长度,并计算固定长操作码和Huffman操作码的信息冗余量。
指令序号
I1
I2
I3
I4
I5
I6
I7
出现的概率
0.45
0.30
0.15
0.05
0.03
0.01
0.01
解:利用Huffman树进行操作码编码的方法,又称为最小概率合并法。
1、把所有指令按照操作码在程序中出现的概率,自左向右从排列好。
2、选取两个概率最小的结点合并成一个概率值是二者之和的新结点,并把这个新结点插入到其它还没有合并的结点中间形成一个新结点集合。
3、在新的结点集合中选取两个概率最小的结点进行合并,如此继续进行下去,直至全部结点都合并完毕。
4、最后得到一个根结点,根结点的概率值为1。
5、每个结点都有两个分支,分别用一位代码“0”和“1”表示。
6、从根结点开始,沿尖头所指方向,到达属于该指令的概率结点,把沿线所经过的代码组合起来得到这条指令的操作码编码。
形成的操作码编码并不是唯一的,但操作码的平均长度是唯一的。
模型机的操作码Huffman编码法指令序号
出现的概率
Huffman编码法
操作码长度
I1
0.45
0
1位
I2
0.30
1 0
2位
I3
0.15
1 1 0
3位
I4
0.05
1 1 1 0
4位
I5
0.03
1 1 1 1 0
5位
I6
0.01
1 1 1 1 1 0
6位
I7
0.01
1 1 1 1 1 1 1
6位
采用Huffman编码法所得到的操作码的平均长度为:
=0.45×1+0.30×2+0.15×3+0.05×4
+0.03×5+0.01×6+0.01×6=1.97(位)
采用最优Huffman编码法,操作码的平均长度为:
=0.45×1.152+0.30×1.737+0.15×2.737
+0.05×4.322+0.03×5.059+0.01×6.644+0.01×6.644
=1.95
采用3位固定长操作码的信息冗余量为:
Huffman编码法的信息冗余量仅为:
与采用3位固定长操作码的信息冗余量35%相比要小得多。
3、扩展编码法
( Huffman操作码的主要缺点:
操作码长度很不规整,硬件译码困难
与地址码共同组成固定长的指令比较困难
(?扩展编码法:由固定长操作码与Huffman编码法相结合形成
7条指令的操作码扩展编码法指令序号
出现的概率
1-2-3-5扩展编码
2-4等长扩展编码
I1
0.45
0
0 0
I2
0.30
1 0
0 1
I3
0.15
1 1 0
1 0
I4
0.05
1 1 1 0 0
1 1 0 0
I5
0.03
1 1 1 0 1
1 1 0 1
I6
0.01
1 1 1 1 0
1 1 1 0
I7
0.01
1 1 1 1 1
1 1 1 1
平均长度
2.0
2.2
信息冗余量
2.5%
11.4%
例如:例改为1-2-3-5扩展编码法,其操作码平均长度为:
H=0.45×1+0.30×2+0.15×3+(0.05+0.03+0.01+0.01)×5
=2.00
信息冗余量为:
又例如:例改为2-4等长扩展编码法,其操作码平均长度为:
H=(0.45+0.30+0.15)×2+(0.05+0.03+0.01+0.01)×4
=2.20
信息冗余量为:
(?操作码等长扩展编码法操作码编码
说 明
操作码编码
说 明
0000
0001
……
1110
4位长度的操作码共15种
0000
0001
……
0111
4位长度的操作码共8种
1111 0000
1111 0001
……
1111 1110
8位长度的操作码共15种
1000 0000
1000 0001
……
1111 0111
8位长度的操作码共64种
1111 1111 0000
1111 1111 0001
……
1111 1111 1110
12位长度的操作码共16种
1000 1000 0000
1000 1000 0001
……
1111 1111 0111
12位长度的操作码共512种
等长15/15/15……扩展法 等长8/64/512……扩展法不等长操作码扩展编码法(4-6-10扩展编码法)
编码方法
各种不同长度操作码的指令
指令种类
4位操作码
6位操作码
10位操作码
15/3/16
15
3
16
34
8/31/16
8
31
16
55
8/30/32
8
30
32
70
8/16/256
8
16
256
280
4/32/256
4
32
256
292
2.3.3 地址码的优化表示
1、地址码个数的选择
( 地址码个数通常有三个、两个、一个及0个等四种情况
( 评价地址码个数应该取多少的标准主要有两个:
一是程序的存储容量,包括操作码和地址码
二是程序的执行速度,以程序执行过程中访问主存的信息量代表
( 通过一个典型例子来分析:
例如:计算算术表达式,
用三地址指令编写的程序如下:
MUL X,A,B ;X单元暂时用来存放中间运算结果
ADD X,X,C
SUB X,X,D ;X单元中存放的是分子运算的结果
ADD Y,E,F ;计算分母
DIV X,X,Y ;最后运算结果在X单元中用普通二地址指令编写的程序如下:
MOVE X,A ;复制一个临时变量到X单元中
MUL X,B
ADD X,C
SUB X,D ;X单元中存放的是分子运算的结果
MOVE Y,E ;复制一个临时变量到Y单元中
ADD Y,F ;Y单元中存放的是分母运算的结果
DIV X,Y ;最后运算结果在X单元中采用通用寄存器结构的二地址指令编写的程序如下:
MOVE R1,A ;把操作数a取到R1通用寄存器中
MUL R1,B
ADD R1,C
SUB R1,D ;通用寄存器R1中存放分子运算结果
MOVE R2,E
ADD R2,F ;通用寄存器R2中存放分母运算结果
DIV R1,R2 ;最后运算结果在通用寄存器R1中
MOVE X,R1 ;把最后运算结果存入X单元中用一地址指令编写的程序如下:
LOAD E ;先计算分母,取一个操作数到累加器中
ADD F ;分母运算结果在累加器中
STORE X ;保存分母运算结果,腾出累加器
LOAD A ;取分子的一个操作数到累加器中
MUL B
ADD C
SUB D ;累加器中是分子运算结果
DIV X ;最后运算结果在累加器中
STORE X ;保存最后运算结果到X单元中首先转换成逆波兰表达式:ab*c+d-ef+/,程序如下:
PUSH A ;操作数a压入堆栈
PUSH B ;操作数a压入堆栈
MUL ;栈顶的两个操作数做乘法,结果压回堆顶
PUSH C
ADD
PUSH D
SUB ;栈顶是分子运算的结果
PUSH E
PUSH F
ADD
DIV ;栈顶是最后运算的结果
POP X ;保存最后运算结果
5个用不同地址数编写的程序的有关参数:
地址数目
指令条数
访存次数
程序存储量
执行速度(访存信息量)
三地址
5
20
5P+15A=65B
5P+15A+15D=185B
二地址
7
26
7P+14A=63B
7P+14A+19D=215B
一地址
9
18
9P+ 9A=45B
9P+ 9A + 9D=117B
零地址
12
41
12P+7A=40B
12P+7A+29D=272B
二地址R型
8
15
8P+7A+9R=40B
8P+7A+9R+7D=96B
注:P表示操作码长度,A表示地址码长度,D表示数据长度,R表示通用
寄存器的地址码长度,B表示字节数。并取:D=2A=8P=16R=8B
各种不同地址数指令的特点及适用场合地址数目
指令长度
程序存储量
程序执行速度
适用场合
三地址
短
最大
一般
向量,矩阵运算为主
二地址
一般
很大
很低
一般不宜采用
一地址
较长
较大
较快
连续运算,硬件结构简单
零地址
最长
最小
最低
嵌套,递归,变量较多
二地址R型
一般
最小
最快
多累加器,数据传送较多
地址码个数结论:
对于一般处理机,采用通用寄存器结构二地址指令是最理想的,其程序存储器容量最省,指令执行速度最快。
2、如果强调硬件结构简单,并且以连续运算(如求累加和等)为主,宜采用一地址结构。
3、对于以向量,矩阵运算为主的计算机系统,最好采用三地址结构。
4、对于解决以递归问题为主的计算机系统,宜采用零地址结构。
2、缩短地址码长度的方法目的:用一个短的地址码表示一个大的逻辑地址空间
( 用间址寻址方式缩短地址码长度在主存储器的低端开辟一个专门存放地址区域,
( 用变址寻址方式缩短地址码长度由于程序的局部性,变址寻址方式中的地址偏移量比较短,
( 用寄存器间接寻址方式缩短地址码长度,很有效的方法例如,16个间址寄存器,用4位地址码就能表示一个任意长的逻辑地址用来支持间接寻址的寄存器,可以借用通用寄存器
2.3.4 指令格式设计举例指令的长度:有固定长度和可变长度两种,
操作码长度:有固定长度和可变长度两种,
例如:IBM370系列机,
操作码长度固定:8位
指令长度有16位、32位和48位等多种
地址个数以两地址为主
16个通用寄存器,可兼做变址寄存器和基址寄存器使用
8
4
4
RR型
OPC
R1
R2
8
4
4
4
12
RX型
OPC
R1
X2
B2
D2
8
4
4
4
12
RS型
OPC
Rn
Rm
B
D
8
8
4
12
SI型
OPC
I2
B1
D1
8
8
4
12
4
12
SS型
OPC
L
B1
D1
B2
D2