计算机组成原理期末复习期末速成

计算机的组成:
①五个功能部件:运算器、存储器、控制器、输入输出设备
②两种信息流:控制、数据信息流

控制信息流包括指令信息、状态信息、时序信息,这些信息的组合产生各类控制信号,对数据进行加工处理,并控制数据信息的流向,实现计算机的各项功能。
冯·诺伊曼体系结构计算机的特点:
1)硬件由五大部分组成
2)软件以二进制表示
3)采用存储程序
Ⅰ:所有的程序预先存放再存储器中
Ⅱ:指令采用串行执行方式
(指令一条接一条执行 而不能同时执行两条)
3、计算机系统的层次结构

4、区分机器语言、汇编语言、高级语言:
机器语言:一种用二进制代码表示的计算机语言,机器可以直接执行用机器语言编写的程序。
汇编语言:一种用助记符表示的与机器语言一一对应的语言,用汇编语言编写的程序要经过汇编后才能执行。
高级语言:一种接近人类自然语言的与计算机结构无关的语言,用高级语言编写的程序要经过解释和编译才能执行。(c,c++,java等)
5、编译程序、解释程序和汇编程序
编译程序:编译程序是先完整编译后运行的程序,编译程序把高级语言源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后让计算机去执行这个目标程序,得到计算结果。如C、C++等;
解释程序:一句一句翻译且边翻译边执行的程序,是高级语言翻译程序的一种,它将源语言书写的源程序作为输入,解释一句就提交给计算机执行一句,并不形成目标程序。如Python、JavaScript
编译程序和解释程序最大区别在于︰前者生成目标代码,而后者不生成
汇编程序:汇编程序是用汇编语言编写的程序,与编译程序、解释程序完全不是一个概念。
例题1:

CPI——条指令所需的时钟周期数
运行时间=指令数*CPI/主频。
M1的时间=指令数*2/1.5,
M2的时间=指令数*1/ 1.2,两者之比为(2/1.5) : (1/ 1.2)=1.6。
2.1定点数的表示与运算
1.定点数的表示
一.无符号数和有符号数的表示
在计算机中参与运算的机器数有两大类:无符号数和有符号数。
1)无符号数 全部二进制位均为数值位,没有符号位,相当于数的绝对值。
若机器字长为8位,则数的表示范围为0~2^8-1,即0~255。
2)有符号数.在机器中,数的“正“负”号是无法识别的,有符号数用“0”表示“正”号,用“1”表示“负”号,二进制数的最高位为符号位.

机器数的定点表示:
1)定点小数:
定点小数是纯小数,约定小数点位置在符号位之后、有效数值部分最高位之前

2)定点整数
定点整数是纯整数,约定小数点位置在有效数值部分最低位之后。



原码表示:最高符号,其余表示数的绝对值
移码:移码(又叫增码或偏置码)通常用于表示浮点数的阶码,其表示形式与补码相似,只是其符号位用“1”表示正数,用“0”表示负数,数值部分与补码相同。
溢出判断:
(1)采用一位符号位
参加操作的两个数符号相同,结果又与原操作数符号不同,则表示结果溢出.
(2)采用双符号位
①Ss1Ss2=00:表示结果为正数,无溢出。②Ss1Ss2=01:表示结果为正数,溢出。
③Ss1Ss2=10:表示结果为负数,溢出。
④Ss1Ss2=11:表示结果为负数,无溢出。

浮点数(类似科学计数法
一.浮点数的表示格式
E和M都是有符号的定点数,E称为阶码,M称为尾数。可见浮点数由阶码和尾数两部分组成,如图所示:

阶符仅表示次方的正负 数符才表示该数的正负号
二.规格化浮点数
为了提高运算的精度,需要充分地利用尾数的有效数位,通常采取浮点数规格化形式,即规定尾数的最高数位必须是一个有效值。
左规:当浮点数运算的结果为非规格化时,要进行规格化处理,将尾数算术左移一位、阶码减1(基数为2时)的方法称为左规,左规可能要进行多次。
右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数算术右移一位、阶码加1(基数为2时)的方法称为右规。需要右规时,只需进行一次。
1)原码规格化后.
正数为0.1xx……x的形式,负数为1.1xx···x的形式.
2)补码规格化后.
正数为0.1xx……x的形式,尾数的表示范围为1/ 2<M≤ (12^(-n)) 、
负数为1.0xx……x的形式,其最大值表示为1.01…1,最小值表示为1.000.



数值的表示范围:
(1)若定点数和浮点数字长相同,则浮点表示法所能表示的数值范围将远远大于定点表示法。
(2)精度
精度是指一个数所含有效数值位的位数。对于字长相同的定点数和浮点数来说,浮点数虽然扩大了数的表示范围,但精度降低了。
(3)数的运算
浮点数包括阶码和尾数两部分,运算时要做尾数的运算,也做阶码的运算,而且运算结果要求规格化,所以浮点运算比定点运算复杂。
(4)溢出问题
在定点运算中,当运算结果超出数的表示范围时,发生溢出; 在浮点运算中,运算结果超出尾数表示范围却不一定溢出,只有规格化后阶码超出所能表示的范围时,才发生溢出。
浮点数的加减运算:
浮点数运算的特点是阶码运算和尾数运算分开进行。浮点数的加减运算一律采用补码浮点数加减运算步骤
一.对阶
对阶的目的是使两个操作数的小数点位置对齐,即使得两个数的阶码相等。为此,先求阶差,然后以小阶向大阶看齐的原则,将阶码小的尾数右移一位(基数为2),阶加1,直到两个数的阶码相等为止。尾数右移时,舍弃掉有效位会产生误差。

二.尾数求和
将对阶后的尾数按定点数加(减)运算规则运算.
三.规格化
以双符号位为例,当尾数大于0时,其补码规格化形式为[S]补=00.1xx···x
当尾数小于0时,其补码规格化形式为[S]补=11.0xx··.·x
当尾数的最高数值位与符号位不同时,即为规格化形式。规格化分为左规与右规两种。
1)左规:当尾数出现00.0xx…x或11.1xx……x时,需左规,即尾数左移1位,和的阶
码减1,直到尾数为00.1xx…x或11.0xX…X。
2)右规:当尾数求和结果溢出(如尾数为10. xx…x或01. xx…x)时,需右规,
即尾数右移一位,和的阶码加1。
四.舍入
在对阶和右规的过程中,可能会将尾数低位丢失,引起误差。常见的舍入方法“0”舍“1"入法和恒置“1”法.
“0”舍“1”入法:类似于十进制数运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为o,则舍去;被移去的最高数值位为1时,则在尾数的末位加1。这样做可能会使尾数又溢出,此时需再做一次右规。
恒置“1”法:尾数右移时,不论丢掉的最高数值位是“1”还是“0”,
都使右移后的尾数末位恒置“1”。
这种方法同样有使尾数变大和变小的两种可能。
五.溢出判断
在浮点数规格化中已指出,当尾数之和(差)出现01. xx……x或10. xx…x时,并不表示溢出,只能将此数右规后,再根据阶码来判断浮点数运算结果是否溢出。

存储器的分类
—.按在计算机中的作用(层次)分类
1)主存储器。简称主存,又称内存储器(内存),用来存放计算机运行期间所需的大量程序和数据,CPU可以直接随机地对其进行访问,也可以和高速缓冲存储器(Cache)及辅助存储器交换数据。其特点是容量较小、存取速度较快、单位价格较高。
2)辅助存储器。简称辅存,又称外存储器(外存),是主存储器的后援存储器,用来存放当前暂时不用的程序和数据,以及一些需要永久性保存的信息,它不能与CPU直接交换信息。其特点是容量极大、存取速度较慢、单位成本低。
3)高速缓冲存储器。简称Cache,位于主存和CPU之间,用来存放正在执行的程序段和数据,以便CPU能高速地使用它们。Cache的存取速度可与CPU的速度相匹配,但存储容量小、价格高。目前的高档计算机通常将它们制作在CPU中。
二.按存储介质分类
按存储介质,存储器可分为磁表面存储器(磁盘、磁带)、磁心存储器半导体存储器(MOS型存储器、双极型存储器)和光存储器(光盘)。
三.按存取方式分类
1)随机存储器(RAM)。存储器的任何一个存储单元的内容都可以随机存取,而且存取时间与存储单元的物理位置无关。其优点是读写方便、使用灵活,主要用作主存或高速缓冲存储器。RAM又分为静态RAM也叫 (SRAM) ,Cache就是SRAM,动态RAM (也叫DRAM),内存条属于DRAM。
2)只读存储器(ROM)。存储器的内容只能随机读出而不能写入。信息一旦写入存储器就固定不变,即使断电,内容也不会丢失。硬盘就是ROM。
四.按信息的可保存性分类
断电后、存储信息即消失的存储器,称为易失性存储器,如RAM。
断电后、存储信息仍然保持的存储器,称为非易失性存储器,如ROM、磁表面存储器和光存储器。
存储器有3个主要性能指标,即存储容量、单位成本和存储速度。这3个指标相互制约,设计存储器系统所追求的目标就是大容量、低成本和高速度。
一、存储容量=存储字数x字长(如1Mx8位)。单位换算:1B (Byte,字节)=8b (bit,位)。存储字数表示存储器的地址空间大小,字长表示一次存取操作的数据量。
二、单位成本:每位价格=总成本/总容量。
三、存储速度:数据传输率=数据的宽度/存储周期。
⑴)存取时间(T)︰存取时间是指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间。
(2)存取周期(T)∶存取周期又称读写周期或访问周期。它是指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立访问存储器操作(读或写操作)之间所需的最小时间间隔。
(3)主存带宽(B)︰主存带宽又称数据传输率,表示每秒从主存进出信息的最大数量,单位为字/秒、字节/秒(B/ s)或位/秒(b / s) .
存取时间不等于存储周期,通常存储周期大于存取时间。这是因为对任何一种存储器,在读写操作之后,总要有一段恢复内部状态的复原时间。
对于破坏性读出的存储器,存取周期往往比存取时间大得多,因为存储器中的信息读出后需要马上进行再生。

1.多级存储系统
为了解决存储系统大容量、高速度和低成本3个相互制约的矛盾,在计算机系统中,通常采用多级存储器结构,如图所示。在图中由上至下,位价越来越低,速度越来越慢,容量越来越大,CPU访问的频度也越来越低.

主存储器由DRAM实现,靠处理器的那一层(Cache)则由SRAM实现,属于易失性存储器,只要断电,保存的信息便会丢失.
DRAM的每比特成本低于SRAM,速度也慢于SRAM,
价格差异主要是因为制造DRAM需要更多的硅.
ROM属于非易失性存储器。
1.SRAM 和DRAM
一.SRAM的工作原理
静态随机存储器(SRAM)的存储元是用双稳态触发器(六晶体管MOS)记忆信息,信息被读出后,保持其原状态而不需要再生(非破坏性读出);
SRAM的存取速度快,但集成度低,功耗较大,一般用来组成高速缓冲存储器.
二.DRAM的工作原理
动态随机存储器(DRAM)是利用存储元电路中栅极电容上的电荷来存储信息的,DRAM的基本存储元通常只使用一个晶体管,比SRAM的密度要高很多。
DRAM采用地址复用技术,地址线是原来的1/2,且地址信号分行、列两次传送。
相对于SRAM来说,DRAM具有容易集成、位价低、容量大和功耗低等优点,但DRAM的存取速度较慢,一般用来组成大容量主存系统。
DRAM电容上的电荷一般只能维持1~2ms,即使不断电,信息也会自动消失。为此,每隔一定时间必须刷新,通常取2ms,这个时间称为刷新周期。
常用的刷新方式有3种:集中刷新、分散刷新和异步刷新。
1)集中刷新:指在一个刷新周期内,利用一段固定的时间,依次对存储器的所有行进行逐一再生,在此期间停止对存储器的读写操作,称为“死时间”,又称访存“死区”。
集中刷新的优点是读写操作时不受刷新工作的影响,因此系统的存取速度较高;
缺点是在集中刷新期间(死区)不能访问存储器。
2)分散刷新:把对每行的刷新分散到各个工作周期中。
一个存储器的系统工作周期分为两部分:
前半部分用于正常读、写或保持;
后半部分用于刷新某一行。
会增加系统的存取周期,如存储芯片的存取周期为0.5μs,则系统的存取周期为1μs.
其优点是没有死区;缺点是加长了系统的存取周期,降低了整机的速度。
3)异步刷新:异步刷新是前两种方法的结合,既可缩短“死时间”",又能充分利用最大刷新间隔为2ms的特点。
具体做法︰将刷新周期除以行数,得到两次刷新操作之间的时间间隔t,利用逻辑电路每隔时间t产生一次刷新请求。可避免使CPU连续等待过长的时间,且减少了刷新次数,从根本上提高整机的工作效率
DRAM的刷新需注意以下问题:
①刷新对CPU是透明的,即刷新不依赖于外部的访问;
②动态RAM的刷新单位是行,因此刷新操作时仅需要行地址;
③刷新操作类似于读操作,但又有所不同。刷新操作仅给栅极电容补充电荷,不需要信息输出。刷新时不需要选片,即整个存储器中的所有芯片同时被刷新。
注意易失性存储器和刷新的区别:
易失性存储器是指断电后数据丢失,SRAM和DRAM都满足断电内容消失,但需要刷新的只有DRAM,而SRAM不需要刷新。

2.只读存储器
一.只读存储器(ROM)的特点
ROM和RAM都是支持随机存取的存储器,其中SRAM和DRAM均为易失性半导体存储器。
而ROM中一旦有了信息,就不能轻易改变,即使掉电也不会丢失,它在计算机系统中是只供读出的存储器。
ROM器件有两个显著的优点∶
1)结构简单,所以位密度比可读写存储器的高。2)具有非易失性,所以可靠性高。
二.ROM的类型
根据制造工艺的不同,ROM可分为
掩模式只读存储器(MROM) 、
一次可编程只读存储器(PROM) 、
可擦除可编程只读存储器(EPROM) 、
闪速存储器(Flash Memory)
和固态硬盘(SolidState Drives)。
1.连接原理
1)主存储器通过数据总线、地址总线和控制总线与CPU连接。
2)地址总线的位数决定了可寻址的最大内存空间。

2.主存容量的扩展
单个存储芯片的容量有限,在字数或字长方面与实际存储器的要求有差距,需在字和位两方面进行扩充才能满足要求。
通常采用位扩展法、字扩展法和字位同时扩展法来扩展主存容量.
一.位扩展法
CPU的数据线数与存储芯片的数据位数不一定相等,此时必须对存储芯片扩位(即进行位扩展,用多个存储器件对字长进行扩充,增加存储字长),
使其数据位数与CPU的数据线数相等.
二.字扩展法
字扩展是指增加存储器中字的数量,而位数不变。
字扩展将芯片的地址线、数据线、读写控制线相应并联.而由片选信号来区分各芯片的地址范围。
三.字位同时扩展法
存储器往往需要同时扩充字和位。
字位同时扩是指既增加存储字的数量,又增加存储字长。
例题:初始芯片:2k*1位 想让存储器变为16k*8位
需要多少块初始芯片 8*8=64

3.5储存器
1.程序访问的局部性原理
程序访问的局部性原理包括时间局部性和空间局部性。
时间局部性是指在最近的未来要用到的信息,很可能是现在正在使用的信息,因为程序中存在循环。
空间局部性是指在最近的未来要用到的信息,很可能与现在正在使用的信息在存储空间上是邻近的,因为指令通常是顺序存放、顺序执行的,数据一般也是以向量、数组等形式簇聚地存储在一起的.
高速缓冲技术就是利用程序访问的局部性原理,把程序中正在使用的部分存放在一个高速的、容量较小的Cache中,使CPU的访存操作大多数针对Cache进行,从而大大提高程序的执行速度。
例题:假定数组元素按行优先方式存储,对于下面的两个函数:
1)对于数组a的访问,哪个空间局部性更好?哪个时间局部性更好?
2)对于指令访问来说,for循环体的空间局部性和时间局部性如何?

虽然程序A和程序B的功能相同,但因内、外两重循环的顺序不同而导致两者对数组a访问的空间局部性相差较大,从而带来执行时间的不同。
程序A优先把同行元素相加,其时间空间局部性都更好
2.Cache的基本工作原理
Cache位于存储器层次结构的顶层,通常由SRAM构成.
为便于Cache和主存之间交换信息,Cache和主存都被划分为相等的块,(Cache块又称Cache行)每块由若干字节组成,块的长度称为块长(Cache行长)
由于Cache的容量远小于主存的容量,所以Cache中的块数要远少于主存中的块数,它仅保存主存中最活跃的若干块的副本.
因此Cache按照某种策略,预测CPU在未来一段时间内欲访存的数据,将其装入Cache.
发出读请求时,若访存地址在Cache中命中,就将此地址转换成Cache地址直接来的某块信息。
注意:CPU与Cache之间的数据交换以字为单位,
CPU与主存之间的数据交换以Cache块为单位。

2.Cache的基本工作原理
CPU欲访问的信息已在Cache中的比率称为Cache的命中率。设一个程序执行期间,Cache的总命中次数为Nc,访问主存的总次数为Nm,则命中率H为
H= Nc/(Nc+Nm)
可见为提高访问效率,命中率H越接近1越好,即Nc越高越好。设t为命中时的Cache访问时间,tm为未命中时的访问时间,1-H表示未命中率,则Cache-主存系统的平均访问时间Ta为
Ta= Ht+(1-H )tm
(访问的总时间:访问catch命中的时间来乘以catch的命中率+未命中的时间乘以catch的未命中率)
例题:假设Cache的速度是主存的5倍,且Cache的命中率为95 %,则采用Cache后,存储器性能提高多少?
(设Cache和主存同时被访问,若Cache命中则中断访问主存)

地址映射不同于地址变换。地址变换是指CPU在访存时,将主存地址按映射规则换算成Cache地址的过程。地址映射的方法有以下3种。
一.直接映射
直接映射的关系可定义为j=i mod 2^c
式中,j是Cache的块号(又称Cache行号),i是主存的块号,2是Cache中的总块数。在这种映射方式中,主存的第0块、第块、第块!……只能映射到Cache的第0行﹔而主存的第1块、第2块、第2+1块……只能映射到Cache的第1行,以此类推。

由函数看出,主存块号的低c位正好是它要装入的Cache行号。
给每个Cache行设置一个长为t=m-c的标记(tag) ,当主存某块调入Cache后,就将其块号的高t位设置在对应Cache行的标记中,如图(a)所示。
直接映射的地址结构为

CPU访存过程如图(b)所示。说明︰
1)首先根据访存址中间的c位,直接找到对应的Cache行,
(2)将对应Cache行中的标记和主存地址的高位标记进行比较,若相等且有效位为1,则访问Cache“命中”,
(3)此时根据主存地址中低位的块内地址,在对应的Cache行中存取信息;若不相等或有效位为0,则不命中,此时从CPU主存中读出该地址所在的一块信息送到对应的Cache行中,将有效位置1.并将标记设置为地址中的高t位,同时将该地址中的内容送入CPU

除去第b位块内地址后的行号第c位与其标记字段相比,相等命中,否则缺失,从主存读出将cache块调入

将Cache空间分成大小相同的组,
主存的一个数据块可以装入一组内的任何一个位置,即组间采取直接映射,而组内采取全相联映射,

例题:假设某个计算机的主存地址空间大小为256MB,按字节编址,其数据Cache有8个Cache行,行长为64B。
1)若不考虑用于Cache的一致维护性和替换算法控制位,并且采用直接映射方式,则该数据Cache的总容量为多少?
①:按字节编,将内存空间转化为字节2^nB,即为n位的地址空间
②行长*行数=?数据容量(未包含映射 并非直接总容量
③根据映射方式写出具体结构 本题直接映射
④行长64B,块内地址6位;块号即行数,8个即3位,剩下标记字段总地址空间位数=28-6-3=19;除去这些,隐藏的有效位1位
⑤计算前统一单位,注意:cache块内地址在数据位中表示出来,在算容量要注意舍去,只取标记位和有效位,即29
⑥总容量:数据容量+映射=64B*8+(1+19)Bit



Cache的总容量包括:存储容量、标记阵列容量(有效位、标记位)
假设某个计算机的主存地址空间大小为256MB,按字节编址,其数据Cache有8个Cache行,行长为64B。
2)若该Cache采用直接映射方式,则主存地址为3200(十进制)的主存块对应的Cache行号是多少?采用二路组相联映射时又是多少?
①直接映射 计算第几块:3200/64=50块
②行号计算 8行 c=3, i mod 2^c=50 mod 2^3=2,行号为2
①二路相连映射 两个cache行合并 内部采用全相连
外部直接映射 即数据行数/2 求出的是组数
②组号计算 i mod 2^c=50 mod 2^2=2
③行号计算:0号组0,1行 1号组2,3行 3号组4,5行 故cache行号对应4或5
假设某个计算机的主存地址空间大小为256MB,按字节编址,其数据Cache有8个Cache行,行长为64B。
3〉以直接映射方式为例,简述访存过程(设访存的地址为0123456H)
访存地址转化为28位2进制,根据直接映射

对应出标记 行号和块内地址
首先根据块号,查Cache (即001号Cache行)中对应的主存标记位。
若相同,再看Cache行中的装入有效位是否为1,若是,则表示有效,称此访问命中,按块内地址010110读出 Cache行所对应的单元并送入CPU中,完成访存。
若出现标记位不相等或有效位为0的情况,则不命中,访问主存将数据取出并送往CPU和Cache的对应块中,把主存的最高19位存入001行的Tag中,并将有效位置1。
4.Cache中主存块的替换算法
常用的替换算法有随机(RAND)算法、先进先出 (FIFO)算法、近期最少使用(LR)算法和最不经常使用(LFU)算法。其中最常考查的是LRU算法。
1)随机算法︰随机地确定替换的Cache块。它的实现比较简单,但未依据程序访问的局部性原理,因此可能命中率较低。
2)先进先出算法:选择最早调入的行进行替换。它比较容易实现,但也未依据程序访问的局部性原理,因为最早进入的主存块也可能是目前经常要用的。3)近期最少使用算法∶依据程序访问的局部性原理,选择近期内长久未访问过的Cache行作为替换的行,平均命中率要比FIFO的高,是堆栈类算法。
5.Cache 写策略
因为Cache中的内容是主存块副本,当对Cache中的内容进行更新时,就需选用写操作策略使Cache内容和主存内容保持一致。此时分两种情况。
1)全写法(写直通法、write-through)。当CPU对Cache写命中时,必须把数据同时写入Cache和主存。当某一块需要替换时,不必把这一块写回主存,用新调入的块直接覆盖即可。
2)写回法(write-back)。当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存。这种方法减少了访存次数,但存在不一致的隐患。采用这种策略时,每个Cache行必须设置一个标志位(脏位),以反映此块是否被CPU修改过。
二.对于Cache写不命中,也有两种理方法。
1)写分配法(write-allocate)。加载主存中的块到Cache中,然后更新这个Cache块。它试图利用程序的空间局部性,但缺点是每次不命中都需要从主存中读取一块。
2)非写分配法(not-write-allocate)法。只写入主存,不进行调块。
非写分配法通常与全写法合用,写分配法通常和写回法合用。
4.1指令格式
指令(又称机器指令)是指示计算机执行某种操作的命令,程序由一条条指令构成。
1.指令的基本格式
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。一条指令通常包括操作码字段和地址码字段(不止一个)两部分。
操作码指出指令中该指令应该执行什么性质的操作和具有何种功能。
地址码给出被操作的信息(指令或数据)的地址,包括参加运算的一个或多个操作数所在的地址、运算结果的保存地址、程序的转移地址、被调用的子程序的入口地址等。
指令的长度是指一条指令中所包含的二进制代码的位数。指令字长取决于操作码的长度、操作数地址码的长度和操作数地址的个数。
根据指令中操作数地址码的数目的不同,指令分:
一.零地址指令
零地址 OP
只给出操作码OP,没有显式地址。这种指令有两种可能:
1)不需要操作数的指令,如空操作指令、停机指令、关中断指令等。
2)零地址的运算类指令仅用在堆栈计算机中。通常参与运算的两个操作数隐含地从栈顶和次栈顶弹出,送到运算器进行运算,运算结果再隐含地压入堆栈。
1)只有目的操作数的单操作数指令,按A1地址读取操作数,进行OP操作后,结果存回原地址。
指令含义:OP (A1)→A1
如操作码含义是加1、减1、求反、求补等。
2)隐含约定目的地址的双操作数指令,按指令地址A1可读取源操作数,指令可隐含约定另一个操作数由ACC(累加器)提供,运算结果也将存放在ACC中。指令含义: (AcC)oP (A1)→ACC
用1地址指令指实现两操作数相加:
A由地址码字段显示 B由累加器ACC提供 结果放入ACC
若指令字长为32位,操作码占8位,1个地址码字段占24位(字长减操作码长),则指令操作数的直接寻址范围为2^24=16M。
二地址指令:

指令含义:(A1) OP (A2)→A1
对于常用的算术和逻辑运算指令,往往要求使用两个操作数,需分别给出目的操作数和源操作数的地址,其中目的操作数地址还用于保存本次的运算结果。
若指令字长为32位,操作码占8位,两个地址码字段各占12位((32-8)/2=12),则指令操作数的直接寻址范围为2^12=4K.
三地址指令:

指令含义: (A1) OP (A2)→A3
若指令字长为32位,操作码占8位,3个地址码字段各占8(32-8)/3位,则指令操作数的直接寻址范围为2^8=256
若地址字段均为主存地址,则完成一条三地址需要4次访问存储器(取指令1次,取两个操作数2次,存放结果1次).
四地址指令:

指令含义:(A1) OP (A2)→A3,A4=下一条将要执行指令的地址。
若指令字长为32位,操作码占8位,4个地址码字段各占6位,则指令操作数的直接寻址范围为2^6=64。
4.2指令的寻址方式
寻址方式是指寻找指令或操作数有效地址的方式,即确定本条指令的数据地址及下一条待执行指令的地址的方法。寻址方式分为指令寻址和数据寻址两大类。
指令中的地址码字段并不代表操作数的真实地址,这种地址称为形式地址(A) ;形式地址结合寻址方式,可以计算出操作数在存储器中的真实地址,这种地址称为有效地址(EA)。
注意:(A)表示地址为A的数值,
例如,EA= (A)意思是有效地址是地址A中的数值。
1.指令寻址和数据寻址
寻找下一条将要执行的指令地址称为指令寻址;寻找操作数的地址称为数据寻址
一.指令寻址
指令寻址方式有两种:一种是顺序寻址方式,另一种是跳跃寻址方式。
1)顺序寻址可通过程序计数器(PC)加1 (1个指令字长 不一定都是为1),自动形成下一条指令的地址。
2)跳跃寻址通过转移类指令实现。所谓跳跃,是指下条指令的地址码不由程序计数器给出,而由本条指令给出下条指令地址的计算方式。
2.常见的数据寻址方式—.隐含寻址
不明显地给出操作数的地址,而在指令中隐含操作数的地址。(例如栈堆
例如,单地址的指令格式就不明显地在地址字段中指出第二操作数的地址,而规定累加器(ACC)作为第二操作数地址,指令格式明显指出的仅是第一操作数的地址。
因此,累加器(ACC)对单地址指令格式来说是隐含寻址,如图所示。
隐含寻址的优点是有利于缩短指令字长;
缺点是需增加存储操作数或隐含地址的硬件,增加成本.

二.立即(数)寻址
此指令的地址字段指出的不是操作数的地址,而是操作数本身,又称立即数。数据采用补码形式存放。
图示为立即寻址示意图,图中#表示立即寻址特征,A就是操作数本身。
立即寻址的优点是指令在执行阶段不访问主存,指令执行时间最短;
缺点是A的位数限制了立即数的范围。
三.直接寻址
指令字中的形式地址A是操作数的真实地址EA,即EA=A,如图所示。

其优点是简单,指令在执行阶段仅访问一次主存,不需专门计算操作数的地址;
缺点是A的位数决定了该指令操作数的寻址范围,操作数的地址不易修改。
四.间接寻址
相对于直接寻址而言的,指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA= (A),如图所示。
间接寻址可以是一次间接寻址,也可是多次间接寻址。
间接寻址的优点是可扩大寻址范围(有效地址EA的位数大于形式地址A的位数),
便于编制程序(用间接寻址可方便地完成子程序返回)﹔
缺点是指令在执行阶段要多次访存(一次间接寻址需两次访存,多次间接寻址需根据存储字的最高位确定访存次数)。
访问速度过慢,这种寻址方式并不常用。一般问到扩大寻址范围时,通常指的是寄存器间接寻址。

五.寄存器寻址
寄存器寻址是指在指令字中直接给出操作数所在的寄存器编号,即EA=R;,其操作数在由R;所指的寄存器内,如图所示。

寄存器寻址的优点是指令在执行阶段不访问主存,只访问寄存器,因寄存器数量较少,对应地址码长度较小,使得指令字短且因不用访存,所以执行速度快,支持向量/矩阵运算;
缺点是寄存器价格昂贵,计算机中的寄存器个数有限。
六.寄存器间接寻址
指在寄存器R;中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(R;),如图所示。

特点:
与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)。
七.相对寻址
把程序计数器(PC)的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA= (PC) +A,
其中A是相对于当前指令地址的位移量,可正可负,补码表示,如图所示。

其优点是操作数的地址不是固定的,它陂PC值的变化而变化,且与指令
地址之间总是相差一个固定值,因此便于程序浮动。相对寻址广泛应用于转移指令。
注意:对于转移指令JMPA,当CPU从存储器中取出一字节时,会自动执行(PC)+1→PC。
若转移指令的地址为X,且占2B,在取出该指令后,PC的值会增2,即(PC)=x+2,这样在执行完该指令后,会自动跳转到X+2+A的地址继续执行。
八.基址寻址
指将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A而形成操作数的有效地址,
即EA= (BR)+A
其中基址寄存器既可采用专用寄存器,又可采用通用寄存器,如图所示。

基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定,主要用于解决程序逻辑空间与存储器物理空间的无关性。
在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。
采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定。
优点是可扩大寻址范围(基址寄存器的位数大于形式地址A的位数);
用户不必考虑自己的程序存于主存的哪个空间区域,因此有利于多道程序设计,并可用于编制浮动程序,但偏移量(形式地址A)的位数较短。
九.变址寻址
变址寻址是搭有效地址A等子指令字中的形式地址A与变址寄存器IX的内容之和,即EA=(IX)+A,其中IX为变址寄存器(专用),也可用通用寄存器作为变址寄存器。图示为采用专用寄存器IX的变址寻址示意图。
变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(作为偏移量),形式地址A不变(作为基地址)。
其优点是可扩大寻址范围(变址寄存器的位数大于形式地址A的位数);
在数组处理过程中,可设定A为数组的首地址,
不断改变变址寄存器IX的内容,
便可很容易形成数组中任一数据的地址,特别适合编制循环程序。
变址寻址与基址寻址的有效地址形成过程极为相似。本质上,两者区别较大。
基址寻址面向系统,主要用于为多道程序或数据分配存储空间,因此基址寄存器的内容通常由操作系统或管理程序确定,在程序的执行过程中其值不可变,而指令字中的A是可变的;
变址寻址立足于用户,主要用于处理数组问题,
在变址寻址中,变址寄存器的内容由用户设定,
在程序执行过程中其值可变,而指令字中的A是不可变的。
4.3CISC和RISC的基本概念
复杂指令系统计算机(CISC)
随着VLSI技术的发展,硬件成本不断下降,软件成本不断上升,促使人们在指令系统中增加更多、更复杂的指令,以适应不同的应用领域,这样就构成了复杂指令系统计算机 (CISC) 。
一.CISC的主要特点如下:
1)指令系统复杂庞大,指令数目一般为200条以上。2)指令的长度不固定,指令格式多,寻址方式多。3)可以访存的指令不受限制。(病毒程序也会访问,导致安全性存疑)
4)各种指令使用频度相差很大。
5)各种指令执行时间相差很大,大多数指令需多个时钟周期才能完成。
6)控制器大多数采用微程序控制。有些指令非常复杂,以至于无法采用硬连线控制。
7)难以用优化编译生成高效的目标代码程序。
⒉精简指令系统计算机(RISC)
精简指令系统计算机 (RISC)的中心思想是要求指令系统简化,尽量使用寄存器-寄存器操作指令,指令格式力求一致。
一.RISC的主要特点如下:
1)选取使用频率最高的一些简单指令,复杂指令的功能由简单指令的组合来实现。
2)指令长度固定,指令格式种类少,寻址方式种类少。
3)只有Load /Store(取数/存数)指令访存,其余指令的操作都在寄存器之间进行。(间接导致了4)
4)CPU中通用寄存器的数量相当多。
5)RISC一定采用指令流水线技术,大部分指令在一个时钟周期内完成。
6)以硬布线控制为主,不用或少用微程序控制。
7)特别重视编译优化工作,以减少程序执行时间。

例题:



1)直接寻址时,有效地址是指令中的地址码部分500,装入ACC的是800。
2)立即寻址时,指令的地址码部分是操作数而不是地址,所以将500装入ACC。
3)间接寻址时,操作数的有效地址存储在地址为500的单元中,由此得到有效地址为800,操作数是300。
4)相对寻址时,有效地址=(PC)+A=202+500=702,
(双子长隐藏指令执行完要+2)所以装入ACC的操作数是325。这是因为指令是双字长,在该指令的执行阶段,PC的内容已经加2,更新为下一条指令的地址202。
5)变址寻址时,有效地址EA=(XR)+A=100+500=600,所以装入ACC的操作数是900。
6)寄存器寻址时,R1的内容400装入ACC。
7)寄存器间接寻址时,有效地址是R1的内容400,装入ACC的操作数是700。

5.1 CPU的功能和基本结构
1.CPU的功能
中央处理器(CPU)由运算器和控制器组成。
其中,控制器的功能是负责协调并控制计算机各部件执行程序的指令序列包括取指令、分析指令和执行指令﹔运算器的功能是对数据进行加工。
CPU的具体功能包括:
1)指令控制.完成取指令、分析指令和执行指令的操作,即程序的顺序控制。
2) 操作控制.一条指令的功能往往由若干操作信号的组合来实现。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。
3) 时间控制.对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序
提供应有的控制信号。
4)数据加工.对数据进行算术和逻辑运算。
5)中断处理.对计算机运行过程中出现的异常情况和特殊请求进行处理。

一.运算器
运算器接收从控制器送来的命令并执行相应的动作,对数据进行加工和处理。运算器是计算机对数据进行加工处理的中心,它主要由算术逻辑单元(ALU)、暂存寄存器、累加寄存器(ACC)、通用寄存器组、程序状态字寄存器(PSW)、移位器、计数器(CT)等组成。
1) 算术逻辑单元.主要功能是进行算术/逻辑运算。
2) 暂存寄存器. 用于暂存从主存读来的数据,该数据不能存放在通用寄存器中,否则会破坏其原有内容。暂存寄存器对应用程序员是透明的。
3)累加寄存器. 它是一个通用寄存器,用于暂时存放ALU运算的结果信息,可以作为加法运算的—个输入端
4)通用寄存器组.如AX、BX、CX、DX、SP等,用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等。SP是堆栈指针,用于指示栈顶的地址。
5)程序状态字寄存器.保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志(OF)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW中的这些位参与并决定微操作的形成。
6)移位器.对操作数或运算结果进行移位运算。
7)计数器.控制乘除运算的操作步数。
二.控制器
控制器是整个系统的指挥中枢,在控制器的控制下,运算器、存储器和输入/输出设备等功能部件构成一个有机的整体,根据指令的要求指挥全机协调工作。控制器的基本功能是执行指令,每条指令的执行是由控制器发出的一组微操作实现的。控制器由程序计数器(PC)、指令寄存器(IR)、指令译码器、存储器地址寄存器(MAR)、存储器数据寄存器(MDR)、时序系统和微操作信号发生器等组成。
1)程序计数器.用于指出下一条指令在主存中的存放地址。CPU根据PC的内容去主存中取指令。因程序中指令(通常)是顺序执行的,所以PC有自增功能。
2)指令寄存器.用于保存当前正在执行的那条指令。
3)指令译码器 仅对操作码字段进行译码,向控制器提供特定的操作信号。
4)存储器地址寄存器.用于存放要访问的主存单元的地址。
5)存储器数据寄存器.用于存放向主存写入的信息或从主存读出的信息。
6)时序系统.用于产生各种时序信号,它们都由统一时钟(CLOCK)分频得到。
7)微操作信号发生器.根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。
控制器的工作原理是,根据指令操作码、指令的执行步骤(微命令序列)和条件信号来形成当前计算机各部件要用到的控制信号。
计算机整机各硬件系统在这些控制信号的控制下协同运行,产生预期的执行结果。注意:CPU内部寄存器可分两类:
1、用户可见的寄存器,可对这类寄存器编程,如通用寄存器组、程序状态字寄存器;
2、用户不可见的寄存器,对用户是透明的,不可对这类寄存器编程,如存储器地址寄存器、存储器数据寄存器、指令寄存器。
1.指令周期
CPU从主存中取出并执行一条指令的时间称为指令周期,不同指令的指令周期可能不同。
当CPU采用中断方式实现主机和I /O设备的信息交换时,CPU在每条指令执行结束前,都要发中断查询信号,若有中断请求,则CPU进入中断响应阶段,又称中断周期.一个完整的指令周期应包括取指、间址、执行和中断4个周期,如图所示.

4个工作周期都有CPU访存操作,只是访存的目的不同.
取指周期是为了取指令,
间址周期是为了取有效地址,
执行周期是为了取操作数,
中断周期是为了保程序断点.
为了区别不同的工作周期,在CPU内设置4个标志触发器FE、IND、EX和INT,它们分别对应取指、间址、执行和中断周期,并以“1”状态表示有效,
分别由1→FE、1一IND、1一>EX和1→INT这4个信号控制.
数据流是根据指令要求依次访问的数据序列.
在指令执行的不同阶段,要求依次访问的数据序列是不同的。而且对于不同的指令,它们的数据流往往也是不同的。
—.取指周期
取指周期的任务是根据PC中的内容从主存中取出指令代码并存放在IR中。取指周期的数据流如图所示。PC中存放的是指令的地址,根据此地址从内存单元中取出的是指令,并放在指令寄存器IR中,取指令的同时,PC加1(也有可能+2,取决于字长。

二.间址周期
间址周期的数据流向如下:
1)d(IRy或MDR)①MAR②地址总线③主存.
2)CU发出读指令④控制总线⑤主存.
3)主存⑥数据总线⑦MDR(存放有效地址) .
三.执行周期
执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果.不同指令的执行周期操作不同,因此没有统一的数据流向。
四.中断周期
中断周期的任务是处理中断请求.假设程序断点存入堆栈中,并用SP指示栈顶地址,而且进栈操作是先修改栈顶指针,后存入数据,数据流如图所示。

1.数据通路的基本结构
数据通路的基本结构主要有以下几种:
1) CPU内部单总线方式。
将所有寄存器的输入端和输出端都连接到一条公共通路上,这种结构简单,但数据传输存在较多的冲突现象,性能较低。
连接各部件的总线只有一条时,称为单总线结构;
CPU中有两条或更多的总线时,构成双/多总线结构.图示为CPU内部总线的数据通路和控制信号。
2) CPU内部三总线方式将所有寄存器的输入端和输出端都连接到多条公共通路上,相比之下单总线中一个时钟内只允许传一个数据,因而指令执行效率很低,因此采用多总线方式,同时在多个总线上传送不同的数据,提高效率。
3)专用数据通路方式。
根据指令执行过程中的数据和地址的流动方向安排连接线路,避免使用共享的总线,性能较高,但硬件量大。
图中,规定各部件用大写字母表示,
字母加"in”表示该部件的允许输入控制信号;
字母加“out”表示该部件的允许输出控制信号。
注意:内部总线是指同一部件,
如CPU内部连接各寄存器及运算部件之间的总线;
系统总线是指同一台计算机系统的各部件,
如CPU、内存、通道和各类I /o接口间互相连接的总线.
一.寄存器之间的数据传送
寄存器之间的数据传送可通过CPU内部总线完成。
在上图中,某寄存器AX的输出和输入分别由AXout和AXin控制。
以PC寄存器为例,把PC内容送至MAR,实现传送操作的流程及控制信号为PC→Bus PCout有效,PC内容送总线
Bus→MAR MARin有效,总线内容送MAR
二.主存与CPU之间的数据传送
主存与CPU之间的数据传送也要借助CPU内部总线完成。
现以CPU从主存读取指令为例说明数据在数据通路中的传送过程。实现传送操作的流程及控制信号为
PC→Bus→MAR PCout和MARin有效,现行指令
1一>R CU发读命令
MEM(MAR)→MDR MDRin有效
MDR→Bus→IR MDRout和IRin有效,现行指令→IR
(即取指操作
三.执行算术或逻辑运算
执行算术或逻辑操作时,由于ALU本身是没有内部存储功能的组合电路,因此如要执行加法运算,相加的两个数必须在ALU的两个输入端同时有效。
图中的暂存器Y即用于该目的。
先将一个操作数经CPU内部总线送入暂存器Y保存,
Y的内容在ALU的左输入端始终有效,
再将另一个操作数经总线直接送到ALU的右输入端。
这样两个操作数都送入了ALU,运算结果暂存在暂存器Z中。