<科普>CPU进行四则运算(加减乘除)的主流方法
以下除特殊说明外均为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进行四则运算(加减乘除)的主流方法的更多相关文章
- 读书笔记:7个示例科普CPU Cache
本文转自陈皓老师的个人博客酷壳:http://coolshell.cn/articles/10249.html 7个示例科普CPU Cache (感谢网友 @我的上铺叫路遥 翻译投稿) CPU cac ...
- linux下实现CPU使用率和内存使用率获取方法
想获取一下目标机运行时linux系统的硬件占用情况,写了这几个小程序,以后直接用了. 方法就是读取proc下的文件来获取了. cpu使用率: /proc/stat ,内存使用情况: /p ...
- 性能测试分析过程(二)cpu 使用率过高的分析方法
Linux 系统下 cpu 使用率过高的分析方法 1.通过 top 命令可以很明显查看出哪个进程耗cpu比较高 2. ps -mp 25147-o THREAD,tid,time\top -Hp pi ...
- <转>科普CPU Cache line
转载于http://coolshell.cn/articles/10249.html CPU cache一直是理解计算机体系架构的重要知识点,也是并发编程设计中的技术难点,而且相关参考资料如同过江之鲫 ...
- linux下进程cpu占用过高问题定位方法
背景 记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高 ...
- 转:关于安卓多线程while(true)方法占用CPU高的原因及其解决方法
由于项目需要用到安卓多线程操作,结果开了四条线程,下载到平板一直很卡,CPU占用率暴涨.于是开始查找原因,发现是线程run()方法里的while(true)导致的, 下图是为解决时开启一条while( ...
- C#正则表达式引发的CPU跑高问题以及解决方法
3月23日(周日)下午16:30左右,博客园主站负载均衡中的2台Web服务器CPU玩起了爬楼梯的游戏(见上图),一直爬到了接近100%.发现这个状况后,我们立即将这2台阿里云临时磁盘云服务器从负载均衡 ...
- [深度学习] Pytorch学习(二)—— torch.nn 实践:训练分类器(含多GPU训练CPU加载预测的使用方法)
Learn From: Pytroch 官方Tutorials Pytorch 官方文档 环境:python3.6 CUDA10 pytorch1.3 vscode+jupyter扩展 #%% #%% ...
- [转载]查看基于Android 系统单个进程内存、CPU使用情况的几种方法
转载自: http://www.linuxidc.com/Linux/2011-11/47587.htm 一.利用Android API函数查看1.1 ActivityManager查看可用内存. A ...
随机推荐
- 【项目管理】Mybatis-Generator之最完美配置详解
今天看到了一篇总结特别详细的关于Mybatis-Generator配置文件的文章,特转载进行记录学习使用. 先附上原文地址链接:张思全----全哥文章 <?xml version="1 ...
- Netty学习——Google Protobuf的初步了解
学习参考的官网: https://developers.google.com/protocol-buffers/docs/javatutorial 简单指南详解:这个文档写的简直是太详细了. 本篇从下 ...
- 【Python成长之路】从零学GUI -- 制作智能聊天机器人
[写在前面] 鹏哥:最近老惹小燕同学不开心,结果都没人陪我聊天了.哎,好无聊呀! 肥宅男:女朋友什么的最无聊了,还没我的图灵机器人好玩. 鹏哥:图灵?好巧,和我部门同名. [效果如下] [实现过程] ...
- .NET Core简单使用RabbitMq
RabbitMQ简介 RabbitMQ是一个开源的,基于AMQP(Advanced Message Queuing Protocol)协议的完整的可复用的企业级消息队,RabbitMQ可以实现点对点, ...
- Windows下创建Python虚拟环境的两种方法:
在实际的项目开发中,我们会根据自己的需求去下载各种相应的框架库,但是每个项目可能使用的库不一样,或者版本不一样等等等.为了避免这些因素对我们的项目造成一些不必要的影响,我们可能需要来回的切换或者装卸等 ...
- jeecg培训第一课(代码生成与权限分配)
问题描述:进口部要完成一票进口报关单的增删改查,操作员张三登录只能增删改张三的报关单,操作员李四登录只能增删改李四的报关单, 部门主管王五登录能查看张三和李四的报关单,但不能修改删除.操作员能提交报关 ...
- luogu P1566 加等式
题目描述 对于一个整数集合,我们定义"加等式"如下:集合中的某一个元素可以表示成集合内其他元素之和.如集合{1,2,3}中就有一个加等式:3=1+2,而且3=1+2 和3=2+1是 ...
- solr集群与项目实战
什么是 SolrCloud : SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时 ...
- 使用java理解程序逻辑 试题分析
1.编译Java Applet源程序文件产生的字节码文件的扩展名为() A:.java B..class C:Html D:Exe 正确答案:B 试题分析: 本题考查的是Java程序的开发过程.J ...
- leaflet 结合 geoserver 实现地图空间查询(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...