610 likes | 744 Views
第 3 章. 数据表示、数据运算算法 和逻辑电路实现. 教师:吴莉 电话: 13807056518. 本章主要内容. 信息编码、码制转换与检错纠错码 数据表示 —— 常用的信息编码 二进制数值数据的编码与运算算法. 数字化编码二要素. 数值 文字 符号 语音 图形 图像 等统称数据, 在计算机内部,都必须用 数字化编码 的形式 被 存储 加工 和 传送 数字化编码 二要素 : 少量简单的基本符号 一定的组合规则 用以表示 大量复杂多样 的信息. 基二码(二进制码). 只使用 两个 基本点符号: 1 0 符号个数 最少 ,物理上容易实现
E N D
第3章 数据表示、数据运算算法和逻辑电路实现 教师:吴莉 电话:13807056518
本章主要内容 • 信息编码、码制转换与检错纠错码 • 数据表示——常用的信息编码 • 二进制数值数据的编码与运算算法
数字化编码二要素 数值 文字 符号 语音 图形 图像 等统称数据, 在计算机内部,都必须用数字化编码的形式 被 存储加工和传送 数字化编码二要素: • 少量简单的基本符号 • 一定的组合规则 用以表示大量复杂多样的信息
基二码(二进制码) 只使用两个基本点符号:10 符号个数最少,物理上容易实现 与二值逻辑的 真假两个值对应简单 用二进制码表示数值数据运算规则简单
进位记数法与进制转换 进位记数法 -k N D = r i * i i=m-1 N 代表一个数值 r 是这个数制的基(Radix) i表示这些符号排列的位号 D 是位号为i的位上的一个符号 i i r 是位号为i的位上的一个 1 代表的值 D r i 是第i位的所代表的实际值 * i 表示m+k位的值求累加和
十进制转二进制 整数部分除2取余 小数部分乘2取整 1 1 0.625 * 2 2 1 低 0.25 * 2 5 高 1 2 1 0 0 0.5 * 2 2 2 1 1 1 2 高 0.0 低 0 除尽为止求得位数满足要求为止 从二进制数求其十进制的值,逐位码权累加求和
二到八或十六进制转换 二到八 从小数点向左右三位一分组 (10 011 100 . 01)2 = ( 234 . 2 )8 010 二到十六 从小数点向左右四位一分组 (1001 1100 . 01)2 = ( 9C . 4 )16 0100 说明:整数部分不足位数对转换无影响, 小数部分不足位数要补零凑足,否则出错。
二进制数据算术运算规则 (1) 加法运算规则 0+0=0 例如: 0101 0+1=1 +) 0001 1+0=1 0110 1+1=0 并产生进位 (2) 减法运算规则 0-0=0 例如: 1011 0-1=1 并产生借位-) 0101 1-0=1 0110 1-1=0
二进制数据算术运算规则 • 乘法运算规则例如: 1101 0X0=0 X) 0101 0X1=0 1101 1X0=0 1101 1X1=1 1000001 • 除法运算规则 1101 例如: 1110101/1001 1001 1110101 1001 1011 1001 01001 1001 0 0000
检错纠错码 为了提高计算机的可靠性,除了采取选用更高可靠性的器件,更好的生产工艺等措施之外,还可以从数据编码上想一些办法,即采用一点冗余的线路,在原有数据位之外再增加一到几位校验位,使新得到的码字带上某种特性,之后则通过检查该码字是否仍保持有这一特性,来发现是否出现了错误,甚至于定位错误后,自动改正这一错误,这就是我们这里说的检错纠错编码技术。
纠错码分类 纠错码 校验位与信息位 的形成关系 线性码 非线性码 分组码 信息位与校验位 的约束条件 卷积码 码字本身的 结构特点 非循环码 循环码 信息位与校验位排列位置关系 随机 错误 突发 错误 非系统码 系统码
几种常用的检错纠错码 我们只介绍三种常用的检错纠错码: 奇偶检错码, 用于并行数据传送中 海明检错与纠错码,用于并行数据传送中 循环冗余码, 用于串行数据传送中 原始数据 码 字 结果数据 传送 编码过程 译码过程 形成校验位的值,加进特征 检查接送的码字,发现 / 改正错误
奇偶校验码 用于并行码检错 原理:在 k 位数据码之外增加 1 位校验位, 使 K+1 位码字中取值为 1 的位数总保持 为 偶数(偶校验)或 奇数(奇校验)。 例如: 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 0 1 0 1 原有数字位 两个新的码字 偶校验 奇校验 校验位
奇偶校验码的实现电路 奇较验 偶校验 出错指示 p 编码电路 译码电路 + + 同左侧电路 八位数据位 + + + + + + D7 D6 D5 D4 D3 D2 D1 D0 P (校验位)
海明校验码 用于多位并行数据检错纠错处理 实现:为k个数据位设立r个校验位, 使k+r位的码字同时具有这样两个特性: • 能发现并改正 k+r位中任何一位出错, • 能 发 现 k+r位中任何二位同时出错,但已无法改正。
海明码的编码方法 合理地用 k 位数据位形成 r 个校验位的值,即保证用 k 个数据位中不同的数据位组合来形成每个校验位的值,使任何一个数据位出错时,将影响 r 个校验位中不同的校验位组合起变化。换言之,通过检查是哪种校验位组合起了变化,就能确定是哪个数据位错,对该位求反则实现纠错。 有时两位错与某种情况的一位错对校验位组合的影响相同,必须加以区分与解决。
海明码的实现方案 例如: k =3, r =4 D3 D2 D1 P4 P3 P2P1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 1 0 0 0 1 + :异或 P1 = D2 + D1 P2 =D3 + D1 P3 =D3 + D2 P4 =P3+P2+P1+ D3 + D2 + D1 编码方案 S1 = P1 +D2 + D1 S2 = P2+D3 + D1 S3 = P3+D3 + D2 S4 = P4+P3+P2+P1+ D3 + D2 + D1 译码方案
海明码的实现原理 例如: k =3, r =4 D3 D2 D1 P4 P3P2P1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 1 0 0 0 1 P1 = D2 + D1 P2 = D3 + D1 P3 = D3 + D2 6 5 3 0 4 2 1 P4 = P3 + P2 + P1 + D3 + D2 + D1 S1 = P1 + D2 + D1 S2 = P2 + D3 + D1 S3 = P3 + D3 + D2 S4 = P4 + P3 + P2 + P1 + D3 + D2 + D1
检错纠错码小结 (1) K位码有2K个编码状态,全用于表示合法码,则任何一位出错, 均会变成另一个合法码,不具有检错能力。 (2) 从一个合法码变成另一个合法码,只少要改变几位码的值,称为最小码距(码距)。 (3) K+1 位码,只用其 2K个状态,可使码距 为 2 , 如果一个合法码中的一位错了,就成为非法码,通过检查码字的合法性,就得到检错能力,这就是奇偶校验码。
检错纠错能力 (4) 对k位数据位,当给出r 位校验位时, 要发现并改正一位错, 须满足如下关系: 2r> =k + r +1; 要发现并改正一位错,也能发现两位错,则应: 2r-1 >= k + r, 此时码距为 4。 (5) 若最小码距为 d (d>=2), 能发现 d-1 位错,或改正 (d-2)/2 (取整) 位错, 要发现l 位错,并改正t 位错,应满足如下条件: d >=l + t + 1 ( l >= t )
本章主要内容 • 信息编码、码制转换与检错纠错码 • 数据表示——常用的信息编码 • 二进制数值数据的编码与运算算法
基二码应用实例:数据表示 逻辑型数据 字符型数据 ASCII 码 EBCDIC 码 字符串 汉字 检错纠错码 奇偶校验 海明校验 循环冗余校验 数值型数据 定点小数 整数 浮点数 二—十进制数(BCD码)
逻辑型数据 逻辑型数据只有两个值:真 和 假, 正好可以用二进制码的两个符号分别表示, 例如 1表示 真 则 0表示 假 不必使用另外的编码规则。 对逻辑型数据可以执行逻辑的 与 或非等基本逻辑运算。其规则如下:
逻辑型数据基本运算规则 XY X与Y X或Y X的非 00 0 0 1 01 0 1 1 1 0 0 1 0 11 1 1 0
字符型数据的表示 字符作为人—机联系的媒介,是最重要的数据类型之一,当前的西文字符集由 128个符号组成,通常用 8 位二进制编码,即用一个字节来表示每一个符号,当前通用的两个标准字符集是: ASCII 码: 即 American Standard Code for Information Interchange EBCDIC码:即 Extended Binary Coded Decimal Interchage Code ASCII码字符集具体编码如下表所示:
ASCII字符编码集 b6 b5 b4 000 001 010 011 100 101 110 111 b3 b2 b1 b0 0000 NUL DLE SP 0 @ P , p 0001 SOH DC1 ! 1 A Q a q 0010 STX DC2 “ 2 B R b r 0011 ETX DC3 # 3 C S c s 0100 EOT DC4 $ 4 D T d t 0101 ENQ NAK % 5 E U e u 0110 ACK SYN & 6 F V f v 0111 BEL ETB ‘ 7 G W g w 1000 BS CAN ( 8 H X h x 1001 HT EM ) 9 I Y i y 1010 LF SUB * : J Z j z 1011 VT ESC + ; K [ k { 1100 FF FS , < L \ l | 1101 CR GS - = M ] m } 1110 SO RS . > N ^ n ~ 1111 SI US / ? O _ o
字符串的表示与存储 • 字符串是指连续的一串字符,它们占据主存中连续的多个字节,每个字节存放一个字符,对一个主存字的多个字节,有按从低位到高位字节次序存放的,也有按从高位到低位字节次序存放的。表示字符串数据要给出串存放的主存起始地址和串的长度。例如:IF A>B THEN READ(C)就可以有如下不同的存放方式: • I F A A F I • > B T T B > 假定每个字 • H E N N E H 由 4 个字节 • R E A D D A E R 组成 • ( C ) ) C (
汉字的表示 通常用两个字节表示一个汉字 为了与西文字符编码相区别(西文的ASCII码的最高一位编码值为0),表示一个汉字时,把两个字节的最高一位的编码值设定为 1,则该编码集的最多编码数量为 128 X 128。 这种编码方案与西文传送中的把ASCII码的最高一位用作奇偶校验位有矛盾。
数值数据在计算机内的格式 定点小数: N = N N N ……...N s -1 -2 -n 整 数 : N = N N N ... N N s n n-1 1 0 浮点数: N = ME E ...E EM M ...M -n s s m-1 1 0 -1 -2 基为 2 IEEE 标准: 阶码用移码,尾数用原码 符号位阶码位尾数数码位总位数 短浮点数: 1 8 23 32 长浮点数: 1 11 52 64 临时浮点数: 1 15 64 80
二 十进制编码(BCD编码) 用四位二进制表示一位十进制, 16个编码状态选用其中的10个编码 有多种方案,例如: 8421码,余 3 码,循环码 又可区分为: 有权码:每位上的 1 代表确定的值 无权码:无法确定每位上的 1代表的值
有权码 无权码 余3码 8421 循环码 84-2-1 0 0000 0011 0000 0000 1 0001 0100 0001 0111 2 0010 0101 0011 0110 3 0011 0110 0010 0101 4 0100 0111 0110 0100 5 0101 1000 1110 1011 6 0110 1001 1010 1010 7 0111 1010 1000 1001 8 1000 1011 1100 1000 9 1001 1100 0100 1111
如何判定码权 • 0 0000 • 1 0111 4 +(-2)+(-1) • 2 0110 4 +(-2) 验证每个码的值 • 3 0101 4 +(-1) • 4 0100 4 从一编码求码权 • 5 1011 8 +(-2)+(-1) • 6 1010 -2 结论 • 7 1001 -1 证明此编码系统为有权码 • 8 1000 8 • 9 1111 8 + 4 +(-2)+(-1)
如何判定码权 • 0 0011 2+1 = 0 验证各码的值 • 1 0100 1 从一编码求码权 • 2 0101 1 • 3 0110 2 • 4 0111 • 5 1000 • 6 1001 结论 • 7 1010 证明此编码系统为无权码 • 8 1011 • 9 1100
本章主要内容 • 信息编码、码制转换与检错纠错码 • 数据表示——常用的信息编码 • 二进制数值数据的编码与运算算法
定点小数表示: Ns N1 N2 … Nn (纯小数)原码,反码,补码的定义 [ X ] = [ X ] = [ X ] = X 0 < X < 1 -1 < X < 0 1 - X 原 X 0 < X < 1 -n -n (2 - 2 )+ X -1 < X < 0 Mod ( 2 - 2 ) 反 X 0 < X < 1 Mod 2 2 + X -1 < X < 0 补
定点小数表示: Ns N1 N2 … Nn X 0 < X < 1 原 码 定义: [ X ]原= 实例: X1 = 0.10110 -0.10110 0.0000 [ X ] 原= 010110 110110 00000 10000 结论:原码为符号位加数的绝对值,0正 1负 原码零有两个编码,+0 和 -0编码不同 原码难以用于加减运算,但乘除方便 1 - X -1 < X < 0
定点小数表示: Ns N1 N2 … Nn X 0 < X < 1 反 码 定义:[ X ]反= 实例: X1 = 0.10110 -0.10110 0.0000 [ X ]反= 010110 101001 00000 11111 结论:反码负数为符号位跟每位的反, 0 正 1 负 反码零有二个编码,分+0 和 -0 反码难以用于加减运算,有循环进位问题 (2-2-n) + X -1 < X < 0 MOD (2-2-n)
定点小数表示: Ns N1 N2 … Nn X 0 < X < 1 模 2 补码 定义: [ X ]补= 实例: X1 = 0.10110 -0.10110 0.0000 [ X ]补= 010110 101010 00000 结论:补码最高一位是符号位,0 正 1 负 补码表示为:2*符号位 + 数的真值 补码零只有一个编码,故能表示 -1 补码能很好地用于加减(乘除)运算 2 + X -1 < X < 0 MOD 2
整数的编码表示 整数的 原码反码补码 表示 与小数的三种表示基本相同, 差别仅表现在小数点的位置, 可以认为整数的小数点在最低数值位的右侧 因此整数的模与整数位数有关, 讲课中不大用整数讲 原 反 补码定义 例如:整数六位编码: X = +01110 [X]原= 0 01110 [X]补= 0 01110 X = - 01110 [X]原= 1 01110 [X]补= 1 10010
原 反 补码表示小结 正数的 原码、反码、补码表示均相同, 符号位为 0,数值位同数的真值。 零的原码和反码均有 2个编码,补码只 1个码 负数的 原码,反码,补码表示均不同, 符号位为 1,数值位:原码为数的绝对值 反码为每一位均取反码 补码为反码再在最低位+1 由[X]补求[-X]补:每一位取反后,再在最低位+1 n 由 [X]补 求 X 的真值:X= -1 + Xi * 2-i i=1
数据的算术运算 补码 加 减 法 运算 原码一位乘法运算 原码一位除法运算 补码一位乘法运算 补码一位乘法运算 原码二位乘法运算 补码二位乘法运算 其它快速乘除法运算方法简介
补码加减法的实现 [X + Y] = [X] + [Y] [X-Y] = [X] + [-Y] [-Y] = 对 [Y] 逐位取反,再在最低位加 1 溢出判断: 正 + 正 得负 或 负 + 负 得正 数字位有向符号位的进位,但符号位不产生 向更高位的进位 双符号位的值为 01或 10 补 补 补 补 补 补 补 补
实现补码加减运算的逻辑电路 Fs OVR Z C F 1 Fs F ALU F X F Y X F 加 F X F /Y F Y 选通门 二选通门 Y X X X+Y X X-Y 0 1 0 1 源 寄存器 目的 寄存器 累加器 F X F /Y F 1 X F 选通门 减 X F
补码加减法运算实例 X=0.1011 y= -0.0101 模4 补码 [X] = 00 1011, [Y] = 11 1011 [-Y] = 00 0101 00 1011 00 1011 +11 1011 + 00 0101 100 0110 01 0000 X+Y X-Y (溢出) 补 补 补
补码表示中的符号位扩展 由 [X]补 求 [X / 2]补 的方法 原符号位不变, 且符号位与数值位均右移一位,例如, [X]补 =10010 则 [X/2]补 =110010 不同位数的整数补码相加减时, 位数少的补码数的符号位向左扩展, 一直扩展到与另一数的符号位对齐。 0101010111000011 0101010111000011 + 1111111110011100 + 0000000000011100 0101010101011111 0101010111011111
原码一位乘运算 [X*Y]原=( XS+ YS) ( X * Y ) 例如: X = 0.1101 Y = - 0.1011 0. 1 1 0 1 00 0 0 0 0 1 0 1 1 * 0. 1 0 1 1 00 0 1 1 0 1 1 0 1 1 1 0 1 00 1 0 0 1 1 1 1 0 1 1 0 1 00 0 1 0 0 1 1 1 1 0 0 0 0 00 1 0 0 0 1 1 1 1 + 1 1 0 1 X 和Y 符号异或为负 0 . 1 0 0 0 1 1 1 1 最终乘积原码表示为: 1 1 0 0 0 1 1 1 1 手工运算过程 计算机内运算的实现方法 部分积 乘数
原码一位乘运算 例如: X = 0.1101 Y = - 0.1011 0. 1 1 0 1 问题: * 0. 1 0 1 1 1. 加法器只有两个数据输入端 1 1 0 1 2. 加法器与乘运算数据位数相同 1 1 0 1 解决方案: 0 0 0 0 每次求出部分积,而不是一次总累加 + 1 1 0 1 变每次左移被乘数为右移部分积 0 . 1 0 0 0 1 1 1 1 判乘数每一位的值用固定的一位线路 手工运算过程
F 加 法 器 加运算 被 乘 数 部 分 积 乘 数 移位线路 每位1套 最低位 实现原码一位乘法的逻辑线路图 移位电路 第 i 位 第 i +1位 第 i 位 第 i -1位 F/2→X F→X F*2→X
F 加 法 器 加运算 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 被 乘 数 部 分 积 1 1 1 1 1 1 1 1 乘 数 1 1 0 1 移位线路 每位1套 最低位 原码一位乘法 0 0 0 0 0 0 1 0 1 1 0 0 0 1 1 0 0 1 0 0 0 1 0 1 0 0 1 1 0 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 低位积 0 0 1 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 1 1 0 1 0 0 1 1 0 0 1 0 0 1 0 1 0 0 0 1 0 0 1 1 0 1 1 0 1 1 1 1 0 1
原码一位乘运算 例如: X = 0.1101 Y = - 0.1011 0. 1 1 0 1 00 0000累加器初值取零值 * 0. 1 0 1 1 + 00 1101 1 1 0 100 1101 初值0加被乘数 1 1 0 1 00 01101 部分积右移 0 0 0 0 将移出的一位保存起来 + 1 1 0 1 求第一次部分积 0 . 1 0 0 0 1 1 1 1 手工运算过程