第六章 计算机的运算方法
1.前情提要
真值为正,原码补码反码相同
真值为负,符号位不变,数值部分补码求反加一,反码求反
移码:补码符号位求反
关于0:原码和反码正负零不等,补码和移码正负零相等
- 例1:机器字长16位,求原码补码反码无符号数表示范围
解:无符号数:0 ~ 216-1 原码、反码:-215-1 ~ 0,0 ~ 215-1 反码:-215~215-1
2.小数浮点表示
阶符 阶码数值部分 | 数符 尾数数值部分
小数点位置 数是多少
阶码m位,尾数n位,数的表达通式N=S×r j
规格化:尾数没有前导0
- 例1:8位阶码,24位尾数,基值为2,求原码和补码规格化下表示范围
原码:
最大正数:0,1111111;0,111...1
最小正数:1,1111111;0,100...0
最小负数:0,1111111;1,111...1
最大负数:1,1111111;1,100...0
补码:
最大正数:0,1111111;0,111...1
最小正数:1,0000000;0,100...0
最小负数:0,1111111;1,100...0
最大负数:1,0000000;1,011...1
3.定点运算
移位:
算术移位符号位不变,逻辑移位符号位跟着一起移
整数移位补0,负数原码补0,反码补1,补码左移补0,右移补1
加减法:
用补码算,位数算得多出来扔掉前一位
溢出判断:
一位符号位:两数正负号不同不会溢出,两数符号位相同结果符号位与其不同为溢出;
两位符号位:两位数字不一样为溢出
乘法:
原码乘法:符号位和数值部分分开算,可分为一位乘和两位乘。
一位乘是每次只看一位,加完被乘数的0倍或1倍后右移1位,作n次加法,n次移位,逻辑右移;
两位乘看两位,分别处理00,01,10,11的情况后右移2位,作n/2+1次加法,n/2次移位,算术右移。
补码乘法:Booth算法,n次移位,最多n+1次加法
4.浮点运算
加减法
1)对阶
2)尾数运算
3)左规/右规
原码规格化小数部分最高位为1,补码小数部分最高位与符号位相反。
右规:结果溢出
4)判断溢出
乘法
1)阶码运算,x*y,x阶码用移码,y阶码用补码
5.并行加法器和进位链
第七章 指令系统
比上一章阳间多了
1.指令格式
操作码+地址码
例1:指令字长16位,地址码6位,求:
1)零地址指令M种,一地址指令N种,则二地址最多几种?
二地址操作码16-6*2=4位,24=16,16-M-N
2)扩展操作码(操作码位数随地址数减少而增加)下二地址最多几种?
二地址操作码16-6*2=4位,24=16,去掉1种表示一地址,还剩15种
3)扩展操作码下二地址P条,零地址Q条,一地址最多几种?
二地址、一地址、零地址操作码分别为4、10、16位,二地址操作码每减少一个,就可以多构成26条一地址,假设一地址R条,一地址最多(24-P)*26条,零地址最多[(24-P)*26-R]*26条,上式值为Q,反解R即可。