结合了课上老师(中南民族大学)提供的ppt和自己的手写笔记
前言
计算机的主要功能是对数据信息进行加工处理--算术运算(四则运算)和逻辑运算(无进位的位运算)
3.1计算机中的运算
3.1.1 C语言中的位运算--按位进行 p57
3.1.2C语言中的逻辑运算 p58
3.1.3C语言中的移位运算“<<和>>”
·左移运算操作符对应汇编指令中的逻辑左移--将高位移出,低位补零
·右移运算操作符对应根据无符号和有符号的类型分别对应逻辑右移(--将低位移出,高位补零)和算术右移指令(--高位不是直接补零,而是填充原数据的符号位)
·每左移一位,数据扩大一倍;每右移一位,就缩小一半
3.1.4C语言中的算术运算 p59-p60
3.2定点加减法运算
3.2.1补码加减法运算方法
·补码加法
【x】补+【y】补=【x+y】补
·计算过程
1)先将真值x和y转换成补码数据表示
2)利用补码加法公式列竖式--符号可以直接参与运算
3)得到【x+y】补,可求x+y值
4)当符号位进位为模值时应该舍去
·补码减法
和加法相似,不同是要多求一个【-y】补,且【x-y】补=【x】补+【-y】补=【x】补 -【y】补
---【-y】补就是对【y】补再求一下补码
---可以用整数运算来验算
3.2.2溢出与检测
·溢出:运算结果超出数据类型的表示范围
1 两个正数相加,结果变成了负数
2 两个负数相加,舍去进位,变成了正数
***模数舍弃不等于运算溢出
***由于计算机字长是确定的,能表示的数据范围有限,∴溢出现象是不可避免的
·溢出检测
--只有两个符号相同的数相加时才会有溢出
3.2.3加减法的逻辑实现
·手动加法运算通常是从低位开始逐位相加,并将相加过程中产生的进位信号向高位运算传递
1.一位全加器--有两种形式(一个有共享,一个没有;硬件开销不同)
(一行就是一级,每行取最大,整体取最大,得延迟时间)
·半加器(HA电路):没有进位输入,时间延迟为3T
2.多位串行加法器(行波进位加法器)---单符号位溢出检测
高位得全加器必须等低位进位后才能运算
3.可控加减法器(CAS)--单符号位溢出检测
·进位输出仅与最低位进位输入C0有关
·位数越长,进位链电路复杂度越高
·通常按照4位一组进行分组运算
4.先行进位加法器(CLA)
5. 4位先行进位快速加法器
6.成组进位
***比较时机器是通过做减法运算进行判断的
3.3定点乘法运算
3.3.1原码一位乘法
:n位原码乘法包括n个位积,也就是每次只利用乘数y中的一位来计算位积,最终需要将n个位积全部累加起来得到乘积。
(还有二位乘法)
(1)乘积的符号
·等于两个操作数符号间的异或
(2)乘积的数值
·由被乘数和乘数的绝对值之积求得 |P|=|x|×|y|
·两个n位的数相乘,乘积结果是2n位的
·二进制手动乘法的运算过程
·算法流程
·例题
1)用循环累加与算术右移操作实现了原码一位乘法
2)见课本
3)两个n位数参加乘法运算要进行n次加法和n次移位操作
4)加法运算可能有局部溢出
3.3.2补码一位乘法/Booth算法
(1)乘法采用单符号位,末位增设附加位Yn+1,初值为0
(2)利用Yn+1与Yn的差值判断各步的具体运算:
差值为1,累加上【x】补
差值为0,累加上0
差值为-1,累加上【-x】补
累加完成后需要进行算术右移的操作,初值为0
(3)按照上述算法进行n+1次累计操作,n次右移操作即可完成乘积运算
·例题
3.3.3阵列乘法器
·原码
·补码
3.4定点除法运算--数值用绝对值,符号单独处理
:将n位数的除操作转换成若干次“加、减及移位”的循环操作来实现
3.4.1原码的一位除法
***阵列除法器时间复杂度O(n的平方),除法是O(n)
3.5浮点运算
·(1)阶码和尾数采用补码表示的浮点加减运算
·运算步骤
·溢出判断
·(2)浮点乘法运算
·(3)浮点除法运算
3.6运算器
1.定点运算器组成
(1)算术逻辑运算单元(ALU)
·算术、逻辑运算电路,纯组合逻辑电路
·产生运算结果及各种状态标志
(2)通用寄存器组(堆)
·暂存源数据和运算结果
·状态寄存器、变址寄存器、堆栈指示器等
(3)输入、输出数据选择控制
·选择参加运算的数据送给ALU
(4)内部总线
·连接各部件,进行数据传送
2.定点运算器的基本结构(运算器与总线结构)
·单总线,2个锁存器,3个时钟周期
·双总线,1个锁存器,2个时钟周期
·三总线,0个锁存器,1个时钟周期
·总线越多,性能越好
3.ALU设计
构造ALU的基本单元
·4功能ALU
·寄存器组
4.
4.浮点运算器
·浮点运算过程较长,性能较差
·对阶、尾数求和、规格化、舍入、溢出判断
改造成4段浮点流水线
本章小结