Integer Arithmetic

  • 1. ALU是什么
  • 2. 加法(全加器)
    • 2.1. 如何产生一位相应的数据
    • 2.2. 如何生成全部的数据
    • 2.3. 问题
    • 2.4. 解决问题:先行记录加法器(CLA)
    • 2.5. 进一步的解决方法:部分先行加法器
    • 2.6. 加法溢出
      • 2.6.1. 判定溢出
  • 3. 减法计算
  • 4. 乘法操作
    • 4.1. 乘法操作的实现
    • 4.2. 问题:积的补码不等于补码的积
    • 4.3. Booth’s算法
  • 5. 除法操作
    • 5.1. 除法的情况分类
    • 5.2. 除法的实现
      • 5.2.1. 除法的机器级实现
      • 5.2.2. 除法的规则
    • 5.3. 第一种除法的过程
      • 5.3.1. 机器如何确定是否够减并且可以保证不够减的时候可以回溯呢?
      • 5.3.2. 实例
    • 5.4. 第二种除法的算法
      • 5.4.1. 除法计算结束后的修正
    • 5.5. 除法器

1. ALU是什么

  1. ALU is that part of the computer that actually performs arithmetic and logical operations on data(ALU是计算机使用数学或者逻辑处理数据的部分)

    1. Data are presented to the ALU in registers, and the results of an operation are stored in registers(数据被存储在ALU的寄存器中,运算的结果也被存储到寄存器中)
    2. The flag values, also stored in registers, are set as the operation result(标记值也存储在寄存器中并且被标记为运算结果)
    3. The control unit provides signals that control the operation of the ALU and the movement of the data into and out of the ALU(控制单元提供控制ALU运算以及需要移入或者移出ALU的数据的信号)

2. 加法(全加器)

  1. 输入x,y,ci-1

2.1. 如何产生一位相应的数据

  1. Si = Xi ⊕ Yi ⊕ Ci-1
  2. Ci = XiYi + Ci-1Xi + Ci-1Yi(乘法是and,加法是or)
  3. 每一个carryout:2ty的延时
  4. 每一个sum:6ty的延时

2.2. 如何生成全部的数据

  1. 将全加器串联起来即可。

  1. Sn = 2(n-1)+3 = 2n+1

    • 在等待C来的时候,已经提前把Xi和Yi进行计算。
    • 那么n=1的时候,为什么计算出来是3,而实际是6?因为需要n>=3的时候才能满足这个事情。2(n-1)>=3才行。
    • S1 = 6,S2 = 6,S3 = 7;S1和S2是同时出来的,只要C过去了就行。

2.3. 问题

  1. 速度比较慢。
  2. 和数据量成线性相关。

2.4. 解决问题:先行记录加法器(CLA)

  1. 定义

    • Pi = Xi + (或)Yi
    • Gi = Xi & Yi
  2. 新的计算方法:(并行运算)
    • 所有的Pi、Gi都是可以同时计算的,代价是:1ty
    • 求出所有的Ci,代价:2ty
      • 先计算所有的与,多个与也可以一次计算
      • 再计算所有的或,一次计算。
    • 求出所有的Si,代价:3ty
      • 就是原来的异或。只需要再做一次就可以
  3. P是传播,G是生成。

2.5. 进一步的解决方法:部分先行加法器

  1. 最后算出的是最前面的加法部分
  2. 最左边是3 = 1 + 2
  3. 然后中间两个+2:之前P和G都算好了。
  4. 最后一步5 = 2 + 3
    • P和G已经算好了
  5. 多一个加2

2.6. 加法溢出

  1. 按照钟表来想,拨过了头。
  2. 两个正数相加不可能暨移除,并且结果是个正数。

2.6.1. 判定溢出

第一种情况

Cn Cn-1 Xn Yn Sn
1 0 1 1 0
0 1 0 0 1

第二种情况

Xn Yn Sn
0 0 1
1 1 0
  1. 只要有两位及以上位均为1则产生了进位。

3. 减法计算

  1. X - Y = X + (-Y)

  1. Sub是控制线,是1则为减法,是0则为加法。
  2. Sub为1时,会走下面的路,也就是取反。
  3. Sub的另一端连接到C0的位置上。

4. 乘法操作

  1. 这时候出现问题:纵向相加,加法的时候会移位。
  2. 部分积(partial product)
  3. 将加法器左移,可以变成部分积右移,只留下来最高部分来进行加。

  1. 高位补充0,小数点在最右边
  2. 小数相除小数点在左边?

4.1. 乘法操作的实现

  1. Y在有意义的变短,有一部分就已经不需要使用了。
  2. 所有Y和product是此消彼长的。
  3. 长的整体无论红黑都是部分积。

4.2. 问题:积的补码不等于补码的积

  1. 在加法中很顺利的原码在这里是不顺的。
  2. 问题解决:如何用补码来计算

4.3. Booth’s算法

  1. Xc * Yc = X * (-Yn * 2n-1 + Yn-1 * 2n-2 + … + Y1*20)
  2. 算法核心:2k = 2k+1 - 2k
  3. 将算法核心带入1中的式子:= X * ((Yn-1 - Yn)*2n-1 + (Yn-2 - Yn-1)*2n-2 + … + (Y1 - Y2)*21 + (Y0 - Y1)*20)
    • Y0 = 0
    • 这样子也就会满足原来的阶乘的形式。

算法内容

算法问题

  1. 在高位补充的时候应该是符号扩展。
  2. -7:1001;-6:1010

5. 除法操作

5.1. 除法的情况分类

  1. -7/3 = -2…-1
  2. 被除数需要进行符号扩展,被除数减去除数。
  3. 商先产生高位,这样子的资源和性能依然不够经济。
  4. 余数是n位,被除数是n位和被除数的2n位是一致的。

5.2. 除法的实现

  1. 最开始,除数放到商的位置上,而余数的位置上全是符号扩展位

  1. 每一次左移。

    • 如果够减的话,就减去除数写入1
    • 如果不够减的话,就直接写入0

5.2.1. 除法的机器级实现

5.2.2. 除法的规则

  1. 如何判断够还是不够?余数的绝对值靠近0而不越过0。

    • 负数除以正数的余数是负数
    • 正数除以负数的余数是正数
    • 负数除以负数的余数是负数

5.3. 第一种除法的过程

  1. 首先对于符号位进行扩展,并且存储到分别的余数部分和商部分。
  2. 左移余数和商,判断余数存储器是否足够大。
    • 如果足够大,那么就做加法或者减法并且在商的右侧添加一个1
    • 如果不足够大,那么直接在商的右侧直接加上一个0
  3. 重复以上的两个步骤。
  4. 最后全部计算结束后的注意点:
    1. 如果除数和被除数的符号相反,那么商需要取其补码。
    2. 余数被存储在余数寄存器中。

5.3.1. 机器如何确定是否够减并且可以保证不够减的时候可以回溯呢?

  1. 先减去再加上
  2. 本来应该先减去再加变成

5.3.2. 实例



  1. 最后是减去divisor
  2. 商是左移加一

5.4. 第二种除法的算法

  1. 首先将被除数进行符号扩展,并且分别将其存到余数和商的寄存器中。
  2. 如果被除数和除数的符号相同,那么进行减法。如若不然进行加法。
    • 如果余数和除数的符号相同,则Qn=1,不然Qn=0
  3. 根据余数和除数的符号关系来决定如何进行计算。
    • 如果新得到的余数和除数符号相同,那么我们给商加上一个1,不然加上一个0。
  4. 重复上述操作

5.4.1. 除法计算结束后的修正

  1. 对商的修正,如果商是负的就加上1
  2. 对除数的修正,如果符号不同的,如果除数和被除数符号是否相同,如果相同,我们需要减去除数。
  3. 还要看余数是否和除数相同,如果相同要进行处理

5.5. 除法器

COA-19-第四章 Integer Arithmetic相关推荐

  1. [云炬创业基础笔记]第四章测试19

    第四章测试 I19.单选题(1分) 答题卡 19/24 发现问题的能力对于创业者来说很重要,它有助于创业者发现社会中的痛点.0 正确 错误 本题得分:1 正确答案: A 已提交

  2. 第四章 ContextCapture 19 空三控制点平差

    第四章 ContextCapture 19 空三控制点平差 一.检查空三成果 空三结束后,会生成连接点云,再三维中,可以观察生成的结果,根据点云的状态,判断空三是否正常. 在这个位置,可以导出空三报告 ...

  3. 19年8月 字母哥 第四章 常用web开发数据库框架 不要用公司网络加载不出来 用热点!!!

    第四章 常用web开发数据库框架 4.1.整合Spring JDBC操作数据 4.2 Spring JDBC多数据源的实现 4.3.Spring JDBC JTA实现分布式事务 4.4.ORM主流框架 ...

  4. c command语言学例子,语言学第四章

    <语言学第四章>由会员分享,可在线阅读,更多相关<语言学第四章(3页珍藏版)>请在人人文库网上搜索. 1.Chapter 4:SyntaxI. Decide whether e ...

  5. 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结

    Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...

  6. matlab高级数据结构,Matlab讲义-第四章Matlab语言数据结构1-10.pdf

    Matlab讲义-第四章Matlab语言数据结构1-10.pdf 第四章第四章 Matlab语言基础语言基础 Matlab语言程序简洁.可语言程序简洁.可 读性很强而且调试十分容易.读性很强而且调试十 ...

  7. 20190827 On Java8 第十四章 流式编程

    第十四章 流式编程 流的一个核心好处是,它使得程序更加短小并且更易理解.当 Lambda 表达式和方法引用(method references)和流一起使用的时候会让人感觉自成一体.流使得 Java ...

  8. 《Java语言程序设计与数据结构》编程练习答案(第四章)(二)

    <Java语言程序设计与数据结构>编程练习答案(第四章)(二) 英文名:Introduction to Java Programming and Data Structures, Comp ...

  9. 数据结构1800试题(第四章)

    第四章       串 一.选择题 1.下面关于串的的叙述中,哪一个是不正确的?(    )[北方交通大学 2001 一.5(2分)] A.串是字符的有限序列          B.空串是由空格构成的 ...

最新文章

  1. R语言ggplot2绘制平滑曲线的折线图简单小例子
  2. 【Linux 操作系统】 Secure CRT 终端配置 -- 配置语法高亮 光标 和 字体
  3. C# 使用FileSystemWatcher来监视文件系统的变化
  4. jQuery formValidator表单校验代码生成器ver1.0
  5. 交换机端口灯闪烁频率一样_思创易控cetron-新品S2024GE 24口全千兆非网管交换机即将上市!...
  6. 【Python】Pandas高效加载JSON文件
  7. java中gc触发的条件,各种gc触发条件统计
  8. 史密斯预估器matlab仿真,(毕业论文)史密斯预估器设计.doc
  9. RDD Join 性能调优
  10. android 全局 窗口,学习笔记:WindowManager显示Android全局悬浮窗口
  11. 疯狂软件对Oracle放弃Java EE的看法
  12. 电梯设计需求调研报告
  13. iptables端口转发
  14. 【渝粤教育】电大中专药理学基础 (2)_1作业 题库
  15. 军团指挥官(权限题)
  16. mysql触发器new old用法详解
  17. 物理机、虚拟机、容器的比较(二)
  18. 盯上年轻人的今日头条,重新以内容出发还有多少可能?
  19. html怎么做一个动态广告图,用CSS3实现广告的展示动画特效
  20. Linux安装MySQL(源码安装)

热门文章

  1. 如何利用鲍伊-迪克测试法测试饱和蒸汽?以确保适当灭菌消毒
  2. UEFI启动是什么意思 UEFI启动对比Bios启动优势在哪里
  3. 南航829数据结构单链表学习
  4. 解决chrome插件安装时出现的“程序包无效”问题信息:程序包无效。
  5. Nodejs框架分享
  6. 2021年B证(安全员)考试题及B证(安全员)答案解析
  7. 【多目标优化求解】基于matlab飞蛾扑火算法 (NSMFO)求解多目标优化问题 【含Matlab源码 2312期】
  8. 数分项目《泰坦尼克》——Task2
  9. Python 中的位运算-基础知识
  10. python基础(四)python中的位运算