重拾《计算机组成原理》
第一课 学习目标和方法
目标:能独立做出一个能运行程序的包含硬件和软件能力计算机
方法:
- 计算机的层级结构
- 学习计算机组成原理的基本方法
- 计算机如何执行程序
- 本课程要解决的基本问题
- 计算器的功能、组成和运行原理
- 程序的功能是如何实现的
- 控制器的功能、组成和运行原理
- 程序是如何执行的?
- 怎样能执行得快一些?
- 存储器及层次存储器系统
- 输入输出
阅读材料:
教材:
Computer Organization & Design The hardware/software interface 第四版 机械工业出版社(计算机组成与设计)
《计算机硬件系统实验教程》 刘卫东 李山山著 清华大学出版社
参考书目:
《计算机组成与系统结构》袁春风编 清华大学出版社
《计算机组成–结构化方法》刘卫东 宋佳兴 人民邮电出版社
Computer organization and architecture Designing for performance 清华大学出版社
第二课 计算机发展简史
略过
第三课 计算机的指令系统
本讲概要:
- 计算机程序及分类、指令系统基本知识、MIPS指令系统简介、THCO MIPS指令系统、THINPAD指令模拟器
计算机程序:
- C->汇编->机器语言(二进制)
高级语言:
- 高级语言又称算法语言,它的实现思路,不是过分地“靠拢”计算机硬件的指令系统,而是着重面向解决实际问题所用的算法,瞄准的是如何使程序设计人员能够方便地写出处理问题和解题过程的程序,力争使程序设计工作的效率更高。目前常用的高级语言有BASIC、PASCAL、C、C++、JAVA、PROLOG等许多种。用这些语言设计出来的程序,需要经过编译程序先翻译成机器语言程序,才能在计算机的硬件系统上予以执行,个别的选用解释执行方案。
汇编语言及机器语言:
- 汇编语言是对计算机器语言进行符号化处理的结果,再增加一些为方便程序设计而实现的扩展功能。在汇编语言中,可以用英文单词或其缩写替代二进制的指令代码,更容易记忆和理解;还可以选用英文单词来表示程序中的数据(常量、变量和语句标号),使程序员不必亲自为这些数据分配存储单元,而是留给汇编程序去处理,达到基本可用标准。若在此基础上,能够在支持程序的不同结构特性(如循环和重复执行结构,子程序所用哑变元替换为真是参数)等方面提供必要的支持,使该汇编语言的实用程度更高。汇编程序要经过汇编器翻译成机器语言后方可运行。
- 机器语言是计算机硬件能直接识别和运行的指令的集合,是二进制码组成的指令,用机器语言设计程序基本不可行。
指令和指令系统:
- 计算机系统由硬件和软件两大部分组成。硬件指由中央处理器、存储器以及外围设备等组成的实际装置。软件是为了使用计算机而编写的各种系统的和用户的程序,程序由一个序列的计算机指令组成。
- 指令是计算机运行的最小的功能单元,是指挥计算机赢家运行的命令,是由多个二进制位组成的位串,是计算机硬件可以直接识别和执行的信息体。指令中应指明指令所完成的操作,并明确操作对象。
- 一台计算机提供的全部指令构成该计算机的指令系统。指令用于程序设计人员告知计算机执行一个最基本运算、处理功能,多条指令可以组成一个程序,完成一项预期的任务。
指令系统在计算机中的位置:可以从六个层次分析和看待计算机系统的基本组成。
- 我们熟悉的指令系统就是x86和arm
指令功能分类:
- 数据运算指令-算术运算、逻辑运算
- 数据传输指令-寄存器之间、主存/寄存器之间
- 输入/输出指令-与输入/输出端口的数据传输
- 控制指令-转移指令、子程序调用/返回
- 其他指令-停机、开/关中断、空操作、特权、置条件码
指令格式:
- 指令格式:指令字中操作码和操作数地址的二进制位的分配方案
- 操作码:指明本条指令的操作功能,每条指令有一个确定的操作码。
- 操作数地址:说明操作数存放的地址,有时是操作数本身
- 指令字:完整的一条指令的二进制表示
- 指令字长:指令字中二进制代码的位数
- 机器字长:计算机呢那个直接处理的二进制的位数
- 指令字长(字节倍数) = 0.5、1、2… 个机器字长
- 定长指令字结构 变长指令字结构 定长操作码 扩展操作码
寻址方式
- 寻址方式(又称编址方式)指的是确定本条指令的操作数地址及吓一跳要执行的指令地址的方式。
- 不同的计算机系统,使用数目和功能不同的寻址方式,其实现的复杂程度和运行性能各不相同。有的计算机寻址方式较少,而有些计算机采用多种寻址方式。
- 通常需要在指令中为每一个操作数专设一个地址字段,用来表示数据的来源或去向的地址。在指令中给出的操作数(或指令)的地址被称为形式地址,使用形式地址信息并按一定规则计算出来或读取操作得到的一个数值才是数据(或指令)的实际地址。在指令的操作数地址字段,可能要指出:
- 运算器中的累加器的编号或专用寄存器名称(编号)
- 输入/输出指令中用到的I/O设备的入出端口地址
- 内存储器的一个存储单元(或一 I/O设备)的地址
第四课 计算机的指令系统
评价计算机性能的指标
- 吞吐率 - 单位时间完成的任务数量
- 响应时间 - 完成任务的时间
- 衡量性能的指标 - MIPS CPI CPUtime CPUClock
- 综合测试程序(测试床)
MIPS指令系统
- MIPS:
- Microprocessor without interlocked piped stages
- 无内部互锁流水级的微处理器
- RISC芯片
- 由John L. Hennerssy设计(本课堂书籍作者)
- MIPS:
- Million Instructions Per Second
- 计算机性能指标之一
MIPS指令格式
- 所有的指令都是32位字长。有3种指令格式,即寄存器型、立即数型和转移型。
- 操作数寻址方式有基址加16位位移量的访存寻址、立即数寻址及寄存器寻址3种。
MIPS指令系统(续)
THINPAD的硬件组成
THCO MIPS指令系统-需要汇编基础
第五六课 数据表示与检错纠错
内容提要
- 数据表示的需求
- 逻辑性数据表示
- 字符的表示
- 整数的表示
- 检错纠错码
数据编码和表示
- 需要在计算机中表示的对象
- 程序、整数、浮点数、字符(串)、逻辑值
- 通过编码表示
- 表示方式
- 用数字电路的两个状态表示,存放在机器字中
- 由上一层的抽象计算机来识别不同的内容
- 编码原则
- 少量简单的基本符号
- 一定的规则
- 表示大量复杂的信息
- 方便使用
编码表示
- 基本元素
- 0、1两个基本符号
- 字符
- 26字母 => 5位
- 大小写 + 其他符号 => 7bits (in 8)
- 世界上其他语言的文字 => 16 bits(unicode)
- 无符号整数(0,1,— \(2^{n-1}\))
- 逻辑值
- 0 => False, 1 => True
- 颜色
- 位置、地址、指令
- 但n位只能代表\(2^n\)个不同的对象
逻辑型数据
- 逻辑型数据
- True、真、1
- False、假、0
- 数据运算:与或非
字符型数据
- 重要的人机界面
- 由符号组成
- 为每个字符进行编码,由输入/输出设备进行转换
- 一般以字符串的形式在计算机存储器中存放
- 字符集编码标准
- 计算机之间进行信息交互的基础
- ASCII
- UNICODE
- UTF-8
- 计算机之间进行信息交互的基础
- ASCII字符编码
- American Standard Code for Information Interchange
- 采用7位二进制编码,占用一个字节
- 表示128个西文字符
- UNICODE编码
- 使用16位表示一个字符,可以表示65536个字符
- 将整个编码空间划分为块,每块为16的整数倍,按块进行分配。
- 保留6400个码点共本地化使用
- 依然无法覆盖所有字符
- UTF-8编码
- 变长字符编码,提高存储空间利用率
- 字符长度由首字节确定
- 字符首字节外,均以“10”开始,可自同步
- 可扩展性强
- 成为互联网上占统治地位的字符集
数值型数据表示
- 定点数
- 小数点位子固定
- 整数
- 定点小数
- 浮点数
- 小数点位置浮动
- 数值范围和数据精度
- 数值范围:是指一种类型的数据所能表示的最大值和最小值;
- 数据精度:通常指实数所能给出的有效数字位数;对浮点数来说,精度不够会造成误差,误差大量积累会出问题。
- 整数的二进制表示
- 进位计数法 \(N = \sum_{i=m}^{-k}D_ir^i\)
- N 表示某个数值
- r是这个数制的基,二进制r=2,八进制r=8等等
- i表示这些符号排列的位数
- \(D_i\)是位号为i的位上的一个符号
- \(r^i\)是位号为i的位上的一个1代表的值
- 具体到n位无符号二进制证书,如
- :\(b_{n-1}b_{n-2}···b_1b_0\)
- 其中,\(b_i\)为0或者1
- 表示的值为: \(N = \sum_{i=0}^{n-1}b_i2^i\)
- 可表示的范围为\(0 \to 2^n-1\)共\(2^n\)个数
- 如果要表示有符号的整数呢?
- 需要有1位来表示符号
- 最高位,0表示正数、1表示负数
- 其他位表示数据
- 需要有1位来表示符号
- 具体到n位无符号二进制证书,如
原码、反码和补码
负数表示形式:
- 原码(Sign Magnitude):符号位 + 数的绝对值
- 反码(One’s Complement):符号位 + 数值按位求反(正数反码是其本身)
- 补码(Two’s Complement):反码的最低位+1(正数补码是其本身)
补码的加法运算
- 加法运算:符号位和数据位同样计算
- \[[x+y]_补 = [x]_补 + [y]_补\]
- \([x]_补\)与\([-x]_补\)
- \([x]_补\)连同符号位在内,逐位求反,再在最低位加1,即可得\([-x]_补\)
- 当\(X \geq 0\) 时,….
- 当\(X < 0\)时,…
- 补码减法
- \[[x-y]_补 = [x+(-y)]_补 = [x]_补 + [-y]_补\]
- 补码的乘除法
补码表示中的符号位扩展
总结
- 正数的原码、反码、补码表示均相同,符号位为0,数值位同数的真值。
- 零的原码和反码均有2个,补码只1个码
- 负数的原码、反码、补码表示均不同,符号位为1,数值位:原码为数的绝对值、反码为每一位均取反、补码为反码再在最低位+1
检错纠错码
- 数据或编码在存储、传输等过程中可能出错
- 如何判断是否有已经出错?
- 比较:与所有正确的编码进行比较
- 特征:检验是否存在某些特征
- 发现错误后能否自动纠正?
- 计算机中的数据如何进行检错?
- 纠错呢?
- 如何判断是否有已经出错?
- 使编码具有某种特征,通过检查这种特征是否存在来判断编码是否正确
- 出错时,如果还能指出是二进制中哪一位的0\1出错,则可纠正错误
- 编码
- 检查
- 出错后纠正
- 码距
- 码距(最小码距)的概念:是指热议两个合法码之间至少有几个二进制位不相同。例如:
- 仅有一位不同,称最小码距为1,例如用4位二进制表示16种状态,则16种编码都用到了,此时码距为1,就是说,任何一个编码状态的四位码中的一位或几位出错,都会变成另一个合法码,此时无检错能力。
- 若用4个二进制位表示8种合法状态,就可以只用其中的8个编码来表示之,而把另8种编码作为非法编码,此时可以使合法码的码距为2。如果一个码字中的任何一位出错后都会成为非法码,则它就有了发现一位出错的能力。
- 合理增大码距,能提高发现错误的能力,但表示一定数量的合法码所使用的二进制位数要变多,增加了电子线路的复杂性和数据存储、数据传输的数量。
- 码距(最小码距)的概念:是指热议两个合法码之间至少有几个二进制位不相同。例如:
- 三种常用的纠错纠错码:
- 奇偶校验码:用于并行数据传送中
- 汉明校验码:用于并行数据传送中
- 循环冗余校验码:用于串行数据传送中
奇偶校验码
奇偶校验码的实现电路
汉明校验码
汉明码的编码方法
汉明码的实现方案 例如:k=3, r=4
第七八课 算数运算及电路实现,有介绍乘法实现
开始偏硬件了 ,到40:05秒开始介绍乘法,了解下
原码乘法
补码乘法
布斯算法
本文由作者按照 CC BY 4.0 进行授权