计算机组成原理学习记录2-数据的表示和运算

数据的表示和运算
数制与编码
进位计数制及其相互转换
十进制、二进制、八进制、十六进制的相互转换
真值和机器数
真值
是指带“+”或“-”符号的数,是机器数代表的实际值。
机器数
是指把符号“数字化”的数,其表示形式有原码、补码、反码和移码。
无符号整数:全部二进制位都是数值位,没有符号位,第i位的位权是2的i-1次方。
n比特的无符号整数表示范围为0-2n-1,超出则溢出,意味着该计算机无法一次处理这么多。
可以表示的最小的数全0,可以表示的最大的数全1。
加法:从最低位开始,按位相加,并往更高位进位。
减法:被减数不变,减数全部位按位取反,末尾加一,减法变加法。从最低位开始,按位相加,并往最高位进位。
编码
BCD码
用四位二进制代码来表示一位10进制的数。最常见的是8421码
ASCII码
标准ASCII码采用7位二进制代码来表示通用控制字符、十进制数码、英文大小写字母和专用符号
汉字编码
包括输入编码、汉字内码和汉字字形码
校验码
奇偶校验码
在原编码上加上一个校验位,校验整个校验码中“1”的个数是否为奇数或者偶数
奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。校验位为0,否则为1
偶校验码:整个校验码(有效信息位和校验位)中“1”的个数位偶数。校验位为0,否则为1
偶校验的硬件实现:各信息进行异或(模二加)运算,得到的结果为偶校验位。异或是同0异1。
循环冗余(CRC)码
在M为信息后面再拼接N位的校验码,利用模2除法校验编码正确性
海明校验码
在信息字段中插入若干位数据,用于监督码字里哪一位数据发生了变化,具有一位纠错能力
定点数(带符号整数)
表示
原码
用机器数的最高位表示该数的符号,其余的各位表示该数的绝对值。符号位为0表示正数,符号位为1表示负数。
若机器字长n+1位,带符号整数的原码的表示范围:
真值0有两种形式,+0和-0,+0=0,0000000,-0=1,0000000
原码中符号位不能参与运算,需要设计复杂的硬件电路才能处理
用补码表示真值-符号位可以参与运算。
反码
正数和原码相同,负数为原码的每位求反(不包括符号位)
带符号整数的反码的表示范围:
补码
正数和原码相同,负数为反码的末位加1,即负数为原码的每位求反再加1(不包括符号位)
带符号整数的补码的表示范围:
补码加法:从最低位开始,按位相加(符号位参与运算),并往更高处进位。
移码
补码的符号位求反
移码只能用来表示整数,真值0只有一种形式
带符号整数的移码的表示范围:
原码和反码的合法表示范围完全相同,都有两种方法表示真值0
补码的合法表示范围比原码多一个负数,只有一种方法表示真值0
常见考点:两个数A和B进行某种运算后,是否发生溢出?
手算做题可以带入十进制验证,是否超出合法范围
运算
移位运算
原码和反码的加减乘除运算
真值《-》原码(0正1负)
原码《-》反码(正数相同,负数数值位取反)
原码《-》补码(正数相同,负数数值位取反,末尾加1)
反码《-》补码(正数相同,负数末尾加1)
[-x]补码《-》[x]补码(全部位按位取反,末尾加1)
补码《-》移码(符号位取反)
定点数(带符号小数)
表示
原码、反码、补码
运算
真值《-》原码(0正1负)
原码《-》反码(正数相同,负数数值位取反)
原码《-》补码(正数相同,负数数值位取反,末尾加1)
反码《-》补码(正数相同,负数末尾加1)
[-x]补码《-》[x]补码(全部位按位取反,末尾加1)
补码加减法运算方法
Nbit补码X+Y,按位相加即可
Nbit补码X-Y,将补码Y全部按位取反,末位+1,得到[-Y]补,减法变加法。
标志位生成
OF(溢出标志,溢出为1,否则为0)
计算方法:OF等于最高位产生的进位异或次高位产生的进位
OF对无符号的加减法无意义
SF(符号标志,结果为负号时为1,否则为0)
计算方法:SF=最高本位和
SF对无符号的加减法无意义
ZF(零标志,运算结果为0时,ZF置为1,否则置为0)
计算方法:两个数的运算结果为nbit,只有n位全为0时,ZF=1
CF(进位/借位标志,进位借位时为1,否则置为0)
计算方法:最高位产生的进位异或sub,sub=1表示减法,sub=0表示加法。
CF对有符号数无意义
移位运算
算数移位
原码:符号位不变,仅对数值位移位。右移:高位补0,低位舍弃。如果舍弃的位=0,则相当于/2,若不=0,则会丢失精度。左移:低位补0,高位舍弃。若舍弃的位=0,则相当于*2,若不=0,则会出现严重误差
反码:正数的反码与原码相同,正数反码的移位运算也和原码相同。负数的反码数值位与原码相反,因此负数反码的移位运算规则如下。右移:高位补1,低位舍弃。左移:低位补1,高位舍弃。
补码:正数的补码和原码相同,正数补码的移位运算也和原码相同。负数补码=反码末位+1。导致反码最右边几个连续的1都因进位而变为0,直到进位碰到第一个0为止。负数补码的算数移位规则如下:右移:高位补1,低位舍弃。左移,低位补0,高位舍弃。
逻辑移位
逻辑右移:高位补0,低位舍弃
逻辑左移:低位补0,高位舍弃
可以把逻辑移位看作是对无符号数的算数移位
循环移位
不带进位位:用溢出的位补上空缺
带进位位:移出的位放到进位位,原进位位补上空缺
两个定点小数进行加减法时,需要先转换为补码
定点小数补码的加法:从最低位开始,按位相加(符号位参与运算),并往更高位进位。
定点小数补码的减法:被减数不变,减数全部位按位取反,末位+1,减法变加法。从最低位开始,按位相加,并往更高位进位。
位拓展时,定点小数是在末尾添0,定点整数是在符号位后填0
小数补码加法和整数一样,从最低位开始,按位相加(符号位参与运算),并往更高位进位。
小数补码减法和整数一样,被减数不变,减数全部位按位取反,末尾加1,减法变加法。从最低位开始,按位相加,并往更高位进位。
强制类型转换
无符号数与有符号数:不改变数据内容,改变解释方式
长整数变短整数:高位截断,保留低位
短整数变长整数:符号扩展
数据的存储和排列方式
多字节数据在内存里一定是占连续的几个字节
01234567H中,最高有效字节(MSB)01,最低有效字节(LSB)67。
大端方式:01H 23H 45H 67H
小端方式:67H 45H 23H 01H
边界对齐
现代计算机通常按字节编址,每个字节对应一个地址。通常也支持按字、半字、字节寻址。设存储字长为32位,一个字=32bit,半字=16bit,每次访存只能读写1个字。
边界对齐方式中,访问一个字/半字都只需一次访存
边界不对齐方式中,访问一个字/半字可能要两次访存
浮点数
表示
组成
阶符、阶码(反映浮点数的表示范围)、数符和尾数(反映浮点数精度)
阶码反映了浮点数的表示范围和小数点的实际位置,尾数的数值部分的位数反映浮点数的精度。
阶符的运算相当于对尾数进行算数移位
规格化
规定尾数的最高数位必须是一个有效值
左规:尾数算数左移1位,阶码减1。直到尾数最高位是有效位。
右规:当浮点数运算的结果尾数出现溢出(双符号位为0或1)时,将尾数算数右移1位,阶码加1。
采用双符号位,当溢出发生时,可以挽救。更高的符号位是正确的符号位。
用原码的表示的尾数规格化:规格化的原码尾数,最高的数值位一定是1.正数时,最大值为0.1111...,最小值为0.100000.尾数的表示范围为1/2《M《。
负数时,最大值为1.100000.,最小值为1.1111111.尾数的表示范围为-()《M《-1/2。
用补码的表示的尾数规格化:规格化的补码尾数,符号位与最高位数值位一定相反。正数时,最大值为0.1111...,最小值为0.100000.尾数的表示范围为1/2《M《。
负数时,最大值为1.0111111.,最小值为1.000000.尾数的表示范围为-《M《-1/2+。
超出最大负数和最小正数,当作机器0,超出最大正数和负数,抛出上溢异常。
IEEE754标准
尾数用原码表示,阶码用移码表示
移码=真值+偏置值
偏置值一般取2n-1,此时移码=补码符号位取反
阶码真值=移码-偏移量
尾数部分隐含最高位1
短浮点数真值为
长浮点数真值为
单精度最小绝对值位E=1,M=0,最大绝对值E=254,M=1.11111
双精度最小绝对值位E=1,M=0,最大绝对值E=2046,M=1.11111
当阶码E全为0时,尾数不全为0时,表示非规格化小数。+-(0.xxxxxx)隐含最高位变为0,阶码真值固定位-126
阶码E全为0,尾数M全为0时,表示真值+-0
阶码E全为1,尾数M全为0时,表示无穷大
阶码E全为1,尾数M不全为0时,表示非数值“NAN”
运算
加减运算的步骤为对阶、尾数求和、规格化、舍入和溢出判断
加减运算
对阶:小阶向大阶看齐
尾数相加
规格化:出现类似0.00114514*10,需要左规,阶数-1.出现类似99.114514,需要右规,阶数+1.
舍入:若规定只能保留几位有效尾数,则进行舍入。舍入规则有多种,如直接砍掉,砍掉部分非0,则入1,四舍五入等。
判断溢出:若规定阶码不能超过2位,则运算后阶码超出范围,则溢出。尾数溢出未必导致整体溢出。
强制类型转换
无损:char-int-long-double、float-double
有损:int-float(可能损失进度,float尾数的数值位有1+23位)、float-int(可能会溢出,也可能损失精度,比如小数转整数)
Int范围为-,float的范围为
算数逻辑单元
一位全加器
最基本的加法单元,输入两位加数和地位的进位(三个输入),输出和以及高位的进位(两个输出)
本位和S=Ai异或Bi异或Ci-1
本位向高位的进位Ci=AiBi+(Ai异或Bi)Ci-1
串行加法器
只设一个全加器的加法器,串行进位
一位全加器+进位触发器,只能一位一位加
并行加法器
由若干个全加器构成,使用先行进位提高加法器的运算速度
计算速度取决于进位产生和传递的速度
串行进位的并行加法器,把n个全加器串接起来,就可进行两个n位数的相加。串行进位又称为行波进位,每一级进位直接依赖于前一级的进位,即进位信号是逐级形成的。
第i位向更高位的进位Ci可根据被加数,加数的第1-i位,再结合C0即可确认。
ALU
一种组合逻辑电路,能够进行多种算数运算和逻辑运算
基本逻辑运算:与和或
与:A·B
或:A+B
与非:
或非:
异或:A+B
非: