《计算机原理与系统结构》学习系列——计算机的算数运算(上)

news2024/10/4 20:11:57

系列文章目录


目录

  • ALU
  • 行波进位加法器
  • 超前进位加法器
  • 整数运算
  • 加减法
  • 乘法
  • 无符号数相乘
  • N位乘法数的工作流程
  • N位乘法器改进:硬件资源
  • 更快速的乘法 
  • MIPS中的乘法
  • 除法 
  •  32位除法器流程
  • 除法器改进 
  •  更快速的除法
  •  MIPS中的除法
  • 总结

ALU

 ALU功能:对a,b(0,1)完成

  • 算数运算
  • 逻辑运算

行波进位加法器

上图为一位ALU,32个一位ALU组合成为32位ALU。低位的进位输出指向高位的进位输入,最低位的进位输入用于控制减法,这种直接连接1位进位的加法器称为行波进位加法器

超前进位加法器

进位速度制约了加法的速度,32位ALU的行波进位方式在每次进位时都要通过与门、或门各一次,共产生64个门延迟

使用超前进位加法器,通过将进位分成4位一组,抽象成每组进位,实现加法器的并行执行

具体原理比较复杂,结论:要执行n位加减法,求出n是4的几次方并向上取整,在乘二加1,就是超前进位的门延迟


整数运算

加减法

例子:5+6

三个输入:A,B,CarryIn

两个输出:Sum,CarryOut

CarryIn(i+1) = CarryOut(i)

减法就是加上数的负值

例子:7-6=7+(-6)

如果结果超出表示范围就会发生溢出

  • 两个正数相加,结果为负,发生溢出
  • 两个负数相加,结果为正,发生溢出
  • 正数和负数相加,永远不会溢出
  • 其他情况,都未发生溢出

行波加法器中加减法

Cn 与 Cn-1 进行异或逻辑操作,以判断是否有溢出

5+6:

 5-6:


乘法

无符号数相乘

例子:A=1101  B=1011 

乘积的位数是乘数和被乘数之和 

N位乘法数的工作流程

用4位乘法做例子

迭代

步骤

乘数

被乘数

积product

0

初始值

001

0000 0010

0000 0000

1

1:1→积=积+被乘数

0011

0000 0010

0000 0010

2:左移被乘数

0011

0000 0100

0000 0010

3:右移乘数

000

0000 0100

0000 0010

2

1:1→积=积+被乘数

0001

0000 0100

0000 0110

2:左移被乘数

0001

0000 1000

0000 0110

3:右移乘数

000 0

0000 1000

0000 0110

3

1: 无操作

0000

0000 1000

0000 0110

2:左移被乘数

0000

0001 0000

0000 0110

3:右移乘数

000 0

0001 0000

0000 0110

4

1:无操作

0000

0001 0000

0000 0110

2:左移被乘数

0000

0010 0000

0000 0110

3:右移乘数

0000

0010 0000

0000 0110

时间效率 

N位乘法器改进:硬件资源

注意到每进行一次迭代,乘积从32增长到64,乘数位从32减少到0,合起来永远是64,可以拼接成为一个64位乘积/乘数寄存器让积相对于被乘数右移(而不是乘数相对于积左移),ALU从64位缩减到32位,改进后硬件规模减小,每一步仅占一时钟周期

更快速的乘法 

速的乘法运算主要的思想是为乘数的每一位提供一个 32 位的加法器: 一个用来输入被乘数和 一乘数位相与的结果 ,另一个是上一个加法器的输出
 一种直接 的方法是将每个右边的加法器的输出作为左边加法器的输入,形成一个 高 32 的加法器栈 。一种替换的方法是将 32 个加法器组织成一个并行树

MIPS中的乘法

IPS 提供了 一对单独的 32 位寄存器来容纳 64 位的积,称为 Hi 和 Lo 。 为了产生正确的有符号积和无符号积, MIPS 提供了两条指令:乘法 (mult) 和无符号乘法 (multu) 。 为了取得 32 位的整数积,程序员需要使用 mflo 指令 (move from lo) 。 MIPS 汇编器为乘法生成了 一条伪指令,它使用了 三个通用寄存器,用 mflo 和 mf肛指令将积送入指定的寄存器 。


除法 

  • 除数判0 
  • 除法步骤
    • 除数≤被除数
      • 商添加1,执行减法
    • 否则
      • 商添加0,从被除数中提取下一位
  • 恢复余除法:直接执行减法,结果小于0后再把除数加回去

 32位除法器流程

在任何情况下,整数除法都要满足被除数=除数×商+余数

计算-7/2时,可以商-3余1,也可以商-4余1

为了避免这种差异,规定余数和被除数同号,即商-3余-1 

硬件

被除数一开始存在64位余数寄存器中,除数从64位除数寄存器的高32位逐次右移到低32位,每次迭代,向32位商寄存器的最低位添加0或1 ,执行33次迭代

 例子:7/2

除法器改进 

注意到每轮迭代,余数(一开始是可以看作被除数)位数从64减少到32,商的位数从0增加到32合起来总是64位,可以拼接成一个64位余数/商寄存器,最后余数就是整个除法的余数

 更快速的除法

与乘法相同,摩尔定律同样适用千除法 。 我们使用许多加法器来加速乘法,但这一招对除法却不管用 。 因为除法算法每次迭代前需要知道减法结果的符号,而乘法却可以立刻生成 32个部分积

有一些技术可以每步生成不仅一个商位 。 如被称为 SRT 的除法算法,通过查找表的方法来尝试猜测每步儿个商位,其中查找表基于被除数和余数的高位部分来进行 。 它依赖后面的步骤来修正错误的猜测 。 如今典型值是 4 位 。 算法的关键是猜测要减的值 。 对于二进制算法,只有一种选择 。 可用余数的 6 位和除数的 4 位来索引查找表,从而决定每步的猜测 

这个快速算法的正确性取决于查找表中的值是否合适

 MIPS中的除法

为了处理有符号整数和无符号整数, MIPS 采用两条指令:除 (div) 和无符号除 (di 一 vu) 。 MIPS 汇编器允许除指令使用三个寄存器,且采用 mflo 和 mfhi 指令将运算结果放入指 定的通用寄存器


总结 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2188620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9-贪心算法

参考:代码随想录 题目分类大纲如下: 贪心算法理论基础 什么是贪心? 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 贪心的套路(什么时候用贪心) 贪心算法并没有固定的套路,说白了…

huggingface 数据/模型下载

使用huggingface CLI下载数据、模型 1. 介绍2. 使用1)下载、安装2)设置环境变量3)登录 Hugging Face 帐户4)模型下载 3. 附:使用 git 下载方法 1. 介绍 huggingface_hub Python包附带了一个名为huggingface CLI的内置…

界星空科技漆包线行业称重系统

万界星空科技为漆包线行业提供的称重系统是其MES制造执行系统解决方案中的一个重要组成部分。以下是对该系统的详细介绍: 一、系统概述 万界星空科技漆包线行业称重系统,是集成在MES系统中的一个功能模块,专门用于漆包线生产过程中的重量检…

《Linux从小白到高手》理论篇:Linux的时间管理运行级别启动过程原理详解

List item 本篇将介绍Linux的时间管理&运行级别相关知识,并将深入介绍Linux的启动过程及原理。 Linux的时间管理 Linux 时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称 RTC)时钟。系统时…

THREE.JS Blinn–Phong反射模型 高光shader

文章目录 参考效果核心全部代码更新: 多点光(使用结构体)TODO: 新增灯光更新着色器 (threejs也是这么做的 所以动态灯光开销颇大(动态visible不需要重新构建着色器)) 参考 Blinn–Phong reflection model 效果 平滑着色平直着色…

无IDEA不Java:快速掌握Java集成开发环境

IntelliJ IDEA是一种强大的Java集成开发环境,是Java开发人员的首选工具之一。本文将介绍IDEA的基本使用方法和常用功能,以帮助初学者快速上手。 安装和配置 首先,需要下载并安装IntelliJ IDEA。在安装完成后,需要配置JDK&#xff…

OpenAI 再现变革风暴!-- 高管离职潮与营利化转型背后的深层次变动

OpenAI 正处于历史的转折点。作为全球最知名的 AI 公司之一,OpenAI 一直以来以其领先的人工智能技术和开放的研发精神吸引了大量的关注与支持。然而,近期的一系列高管离职以及转型为营利性公司的计划,引发了外界的广泛讨论。本文将深入探讨这…

使用Java调用GeoTools实现全球国家矢量数据入库实战

目录 前言 一、相关数据介绍 1、无空间参考的数据 2、有空间参考的数据 3、空间信息表物理模型 二、全球国家空间数据入库 1、后台实体类图 2、后台实体对象关键代码 三、时空数据入库实践 1、读取无空间参考数据 2、入库成果及注意事项 四、总结 前言 在当今世界&…

【LuBase低代码框架】动态数据源服务介绍

功能介绍: 可以通过配置一个QueryOption对象或者一条select 查询语句,返回当前应用下的数据,避免后端写代码开发。 使用方法: 1. 动态服务需要通过/invoke/datasource和/invoke/datasourceNoRight 地址发起调用 2. 可使用参数…

Gaussian-splatting 项目环境配置笔记(Win11)

如果你是配置别的项目的过程中用到了3D GS相关的内容,然后这部分内容环境一直配不好,也可以跟随这个博客配一下环境,配完后起码3D GS部分就搞定了。 文章目录 概述项目链接:VS2019直接下载链接CUDA不同版本下载链接安装Condasetup…

Java开发每日一课:21世纪最流行的语言,Java为什么这么火?

自从进入21世纪以来,Java在TIOBE语言排行榜一直稳居前2名,占有率一直在12%以上。从国内各大招聘网站的岗位需求和培训班的畅销课程上看,Java一直稳居榜首,可以说Java是21世纪最流行的语言。 作为一个1995年才推出的语言&#xff0…

JVM(HotSpot):字符串常量池(StringTable)

文章目录 一、内存结构图二、案例讲解三、总结 一、内存结构图 JDK1.6 JDK1.8 我们发现,StringTable移入了Heap里面。所以,应该想到,StringTable将受到GC管理。 其实,1.6中,在方法区中的时候,也是受GC管…

01 排列选票

题目&#xff1a; 桶排序&#xff1a; #include<bits/stdc.h> using namespace std; #define M 100005 int a[M];int main() {int n,m;cin>>n>>m;for(int i1;i<m;i){int temp;cin>>temp;a[temp];}for(int i1;i<n;i){for(int j1;j<a[i];j){co…

OpenVINO基本操作流程

环境配置&#xff1a; conda env list:可以查看有哪些环境 conda activate intel:启动某个环境 pip list&#xff1a;可以查看此环境下都下载了哪些软件包 from openvino.inference_engine import IEcore#从OpenVINO推理引擎中导入IECore类 import numpy as np import cv2 1&…

基于GitLab 的持续集成环境

一.技术基础 Gitlab: 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务 GitRunner:用于运行您的作业并将结果发送回GitLab。它与GitLab CI一起使用&#xff0c;GitLab CI是GitLab随附的开源持续集成服务&…

SpringCloud微服务搭建实战

文章目录 前言Nacos配置和项目结构图示数据库和脚本准备seata数据库transaction_database数据库 一、Spring Boot、Spring Cloud、Sping Cloud Alibaba二、seata安装seata配置修改Nacos新建配置文件seata-server.properties 三、创建Microservice-Project项目四、创建api-modul…

【HTML5】html5开篇基础(5)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

使用MTVerseXR SDK实现VR串流

1、概述​ MTVerseXR SDK 是摩尔线程GPU加速的虚拟现实&#xff08;VR&#xff09;流媒体平台&#xff0c;专门用于从远程服务器流式传输基于标准OpenXR的应用程序。MTVerseXR可以通过Wi-Fi和USB流式将VR内容从Windows服务器流式传输到XR客户端设备, 使相对性能低的VR客户端可…

芯片公司产品简介

台湾新唐科技:ARM内核-nuvoTon stc&#xff08;宏晶&#xff09;&#xff1a;STC 8051 系列、STC32 8051系列、STC32 ARM系列 兆易&#xff1a;Arm Cortex-M内核和RISC-V内核 意法&#xff1a; 乐鑫科技&#xff1a; MCU厂家 GPU厂家 MCU与MPU 引用链接&#xff1a; http://…

AutoCAD学习

AutoCAD学习 最基本操作 命令用途说明空格键确认键也可以是重复刚才的命令回车键也是确认键鼠标右键也可以选择确认LINE、L直线命令绘制直线DLI线性尺寸标注DIMLINEAR鼠标滚轮滚动放大缩小视图界面鼠标中键按住移动视图DAL对齐线性标注DIMALIGNED F8 正交模式ORTHOMODE Tab 切换…