2.1 数据的表示
2.1.1 数字数据的表示
权:在进位记数制中,表示数值大小的数字与它在数中的位置有关,同一数字处于不同的数位时表示的数值是不同的,即权不同。基数:表示某种进位记数制所拥有的数字的个数进制转换
二进制数与八进制数之间的转换 :以小数点为界,分别向左向右每三位二进制数合成一位八进制数,或每一位八进制数展成三位二进制数,不足三位者补0。二进制数与十六进制数之间的转换 :以小数点为界,分别向左向右每四位二进制数合成一位十六进制数,或每一位十六进制数展成四位二进制数,不足四位者补0。二、十、十六进制的转换
00010000000000000000100000000000 和 00010000000000000001000000000000
0001 0000 0000 0000 0000 1000 0000 0000 =>0x10000800
0001 0000 0000 0000 0001 0000 0000 0000 =>0x10001000
0FFFH,1FFFH,FFFEH,FFF1H
有符号数和无符号数无符号数![]()
有符号数
定点数与浮点数定点格式:容许的数值范围有限,但要求的处理硬件比较简单 ( x=x 0 x 1 x 2 … x n )定点整数:表示范围 0 £ |x| £ 2 n -1定点小数:表示范围 0 £ |x| £ 1-2 -n浮点格式:容许的数值范围很大,但要求的处理硬件比较复杂。浮点数的一般表示方法: N=R e · M 其中, M 为尾数(定点小数), R 为基数(定点整数), E 为阶码(定点整数)。2.1.3 字符数据的表示
字符与字符串的表示
要对字符进行识别和处理,必须通过编码的方法,按照一定的规则将字符用一组二进制数编码表示。常见的字符编码: ASCII 码、 Unicode 码等 。ASCII 编码 ( American Standard Code for Information Interchange ,美国标准信息交换码),它已被国际标准化组织( ISO )定为国际标准,称为 ISO 646 标准。ASCII 码用 7 位二进制数表示一个字符,总共 128 个字符元素,包括 10 个十进制数字( 0 ~ 9 )、 52 个英文字母( A ~ Z 和 a ~ z )、 34 个专用符号和 32 个控制符号。ASCII 码表中的编码值 0 ~ 31 不对应任何可印刷字符,这些编码值对应的字符称为控制字符,用于通信中的通信控制或对计算机设备的功能控制。扩展 ASCII 码为 8 位 , 是用八位二进制数表示一个字符,因此可以表示 256 个不同的字符。汉字的输入编码
国标区位码拼音码字形码
汉字内码汉字信息在存储、交换、检索等操作时使用的机内代码,一般采用两个字节表示。且每个字节最高位为1(为区别ASCII码)。内码=区位码+A0A0H国标码=区位码+2020HGB2312,6763字GB13000.1,20902字GB18030,27533字BIG5,13000字UNICODE (统一码、万国码、单一码)汉字字模码用点阵、矢量函数等方式表示的汉字字形代码,是汉字的输出形式。
2.2 机器码的表示
带符号表示
计算机中存储负数,其实不是存储问题,而是解释的问题。给定的寄存器大小可存储的最大模式数是固定的,但程序员可以将一些模式解释为负数值。通常的方法是采用一种称为二进制补码表示的解释方式。还有原码、反码和移码三种。2.2.1 原码表示法
最高位表示符号位,符号位为0表示正数;符号位为1表示负数,数值部分用二进制的绝对值表示。
特点:有界
做加减法要先判断正负数
补码的表示
手工计算二进制补码的方法:对任何大小的寄存器,- 1 的表示都是寄存器所有的位均为 1 。- 1 加上 1 将产生溢出并使寄存器的所有位均为 0 。对任何一个模式,各位取反( NOT ),并将得到的数再加上原来的数,得到的结果就是寄存器所有的位均为 1 。即- 1再加上 1 呢?这个反转的模式加 1 就得到原来数的二进制补码低位的第一个 1 后面的高位全部取反。特点:“ 0 ” 的表示唯一符号位可以参与运算减去一个数就等同于加上这个数的负数,所以减法可以用加法来实现运算规则[X+Y] 补 = [X] 补 + [Y] 补[X -Y] 补 = [X] 补 + [-Y] 补2.2.3 三种码制表示总结
机器码的表示方法:原码、补码、反码、移码原码反码的 0 有正零和负零两种表示方法应用:讨论机器码的表示范围(寄存器为 8 位):原码、反码的表示范围是 +(2 7 -1)~-(2 7 -1) 即 +127~-127补码的表示范围是: +(2 7 -1)~-(2 7 ) 即 +127~-128![]()
三种码制的转换
例:已知真值X1=+78,X2=-78求[x]原、[x]反、[x]补。
解:X1=+78=0100110B
[x1]原=01001110 [x1]反=01001110
[x1]补=01001110
X2=-78=-01001110B
[x2]原=11001110 [x2]反=10110001
[x2]补=10110010
2.3补码的加减法运算
2.3.1 补码的加法
[X]补+ [Y]补= [X+Y]补
例1:x=0.1001, y=0.0101,求x+y。(5位)
解: [x]补=0.1001, [y]补=0.0101
[x]补 0.1001
+[y]补 0.0101
[x+y]补 0.1110
所以 x+y=+0.1110
例2 x=+0.1011, y=-0.0101,求x+y。
解: [x]补=0.1011, [y]补=1.1011
[x]补 00.1011
+[y]补 11.1011
[x+y]补 100.0110
所以 x+y=0.0110
2.3.2 补码的减法
[x-y]补=[x]补+[-y]补
2.3.3溢出概念及判断方法
在定点数表示法中,要求参加运算的数以及运算的结果都必须保证落在该定点数所能表示的数值范围内。绝对值小于最小正数的数一般会被当成机器0处理,称为“下溢”;大于最大正数和小于绝对值最大负数的数都称为“上溢”。发生溢出时,计算机将暂时中止运算操作,进行溢出处理。
正溢,负溢
双符号位法(变形补码)运算结果的二符号位相异时,表示溢出;相同时,表示未溢出。Sf1 SF2
0 0 正确(正数)
0 1 溢出
1 0 溢出
1 1 正确(负数)Sf 1 表示正确的符号,逻辑表达式为 V=Sf 1 ⊕ Sf 2 , 可以用异或门来实现单符号位法(利用进位)C f C 0
0 0 正确(正数)
0 1 溢出
1 0 溢出
1 1 正确(负数)故溢出逻辑表达式 : V = C f ⊕ C o ,其中 C f 为符号位产生的进位, C o 为最高有效位产生的进位。
2.3.4 定点加法器
两个二进制数字Ai,Bi和一个进位输入Ci相加,产生一个和输出Si,以及一个进位输出Ci+1。下面列出一位全加器进行加法运算的输入输出真值表。
FA(全加器)逻辑电路图
![]()
FA框图
行波进位的补码加法/减法器
定点计数器的组成
逻辑运算(简)逻辑非逻辑加逻辑乘逻辑异或多功能算术 / 逻辑运算单元( ALU )内部总线结构
XiYi 与控制参数和输入量的关系构造如下真值表
![]()
进一步化简得到下式
![]()
ALU的某一位逻辑表达式见下:
先行进位
4 位之间采用先行公式,每一位的进位公式可递推如下:C n + 1 = Y 0 + X 0 C nC n + 2 = Y 1 + X 1 C n + 1 = Y 1 + Y 0 X 1 + X 0 X 1 C nC n + 3 = Y 2 + X 2 C n + 2 = Y 2 + Y 1 X 1 + Y 0 X 1 X 2 + X 0 X 1 X 2 C nC n + 4 = Y 3 + X 3 C n + 3 = Y 3 + Y 2 X 3 + Y 1 X 2 X 3 + Y 0 X 1 X 2 X 3 + X 0 X 1 X 2 X 3 C n• 令 G = Y 3 + Y 2 X 3 + Y 1 X 2 X 3 + Y 0 X 1 X 2 X 3
P = X 0 X 1 X 2 X 3•• G 为进位发生输出 P 为进位传送输出• 增加 P 和 G 的目的在于实现多片(组) ALU 之间的先行进位,需要配合电路,称为先行进位发生器( CLA )器件: 74181(下图)
如果将四片74181的P,G输出端送入到74182先行进位部件(CLA),又可实现第二级的先行进位,即组与组之间的先行进位。
2.5 定点乘法运算
2.5.1 人工乘法
2.5.2 定点原码乘法
[x] 原 =x f .x n-1 … x 1 x0 [y] 原 =y f .y n-1 … y 1 y 0[ x.y ] 原 =( x f ⊕ y f )+(0. x n-1 … x 1 x0).(0. y n-1 … y 1 y 0 )n 位乘 n 位积可能为 2n 位 .实现方法方法一:串行的 “ 加法和移位 ” , 硬件结构简单 , 但速度太慢 ( 时间延迟太长 ).方法二:不带符号位的阵列乘法器
定点原码一位乘法
利用阵列乘法器来实现
实现过程类似与人工方法
m×n不带符号阵列乘法器逻辑图
![]()
带符号的阵列乘法器
原理:算前求补-乘法器-算后求补![]()
求补电路
2.6 定点除法运算
2.6.1 人工算法
定点原码一位除法实现方案(手工)0.10010/0.1011
2.6.2 定点除法运算
恢复余数法(例)
加减交替法
在恢复余数除法中,若第 i-1 次求商的余数 R i-1 >0 , 则第 i 次求商的余数 : 余数左移一位,再减去除数,既: R i =2R i-1 -Y若 R i >0, 则n 第 i 位的商上 1n 下一位商的余数 : R i+1 =2R i -Y若 R i <0, 则n 第 i 位的商上 0 => 恢复余数为 R i +Yn 下一位商的余数 : R i+1 =2( R i +Y )-Y=2R i +Y说明 : 若最后一次上商为 0 , 但需得到正确余数 , 则需恢复余数![]()
2.6.3 阵列除法器
可控加法/减法(CAS)单元
不恢复余数的阵列除法器
2.7 浮点数的表示
2.7.1 浮点数格式
移码表示法
移码 —— 用整数形式表示浮点数的阶码方法。移码的定义:[X]移=2n +X (-2n < = x< 2n)
n为阶码数值位(除符号位)
浮点数中移码表示阶码说明
![]()
IEEE754
2.7.3 舍入操作
舍入操作总有一些不能准确表示的数(如 1/3 )双精度浮点数转化为单精度浮点数浮点数转化为整型IEEE754 标准中的舍入方法 :TruncateJust drop the last bits (round towards 0)Round to (nearest) evenNormal rounding (default mode)Round towards +infinityALWAYS round “ up ” : 2.001 → 3, -2.001 → -2Round towards -infinityALWAYS round “down”: 1.999 →1, -1.999 →-2
![]()
2.7.4 浮点数的溢出
2.8 浮点数运算
2.8.1 浮点数的加减法运算
零操作数检查对阶 ( 小阶向大阶看齐 )尾数相加减规格化舍入操作溢出判断2.8.2 浮点数的乘除法运算
尾数相乘除阶码相加减2.8.3 流水线浮点运算器
2.8.4 浮点数运算实例
浮点运算器实例CPU 之外的浮点运算器(数学协处理器)如 80287完成浮点运算功能,不能单用。可以和 80386 或 80286 异步并行工作。高性能的 80 位字长的内部结构。有 8 个 80 位字长以堆栈方式管理的寄存器组。浮点数格式完全符合 IEEE 标准。CPU 之内的浮点运算器( 486DX 以上)
2.9 验证码
为了发现和纠正对数据进行加工处理的过程中出现的数据错误,需要采取相应的措施,对数据进行编码。在原始数据(数码位)基础上增加几位校验位是目前比较简单实用的方法。
2.9.1 奇偶校验码
一种最简单 的数据校验码,其硬件开销最小,可以检验出一位(或奇数位)错误;不能检验偶数位错误,也不能确定出错的位置。给每一个码字加一个校验位,用它来构成奇性或偶性校验。奇偶校验位可由硬件电路(异或门)或软件产生:![]()
实例:
2.9.2 海明校验码
确定校验码的值需三步:确定最小的校验码位数分配校验位和信息位计算校验码如何确定最小的校验位数 r :假设为k个数据位设置r个校验位,则校验位能表示2^r个状态,可用其中的一个状态指出 “没有发生错误”,用其余的2^r -1个状态指出有错误发生在某一位,包括k个数据位和r个校验位,因此校验位的位数应满足如下关系:
2^r-1 ≥ k + r
按上述不等式,可计算出数据位k 与校验位 r 的对应关系,如下表所示。
分配校验位和信息位校验码是放在 2 的幂次位上的,如 1 , 2 , 4 , 8 , 16….信息位从低位到高位依次排列,如果该位置被校验位占据之后就往后移,直到没有被占据的空位。![]()
计算校验位的值(配偶原则)
接收端如何检验和纠错 ( 举例 )假设信息传输前1100 1101 1110 , 传输后为1110 1101 1110,有一位错。
则S1:P1⊕1⊕1⊕0⊕1⊕1=1⊕1⊕1⊕0⊕1⊕1=1
则S2:P2⊕1⊕1⊕0⊕1⊕1=1⊕1⊕1⊕0⊕1⊕1=1
则S3:P4⊕1⊕1⊕0⊕0=0⊕1⊕1⊕0⊕0=0
则S4:P8⊕1⊕1⊕1⊕0=1⊕1⊕1⊕1⊕0=0
计算出错处的位数 s4s3s2s1:0011
即为第3位传输出错
例1:设信息位为:1011,计算校验码(配偶原则)。
第1步,r=?
2r-1>=K+r
故r=3, 为p1p2p3
第2步,确定校验码p1p2p3的位置:校验位放在2n位(n为0,1,2……)
p1 p2 1 p4 0 1 1(最左为检验码的第1位)
第3步,确定校验位p1,p2,p4的值
校验规则,
p1校验1,3,5,7……(包括自己在内,隔位校验)
p2校验2,3,6,7……(包括自己在内,连续2位,间隔2位,连续2位……)
p4校验4,5,6,7……(包括自己在内,连续4位,间隔4位,连续4位……)
根据配偶原则,p1=0, p2=1,p4=0
第4步,构成校验码为:0110011
例2:有海明检验码(配偶原则)0100011,问该校验码有没有错,如果有错,指出哪位出错了。
解:S1(1,3,5,7)=0 ⊕ 0 ⊕ 0 ⊕ 1=1
S2(2,3,6,7)=1 ⊕ 0 ⊕ 1 ⊕ 1=1
S3(4,5,6,7)=0 ⊕ 0 ⊕ 1 ⊕ 1=0
S3S2S1=011=(3)10
第3位出错,故正确的校验码为: 0110011
小结
一个定点数由符号位和数值域两部分组成。按小数点位置不同,定点数有纯小数和纯整数两种表示方法。按 IEEE754 标准,一个浮点数由符号位 S 、阶码 E 、尾数 M 三个域组成。其中阶码 E 的值等于指数的真值 e 加上一个固定偏移值。ASCII 码和 UNICODE 编码。原码、补码、移码给定宽度的数据表示有范围,运算结果要做溢出判断理解运算器的组成( datapath )为运算器构造的 简单性 ,运算方法中算术运算通常采用补码加、减法,原码乘除法或补码乘除法。为了运算器的 高速性 和控制的简单性,采用了先行进位、阵列乘除法、流水线等并行技术措施。运算方法和运算器是本章的重点。定点运算器和浮点运算器的结构复杂程度有所不同。早期微型机中浮点运算器放在CPU芯片外,随着高密度集成电路技术的发展,现已移至CPU内部。