计算机系统 = 硬件 + 软件
- 对计算机的某一具体功能既可以用硬件实现,也可以用软件实现
- 硬件和软件在逻辑功能上是等效的
- 实现成本和速度有较大差别
运算器、存储器、控制器、输入设备、输出设备
- 运算器:实现对数据的加工,包括算术运算和逻辑运算
- 存储器:存储数据和程序
- 控制器:控制计算机各部件有序协调的工作
- 输入/输出设备:实现外部世界与计算机之间的数据交换
三个部件:CPU、存储器、I/O设备
- CPU:运算器 + 控制器
- 主机系统:CPU + 内存
- 存储器:内存 + 外存
- I/O设备:输入输出设备及其相关的接口
存储程序原理:在计算机解题之前,要事先编制好程序,并与所需要的数据一起预先存入主存当中。当程序开始执行后,由控制器按照该程序自动地、连续地从存储器中取出指令并执行,直到获得所要求的结果为止。
- 运算部件:
- 运算器(ALU) + 通用寄存器组(GPR)
运算器用于完成算术和逻辑运算
- 内存:
- 内存一般用半导体技术实现,外存往往用磁盘记录方式实现
- 访存操作:读、写
读:把AR中地址所对应的存储单元的内容读入DR
写:把DR中中的数据写入AR中地址所对应的存储单元- 地址寄存器(AR):存放访存地址
- 数据寄存器(DR):存放从内存读出或写入内存的数据
- 控制器:由6个部分组成
- 指令寄存器(IR):存放当前正在执行的指令
- 程序计数器(PC):存刚当前正在执行的指令的地址
- 指令译码器:对指令进行译码,区分当前指令是什么指令,一遍形成相应的控制信号
- 时钟脉冲(CP):协调计算机各部件操作的同步的主时钟。其工作频率叫做计算机的主频
- 时序信号发生器:按时间顺序周而复始地发出节拍信号
- 微操作控制部件:(微操作是硬件电路中不可再细分的简单操作)根据指令的译码结果,结合CP以及时序信号发生器产生的节拍信号,产生该指令执行过程中各节拍所的微操作控制信号,并将它们发送给包括控制器本身在内的各个部件,使之协调、分步骤地进行操作,实现指令的执行。
系统软件:保证计算机系统高效、正确地运行的基础软件
- 操作系统:管理系统资源,为用用程序提供运行环境,为用户提供操作界面
- 语言处理程序:将用源程序变换为机器语言程序,处理方式有两种:
解释:逐行处理,边分析边执行
翻译:用汇编程序或编译程序将源程序全部翻译成目标程序后,再去执行目标程序
- 主频
- CPU的工作节拍是由时钟来控制的,时钟不断产生固定频率的时钟脉冲,这个时钟的频率就是CPU的主频
- 主要用于评价相同或近似系统结构的计算机的性能,不用在结构差距很大的机器之间
- 运算速度
- 基本字长
- 直接参与运算的数据字的二进制位数
决定寄存器、ALU、数据总线等的位数,直接影响硬件的造价
- 主存容量
- 主存存取周期
- 对主存连续两次访问所允许的最小时间间隔
- 所配置的外部设备及其性能指标
- 原码:
- 正数最高位为0
- 负数最高位为1
2.补码:
- 正数补码=原码
- 负数补码:取反+1 (符号位不变)
注意小数的符号位位置
- 反码:
- 正数反码=原码
- 负数反码:每位取反 (符号位不变)
- 与补码仅符号位不同
- 采用移码的目的是为了能从机器数的形式上直接判断两数真值的大小
- 定点表示:小数点固定
- 阶码用移码,尾数用补码
- 8421(BCD)码
- 余三码:BCD码 + 0011
- 是一种对9的自补码:自身按位取反就得到其对9的补码
十进制数字5的余3码为1000,5对9之补是9-5=4,而4的余3码是0111,它正好是5的余3码1000按位取反而得。- 两个余3码相加,所产生的进位相应于十进制数的进位,但所产生的和要进行修正后才是正确的余3码。如果没有进位,则和需要减3;如果发生了进位,则和需加3。
- 2421码
- Load指令:装载寄存器指令
- 把一个数据送入指定的寄存器,这个值可以是立即数,也可以是来自存储器的某单元
- Store指令:存储指令
- 把指定寄存器中的数据存入存储器的某个单元
- Add指令:加法指令
- Jump 指令:跳转指令
用[R0]+200作为地址访问存储器,将读出的内容送至R1
把指令中的立即数4传送至R2
把R1和R2中的内容相加,结果存入R3
把R3中的内容存入地址为[R2]+200的存储单元
@表示间接寻址
[R2]→MEM[MEM [208]]:把寄存器R2中的内容存入主存中地址为MEM[208]的单元中
让计算机跳转到地址为1000的地方
操作码 + 地址码
- 只有操作码,没有地址码
- 使用零地址的情况:
指令本身不需要任何操作数(空操作、停机)
指令中所需的操作数是隐含指定的(堆栈操作)
- 使用情况:
指令本身只需要一个操作数(加一、求补、清零),A←OP[A]
指令需要两个操作数,指令中指明一个操作数,而另一个操作数在默认的累加器AC中,操作结果存放到累加器AC中:AC←[AC]OP[A]
- 根据存放操作数的不同分为三种:
寄存器-寄存器型(R-R型)指令
存储器-存储器型(M-M型)指令
寄存器-存储器型(R-M型)指令:结果保留在寄存器中
- 固定长度操作码:
- 每条指令的长度都相同
- 利于简化硬件设计;减少指令译码时间
- 可变长度操作码:
- 不同指令的长度随指令功能而不同
- 使用频率高的指令用段的操作码
- 缩短操作码的长度,但会使硬件设计复杂化,增加指令译码的时间和难度
- 扩展操作码技术:
简化硬件设计
当指令总长度一定时,可以使操作码的长度随地址数的增加而减少,不同地址数的指令的操作码的长度也不同,从而有效地缩短指令总长度
包括等长扩展与不等长扩展
地址长度为n,上层留出m种状态,下一层可扩展出m×2n种状态
eg.二地址指令条数最大值 = (2三地址指令操作码位数 - 三地址指令条数) × 2二地址操作码位数-三地址操作码位数
机器字长:计算机能直接处理的二进制数据的位数
表示操作数的方法:
- 由指令中的操作码指定操作数的类型
- 给数据加上标识符(tag),有数据本身给出操作数类型
计算机中,操作数可能存放在主存储器、CPU中的寄存器、I/O接口寄存器或堆栈中
形式地址与有效地址
寻址方式:确定指令操作数有效地址的方法
- 直接寻址
- 在指令的地址码字段直接给出操作数所在主存单元的地址 EA = A
- 简单、快速的寻址方式,但寻址范围受限于地址码字段的位数
- 间接寻址
- 指令的地址码字段给出的是操作数所在内存单元的地址的地址,即指令中形式地址所指定的内存单元中存放的内容才是操作数的真正地址 EA = (A)
- 得到操作数需要访问两次内存,指令的执行速度比较慢
- 立即寻址
- 指令的地址码字段直接给出操作数本身
- 寄存器直接寻址与间接寻址
- 寄存器直接寻址:指令的地址码字段给出一个寄存器编号,该寄存器中存放的内容就是操作数 EA = Ri
- 寄存器间接寻址:寄存器中存放的内容是操作数的地址,根据此地址访问内存取得操作数 EA = (Ri)
- 隐含寻址
- 指令中不给出操作数的地址
- 通常操作数约定在某个特定的寄存器中或者在堆栈中
- 相对寻址
- 有效地址 = 形式地址(偏移量) + PC的内容 EA = (PC) + D(D是补码表示!!!)
- 注意取址后PC自动+‘1’
- 变址寻址
- 有效地址 = 形式地址 + 变址寄存器的内容 EA = (RX) + D
- 形式地址固定,变的是变址寄存器的内容
- 变址寄存器可以是专用寄存器,也可以是通用寄存器中的一个
- 常用于字符串处理、数组运算等成批数据处理中,主要是面向用户,解决程序循环控制问题
8.基址寻址
- 有效地址 = 详细地址 + 基址寄存器的内容 EA = (RB) + D
- 基地址固定,变的是形式地址
- 基址寄存器的内容称为基地址,常由操作系统或管理程序设定
- 面向系统,解决程序重定位和扩大寻址空间等问题
- “基址+变址”寻址
- 有效地址 = 形式地址 + 基址寄存器RB的内容 + 变址寄存器RX的内容 EA = (RB)+(RX)+D
- 数据传输类指令
- 将数据从一个地方传送到另一个地方
- 主要实现主存和主存之间、主存和寄存器之间、寄存器和寄存器之间的数据传送
- 数据传送指令一次可以传送一个数据,也可以一次传送一批数据
- 数据运算类指令
- 用来实现数据的算术运算、逻辑运算和移位运算
- 算术运算:加、减、乘、除运算;加1 、减1;比较指令等
- 逻辑运算:包括与、或、非 、异或等运算
- 移位指令:算术移位、逻辑移位和循环移位三类,它们又可分为左移和右移两种
- 程序控制类指令
- 主要用来控制程序执行的顺序和方向
- 包含转移指令、子程序调用和返回指令、自陷指令等
- 输入输出指令
- 主要用于实现主机与外部设备之间的信息交换
复杂指令系统计算机CISC:
- 强化指令功能,实现软件功能向硬件功能转移
- 特点:指令数量多,功能多样
- 缺点:各指令使用频率相差悬殊,许多指令很少用得到;指令系统庞大,指令条数多,许多指令的功能很复杂;CPI值大,执行速度慢;规整性不好,不利于采用流水线技术提高性能
精简指令功能计算机RISC:
- 尽可能降低指令系统的复杂性,以达到简化实现,提高性能的目的
- 设计原则:
指令条数少、指令功能简单;
采用简单而又统一的指令格式,并减少寻址方式;
指令的执行在单个机器周期内完成;采用load-store结构;
大多数指令采用硬连逻辑来实现;
强调优化编译器的作用,为高级语言程序生成优化的代码;
充分利用流水技术来提高性能
MIPS的寄存器:
- 32个64位的通用寄存器,R0的值永远是0
- 32个64位浮点数寄存器
- 其他特殊寄存器,如浮点状态寄存器
MIPS的数据表示
- 整数:字节、半字、字、双字
- 浮点数:单精度、双精度
字节、半字或者字在装入64位寄存器时,用零扩展或者用符号位扩展来填充该寄存器的剩余部分。装入以后,对它们将按照64位整数的方式进行运算
MIPS的数据寻址方式
- 立即数寻址和偏移量寻址
- 两种寻址方式都是16位
- 寄存器间接寻址是通过把0作为偏移量来实现的
- 16位直接寻址是通过把R0(其值永远为0)作为基址寄存器来完成的
- MIPS的寻址方式是编码到操作码OP中的
- MIPS的存储器是按字节寻址的,地址为64位
- 所有存储器访问都必须是边界对齐的
MIPS的指令格式
- 所有指令都是32位,操作码占6位
- 共有三种格式:I类指令、R类指令、J类指令,三种指令格式中,同名字段的位置固定不变
- I类指令
- R类指令
- J类指令
- 包括跳转指令,跳转并链接指令,自陷指令,异常返回指令
- 在这类指令中,指令字的低26位是偏移量,它与PC值相加形成跳转的地址
MIPS的操作
模型机是MIPS结构的一种简单实现,实现了MIPS指令系统的核心子集
包含指令:
- 算术运算指令:R类
add、sub、and、or、slt,其操作码字段 OP=0- 存储器访问指令:I类
lw(load word,op=35)、sw(store word,Op=43)- 等于"0"分支:I类
beqz,OP=63
- R类指令格式:
OP——操作码字段
rs——第一源操作数字段
rt——第二源操作数字段
rd——目标操作数字段(或结果字段)
shamt——无用
funct——ALU指令的运算函数码字段
- I类指令格式:
rs——基址寄存器字段,对于beqz指令来说,是存放被检测的数据
adr——偏移量字段,rs和adr用于计算访存有效地址或分支目标地址
rt——对于load指令来说,rt所指出的寄存器是存放所取的数据;对于store指令来说,是存放要写入存储器的数据
- load指令的数据通路
- store指令的数据通路
- beqz指令
ALUOp的定义:
- load指令和store指令:
ALUOp=00,让ALU做加法,计算访存的有效地址- beqz指令:
ALUOp=00,让ALU做加法,计算分支目标地址- R类指令
ALUOp=10,ALU完成and、or、add、sub中的某一个,具体取决于指令中funct字段的值
单周期的缺点
- 效率低
- 单周期时间只能去最长的数据通路所花的时间
- 每个时钟周期中功能部件最多被使用一次
按周期分步:
- 取指令周期(IF)
- 指令译码/读存储器周期(ID)
- 执行/有效地址计算周期(EX)
- 存储器访问/R类指令和分支指令完成周期(MEM)
- 写回周期(WB)
控制器的组成:
- 指令部件包括:
- 程序计数器PC
- 指令寄存器IR
- 指令译码器ID
- 地址形成部件
- 时序控制部件
- 微操作控制信号形成部件
- 中断控制逻辑
- 程序状态寄存器PSR
控制方式:
- 同步控制方式:机器有统一的时钟信号(称为系统时钟),所有的微操作控制信号都与时钟信号同步
- 异步控制方式:各部件之间没有统一的时钟和节拍,而是各部件有自己的时钟
时序系统: 计算机的三级时序系统:指令周期、节拍、脉冲
- 指令周期:从取指令、分析指令到执行完该指令所需的全部时间,一般由若干时钟周期构成
- 节拍:节拍的宽度(时间)一般语系统的时钟周期数相同
- 脉冲
- 微命令:构成控制信号序列的最小单位
- 微操作:执行部件接受微命令后进行的最基本的、不可再细分的操作,分为相容的微操作和互斥的微操作
- 微指令:用来产生微控制信号的二进制编码字
- 微程序:一系列微指令构成的有序集合,每条机器指令都对应于一段微程序
- 微指令周期:微程序控制器的工作周期
- 控制存储器CM
- 存放实现整个指令系统的所有微程序
- 每个单元存放一条微指令字
- 微指令寄存器μIR
- 用来存放从控存读出的当前微指令
- 微地址形成电路
- 根据控制地址字段中的信息产生后续微地址
- 微地址寄存器μMAR
- 接受微地址形成电路送来的地址,为读取下一条微指令做好准备
- 地址译码器
- 将μMAR中的微地址进行译码,找到被访问的控存单元,将其中的微指令读出并存放于μIR中
微程序控制器的工作过程
- 启动取指微程序,把要执行的机器指令(其地址由PC给出)从主存取到指令寄存器IR中,并完成对PC的增量操作
- 根据IR中指令的操作码,微地址形成电路产生该指令的微程序的入口地址,并送入μMAR
- μMAR中的微地址经过译码,从控存中读取相应的微指令,送入μIR
- μIR中微指令的操作控制字段直接(或经过译码)产生一组微命令,送往相应的功能部件,控制它们完成所规定的微操作
- 微地址形成电路根据μIR中微指令的地址控制字段和机器的状态信息(如程序状态字PSW),产生下一条微指令的地址并送往μMAR
- 重复上述步骤第三到第五步,直到该机器指令的微程序全部执行完毕
- 直接控制编码法
- 微操作控制字段的每一位直接对应一个微操作:当某位为1时,就表示执行相应的微操作;为0时就不执行该微操作
- 优点:结构简单,并行性最好,操作速度快
- 缺点:微指令字太长
- 最短字长编码法
- 将所有的微命令进行统一的二进制编码,每条指令只定义一个微操作
- 微操作控制字段的长度L与微命令的总数N的关系:L ≥ log2N
- 需要对整个微操作控制字段进行编码
- 字段直接编码法
- 把微操作控制字段进一步划分为若干个字段,每个字段单独编码,每个码点表示一个微命令
- 字段之间采用直接控制,字段内部采用最短字长编码
- 既能缩短微指令字长,又能实现较高的并行性,执行速度比较快。
- 设计原则: 把互斥的微操作分在同一字段,把相容的微操作分到不同的字段;字段的划分应与数据通路相适应;一般每个字段应留出一个码点,用于表示不发任何微命令
- 字段间接编码法(了解)
- 字段的编码的含义(即表示什么微命令)要由另外一个字段的编码来解释确定
微程序入口地址的形成:
- 公用的“取指令”微程序一般存放在控存中第0号单元或其它指定的控存单元开始的一片控存区域中。(这个地址是固定不变的)
- 根据IR中的操作码,找到该指令所对用的微程序的入口地址
两种实现方法:
- 直接对应法
- 直接把操作码与微地址码的部分位对应
- 适用于所有指令的操作码的位数和位置都相同时
- 查表法:
- 在操作码的位数或位置不固定的情况下,需要用专门的硬件实现操作码到入口地址的映象
- 用PLA或ROM实现一个表格,该表格给出了各操作码所对应的微程序的入口地址
- 使用该表时,只要用操作码作为输入,就能在其输出端得到该指令的微程序入口地址
后继微地址的形成:
- 增量方式
- 顺序执行时,给μPC增加一个增量(通常为1)给出下一条微指令的地址
- 转移控制字段BCF用于固定是顺序实行还是转移,如果是转移,就有BCF指出转移地址的来源
- 转移地址字段BAF
- 转移地址的来源:由BAF给出的地址;机器指令所对应的微程序的入口地址;微子程序入口地址和返回地址(存放在返回地址寄存器中)
- 优点:SCF字段比较短,后继微地址生成逻辑比较简
单,编制微程序也比较容易- 缺点:不能直接实现多路转移
- 断定方式
- 由微程序设计者直接指定
- 由微程序设计者指定的测试判别逻辑字段控制产生
- 后继地址由两部分组成:
非测试地址:微程序设计者直接指定的,是不变的,构成微地址的高位部分
测试地址:在微程序的执行过程中,通过测试一些状态位而动态决定的,它构成微地址的低位部分- 测试地址的位数决定了并行分支的路数,而且也决定了测试控制字段的个数
- 优点:能够实现快速多路转移,提高微程序的执行速度。而且微程序在控存中的存放位置也很灵活、方便。
- 缺点:后继微地址的生成方法比较复杂,微程序的执行顺序不直观
- 逻辑移位
- 被移位的数据是逻辑数(无符号,无大小)
- 逻辑左移shl:按位左移,最高位丢弃,最低位补0
- 逻辑右移shr:按位右移,最低位丢弃,最高位补0
- 循环移位
- 循环移位中将被移位数据的左右两端连接起来,形成闭合的移位环路
- 算术移位
- 原码算术移位:符号位不参加移位,只将数值位依次移动,补0
- 补码算术移位:
算术左移:连同符号位整体左移,最高位(符号位)丢弃,最低位补0
算术右移:连同符号位整体右移,符号位保持不变,最低位丢弃
硬件实现:
- as为0时,[F]补 = [X]补+[Y]补
- as为1时,[F]补 = [X]补 - [Y]补
溢出的判断
- 分为正溢出(正数)与负溢出(负数)
三种方法:
- 采用两个操作数和结果的符号来判断
原码一位乘法
- 判0操作
- 判断两个操作数中是否有为0的,若有则不需要进行运算,直接就能设置运算结果(为0)
- 对阶
- 使小数点对齐
- 使两个操作数的阶码相等
求阶差△E=XE-YE
若△E>0,则表示X的阶码大于Y的阶码,需调整操作数Y:将Y的尾数YM右移;每右移一位,其阶码YE加1,直到两数的阶码相等为止
若△E<0,则表示X的阶码小于Y的阶码,需调整操作数X。调整的方法与上面的一样
- 尾数加/减
- 按定点加减运算
- 结果规格化并判溢出
- 若得到的运算结果的绝对值大于1,则需要右规
将该结果右移一位,相应的阶码加1- 若得到的运算结果的绝对值小于1,则需要左规
将该结果左移,每左移一位,相应的阶码减1,直到运算结果的绝对值大于等于1/2为止- 在规格化时,阶码每次加1或减1以后,都要判断阶码是否超出所能表示的范围
- 舍入处理
- 0设1入法
- 截断法
- 朝+∞舍入法
- 朝-∞舍入法
三级存储系统
- Cache:高速缓冲存储器——速度最快,容量最小
- 主存储器
- 磁盘存储器(辅存)——速度最慢,容量最大
两个存储层次
- “Cache——主存”层次:解决主存速度不足的问题
- 对系统程序员和应用程序员都透明
2… “主存——辅存”层次:解决主存容量不足的问题- 对系统程序员不透明
- 位扩展法
- 字扩展法