以下除特殊说明外均为32位数的运算

1.加法运算

  A   +   B    =   C

无符号整数加法和有符号整数加法均采用以下方案进行操作

用到的寄存器与初始化内容:

32位加数寄存器--------初始化为加数

32位被加数寄存器 ----初始化为被加数

32位和寄存器 ----------全部置零

操作方案如下:

  将加数寄存器和被加数寄存器按位对齐,每组对应位分别进行以下操作:

放在一起就是:(因32位画出来过于繁杂,这里的图示采用了8位)

在此基础上还要设置溢出判断,来表示这次运算是否发生溢出。

2.减法运算

  被减数   -   减数  =  差

  这里承用上面的加法运算单元。

  用A表示被减数,B表示减数。首先将B转换为其相反数即(-B)。然后进行A+(-B)的加法运算。同时也要设置一段逻辑电路判断减法运算是否发生溢出。

3.乘法运算

  被乘数  X  乘数   =   积

1>无符号整数乘法

  最早的解决方案:

所用到的存储器与初始化存储内容:

32位乘数寄存器--------初始化为乘法运算的乘数

64位被乘数寄存器 ----低32位填充为乘法运算的被乘数,高32位置零

64位积寄存器 -----------全部置零

用到的功能分别为:循环,无符号加法,移位。

执行结构图如下:

  改进后的解决方案:

所用到的存储器与初始化存储内容:

32位被乘数寄存器(简称A)------初始化为乘法运算的被乘数

64位积寄存器 (简称B)-----------高32位置零,用来存放乘积,低32位初始化为乘数

对于每次迭代:

  

2>有符号整数乘法

先把乘数和被乘数的符号位记下来,然后把乘数和被乘数转换成正数进行无符号乘法运算,运算结果再加上符号。

3>浮点数乘法

4.除法运算

  被除数   ÷   除数  =  商 ••••••余数

1>无符号整数除法

所用到的存储器与初始化存储内容:

32位商寄存器-----------全部置零

32位除数寄存器 -------填充32位除数

65位余数寄存器 -------左半部分置零,右半部分填充32位被除数

处理结构图:

2>有符号整数除法

跟上文有符号整数乘法一样,先保存除数、被除数符号,若两者符号异或为1,则商为负。

3>浮点数除法

<科普>CPU进行四则运算(加减乘除)的主流方法的更多相关文章

  1. 读书笔记:7个示例科普CPU Cache

    本文转自陈皓老师的个人博客酷壳:http://coolshell.cn/articles/10249.html 7个示例科普CPU Cache (感谢网友 @我的上铺叫路遥 翻译投稿) CPU cac ...

  2. linux下实现CPU使用率和内存使用率获取方法

    想获取一下目标机运行时linux系统的硬件占用情况,写了这几个小程序,以后直接用了. 方法就是读取proc下的文件来获取了. cpu使用率:    /proc/stat ,内存使用情况:     /p ...

  3. 性能测试分析过程(二)cpu 使用率过高的分析方法

    Linux 系统下 cpu 使用率过高的分析方法 1.通过 top 命令可以很明显查看出哪个进程耗cpu比较高 2. ps -mp 25147-o THREAD,tid,time\top -Hp pi ...

  4. <转>科普CPU Cache line

    转载于http://coolshell.cn/articles/10249.html CPU cache一直是理解计算机体系架构的重要知识点,也是并发编程设计中的技术难点,而且相关参考资料如同过江之鲫 ...

  5. linux下进程cpu占用过高问题定位方法

    背景 记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高 ...

  6. 转:关于安卓多线程while(true)方法占用CPU高的原因及其解决方法

    由于项目需要用到安卓多线程操作,结果开了四条线程,下载到平板一直很卡,CPU占用率暴涨.于是开始查找原因,发现是线程run()方法里的while(true)导致的, 下图是为解决时开启一条while( ...

  7. C#正则表达式引发的CPU跑高问题以及解决方法

    3月23日(周日)下午16:30左右,博客园主站负载均衡中的2台Web服务器CPU玩起了爬楼梯的游戏(见上图),一直爬到了接近100%.发现这个状况后,我们立即将这2台阿里云临时磁盘云服务器从负载均衡 ...

  8. [深度学习] Pytorch学习(二)—— torch.nn 实践:训练分类器(含多GPU训练CPU加载预测的使用方法)

    Learn From: Pytroch 官方Tutorials Pytorch 官方文档 环境:python3.6 CUDA10 pytorch1.3 vscode+jupyter扩展 #%% #%% ...

  9. [转载]查看基于Android 系统单个进程内存、CPU使用情况的几种方法

    转载自: http://www.linuxidc.com/Linux/2011-11/47587.htm 一.利用Android API函数查看1.1 ActivityManager查看可用内存. A ...

随机推荐

  1. .net基础概念

    .net基础概念 1.       .NET Framework 是支持生成和运行下一代应用程序和 XML Web services 的内部 Windows 组件..NET Framework 具有两 ...

  2. Chapter 04—Basic Data Management

    1. 创建新的变量 variable<-expression expression:包含一组大量的操作符和函数.常用的算术操作符如下表: 例1:根据已知变量,创建新变量的三种途径 > my ...

  3. 虚拟机中linux操作系统raid5(5块磁盘,3块做raid,2块做备份)配置流程及损坏磁盘的移除

    1.打开所要用的虚拟机,点击编辑虚拟机设置,点击硬盘,添加 2.一直点击下一步不做修改,直到最后完成 3.按照以上步骤添加5块磁盘 4.点击开启虚拟机,输入用户名root密码登录进去 5.进入虚拟机后 ...

  4. 机器学习十大算法总览(含Python3.X和R语言代码)

    引言 一监督学习 二无监督学习 三强化学习 四通用机器学习算法列表 线性回归Linear Regression 逻辑回归Logistic Regression 决策树Decision Tree 支持向 ...

  5. 堡垒机WebSSH进阶之实时监控和强制下线

    这个功能我可以不用,但你不能没有 前几篇文章实现了对物理机.虚拟机以及Kubernetes中Pod的WebSSH操作,可以方便的在web端对系统进行管理,同时也支持对所有操作进行全程录像,以方便后续的 ...

  6. 【Python成长之路】装逼的一行代码:快速共享文件【华为云分享】

    [写在前面] 有时候会与同事共享文件,正常人的操作是鼠标右键,点击共享.其实有个装逼的方法,用python的一行代码快速实现基于http服务的共享方式. [效果如下] [示例代码] 在cmd窗口进入想 ...

  7. MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

    目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...

  8. border-radius:50%和100%的区别

    border-radius 值类型-百分比 border-radius的值是百分比的话,就相当于盒子的宽度和高度的百分比. 我们知道在一个正方形内做一个面积最大的圆形,这个圆的半径就为正方形边长的一半 ...

  9. 你真的了解JSON吗?

    一.JSON——JavaScript Object Notation JSON 是一种语法用来序列化对象.数组.数值.字符串.布尔值和null .它基于 JavaScript 语法,但与之不同:一些J ...

  10. Beego在views中格式化显示时间(int64转string)

    最近在使用beego开发系统的过程中,遇到时间转换问题,需求如下: 通过以下函数获取Unix时间戳,后台数据库格式为int64: time.Now().Unix() 效果图: 从数据库获取数据,直接以 ...