文章目录
数据信息的表示数值数据的表示非数值数据的表示字符与字符串的表示汉字的编码方法 数据信息的校验奇偶校验简单奇偶校验交叉奇偶校验 定点运算和定点运算器定点加、减法运算溢出判断 定点乘、除法运算逻辑运算定点运算器的组成ALU数据总线 运算器的基本结构形式寄存器 浮点运算和浮点运算器浮点数的加、减法运算浮点数的乘、除法运算浮点运算流水线流水线原理 浮点运算器实例数据信息的表示
数值数据非数值数据数值数据的表示
计算机采用二进制原因
易于物理实现运算规则简单机器可靠性高逻辑判断方便
进位计数制
指计算机采用从低位向高位进位的方式计数
补码
其实就是利用同余系把数映射到[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"**。
如果觉得《计算机组成原理之运算方法和运算器》对你有帮助,请点赞、收藏,并留下你的观点哦!