文章目录
数据信息的表示
- 数值数据
- 非数值数据
数值数据的表示
计算机采用二进制原因
- 易于物理实现
- 运算规则简单
- 机器可靠性高
- 逻辑判断方便
进位计数制
指计算机采用从低位向高位进位的方式计数
补码
其实就是利用同余系把数映射到[0,2^n)范围进行运算
移码
常用于表示浮点数的阶码,当偏移量取2 n − 1 2^{n-1}2n−1,其真值对应的移码定义是为[ X ] 移 = 2 n − 1 + X [X]_移=2^{n-1}+X[X]移=2n−1+X。即把补码的符号位取反。
定点数与浮点数
- 定点数:小数点位置固定,数据范围有限,硬件简单。
- 浮点数:小数点位置浮动,数据范围很大,硬件复杂。
IEEE标准中,三元组{S,E,M}来表示一个数,尾数M的最高有效位总为1,所表示实际值为1.M。
阶码表示指数的操作:避免出现正负指数,还可以保持数据的原有大小数据,便于进行比较。
例:


非数值数据的表示
字符与字符串的表示
- ASCII字符
- Unicode码
- 字符串
汉字的编码方法
- 输入码
- 交换码
- 机内码
- 字形输出码与汉字库
数据信息的校验
奇偶校验
- 可以检测出一位或奇数位错误,但不能确定出错的位置,也不能检测出偶数位错误。(一位出错的概率比多位出错的概率高得多)
简单奇偶校验
- 方式为在原信息中加上一位校验位组成校验码,这个校验位的作用是使得原有效信息中,“1”的个数为奇数个。
- 以奇校验为例,形成方式为原信息串求异或和后取反。
- 校验检测时,信息位和校验位异或和为0则代码无错误。但出现错误时,无法确定位置。
例题

交叉奇偶校验
纵向、横向同时校验
大量的数据块传送时,不仅在每个字节内部横向校验,并且全部字节同一位也设置奇偶检验做纵向校验。
定点运算和定点运算器
基本运算
- 算术运算
- 逻辑运算
定点加、减法运算
补码加法公式——[ x ] 补 + [ y ] 补 = [ x + y ] 补 ( m o d 2 ) [x]_补+[y]_补=[x+y]_补(mod2)[x]补+[y]补=[x+y]补(mod2)
减法本质上仍然是加法,对减数取相反数即可
溢出判断
- 双符号位中,两数进行操作后两个符号位一致则没有发生溢出否则溢出(01正溢,10负溢)
- 无论是否溢出,双符号位的最高位始终指示正确的符号
- 两个符号位异或0则正常
定点乘、除法运算
- 实现角度分为三种方式
- 软件实现(基本运算指令,循环子程序,硬件简单,但是速度慢)
- 硬件实现(逻辑电路实现,增加专门乘除法指令,比第一种快)
- 并行乘除法器(流水式阵列乘除法器,有专门乘除法指令,速度最快)
- 编码角度,原码实现也比较简单,但现代计算机还是采用补码
逻辑运算
NOT、AND、OR、XOR
定点运算器的组成
运算器主要功能是对数据进行加工处理,包括算术和逻辑运算
由算术逻辑单元(ALU)、寄存器、数据总线和其他逻辑部件组成
ALU
支持算术、逻辑运算,是运算器核心
任何计算机都可以通过编程来执行任何算术运算(软件层面)
数据总线
完成运算器内部的数据传送。
内部总线是CPU内各部件的连线。
外部总线是系统总线,即CPU与存储器、I/O系统之间的连线。
可以分为单向传送总线和双向传送总线
运算器的基本结构形式
单总线结构的运算器
- 所有部件都连接到同一条总线上
- 运算器内部只有一组数据总线,同一时间只能有一个操作数放到总线
双总线结构的运算器
- 有两条总线同时连接ALU的两个输入端
- 两个操作数同时加到ALU进行运算
三总线结构的运算器
- 共有三条总线,速度最快
- 每条总线单向传输数据,给寄存器数据传送带来困难,设置了总线旁路器
寄存器
- 一般指通用寄存器(用途广泛)
- 专用寄存器
- 累加器直接与ALU相连,使用频繁
浮点运算和浮点运算器
浮点规格化重要性
- 使浮点数保留最多的有效数字
- 使数据具有唯一的表示形式
浮点数的加、减法运算
浮点数加、减法运算规则
x + y = 2 E x ∗ M x + 2 E y ∗ M y = { ( M x ∗ 2 E x − E y + M y ) ∗ 2 E y ( E x ≤ E y ) ( M x + M y ∗ 2 E y − E x ) ∗ 2 E y ( E x > E y ) x+y=2^{E_x}*M_x+2^{E_y}*M_y=\left\{ \begin{aligned} (M_x*2^{E_x-E_y}+M_y)*2^{E_y} & & \ (E_x \leq E_y) \\ (M_x+M_y*2^{E_y-E_x})*2^{E_y} & & \ (E_x > E_y) \end{aligned} \right.x+y=2Ex∗Mx+2Ey∗My={(Mx∗2Ex−Ey+My)∗2Ey(Mx+My∗2Ey−Ex)∗2Ey (Ex≤Ey) (Ex>Ey)
0操作数检查
有一个为0则省去后续操作
对阶
即对其小数点,阶码相同则对齐,否则小阶靠近大阶,尾数相应右移
尾数相加
结果规格化
结果符号位不等则尾数绝对值大于1,尾数右移1位,阶码加1
结果符号位相等则向左规格化,尾数左移n位,阶码减n
舍入处理
丢失尾数0舍1入(尾数+1)
也可以尾数恒置1(数据丢失),速度快,不积累误差
溢出处理
尾数溢出即结果的规格化,没有真正的溢出
阶码溢出,下溢当作0,上溢当作+inf或者-inf,上溢是真溢出
样例1:



样例2:


浮点数的乘、除法运算
浮点数的乘除法可以直接进行阶码、尾数的操作,不需要进行讨论。
分为如下几个步骤
- 0操作数检查
- 阶码加/减操作
- 尾数乘/除操作
- 规格化处理与舍入
浮点运算流水线
流水线原理
按传统方式,所有指令均为顺序执行,指令控制器和运算器交替运算,有资源浪费。一种合理解决方案是流水线式工作,不同元件负责不同部分的工作。划分子任务并发执行。
浮点运算器实例
CPU之外的浮点运算器:8087运算器,配合8086CPU进行,称为协处理器,以异步方式与8086并行工作。
CPU之内的浮点运算器:奔腾CPU将浮点运算器包含在芯片内,流水线设计。内部主要流水线是**“U-Pipe”,另一条是"V-Pipe"**。