CPU 底层运算之乘法运算
原码是0011 * 0011(以4位存贮单元,因为是原码,最高位不代表符号位)
CPU中的乘法器过程如下:
3个寄存器分别存放乘数0011 被乘数 0011 一个部分积初始值为0
1、首先判断乘数寄存器(目前为0011)的最低位为1。如果为1则将部分积的值通过加法器加上被乘数0011。因此此步结束后部分积寄存器内容为0011
2、将乘数寄存器右移一位,同时将部分积寄存器也右移一位。同时乘积寄存器最低位溢出丢弃。部分积寄存器高位补0,地位溢出后填充到乘数寄存器。因此。部分积寄存其原来的值0011变成了0001。乘数寄存器0011变成了1001(这里低位的1溢出,最高位被部分积溢出的1填充)
3、判断乘数寄存器最低位(0001).为1。将部分积通过加法器加上被乘数0011。因此此不结束后部分积寄存器内容是(0001+0011=0100).
4、乘数寄存器右移一位,同时将部分积寄存器也有右移一位。同第2步。因此部分积寄存器原来的值0100变成了0010。乘数寄存器1001变成了0100,低位1溢出,最高位被部分积溢出的0填充。
5、判断乘数寄存器低位为0不做加法操作直接做第2步的移位操作。既有了部分积变成0001,乘数变成了0010。
6、判断乘数寄存器低位为0不做加法操作直接做第2步的移位操作。既有了部分积变成0000,乘数变成了1001;此时所有乘数全部处理完毕。
7、最终结果将部分积作为高位,乘数寄存器作为低位得到值为00001001 换算成10进制得到9
CPU中的除法器过程如下:
首先初始化三个寄存器存放被除数,除数,部分商,部分商会初始化为0(可初始化也可以不初始化因为会做上商过程)
首先把被除数寄存器左移2位与除数寄存器对齐:
1010<<2=10(10)
在用对齐后的被除数与除数做比较:
10(10)-10=00 刚好等于没有溢出所以上商1,商为0001,在将相减的结果(00)放到被除数有效的高位此时被除数有效的最高位为10(10),此时被除数的bit位为0010,
在左移1位:
0010<<1=001(0)
在用位移后的被除数与除数做比较:
001(0)-10=11 符号位为1负数也就是说被除数小于除数所以上商0,商为0010
在左移0位
0010<<0=0010
在用位移后的被除数与除数做比较:
0010-10=00 两个符号位都为0相等所以上商1,商为101,在将其放到商的有效高位此时被除数的有效bit位为最低的两位(00)10
所有的被除数处理完后商做结果被除数做余数,商为101,余数为00,转换成十进制就是5余0!
CPU 底层运算之乘法运算的更多相关文章
- [CNBETA]Intel CPU底层漏洞事件完全详解:全球手机/电脑无一幸免[转帖]
http://www.cnbeta.com/articles/tech/685897.htm 由Intel CPU漏洞问题衍生出来的安全事件已经波及全球几乎所有的手机.电脑.云计算产品,ARM确认 C ...
- js简易计算器底层运算逻辑(带撤销功能)
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Chapter Zero 0.2.1 执行运算与判断的CPU
目录 执行运算与判断的CPU CPU效能比较的指标 CPU的工作频率:外频与倍频 32位与64位的CPU与总线[宽度] CPU的等级 超线程(Hyper-Threading,HT) 网上摘下几张主板图 ...
- 2、CPU是怎么实现运算的 ?
我先来了解一下芯片构造,芯片由晶体管组成的.晶体管组成逻辑运算与或非电路. P型半导体的"P"表示正电的意思,取自英文Positive的第一个字母. N型半导体的"N&q ...
- Java基本类型与运算
问题及答案来源自<Java程序员面试笔试宝典>第四章 Java基础知识 4.4基本类型与运算 1.Java提供了哪些基本数据类型? Java一共提高了八种原始的数据类型:byte.shor ...
- [转帖]双剑合璧:CPU+GPU异构计算完全解析
引用自:http://tech.sina.com.cn/mobile/n/2011-06-20/18371792199.shtml 这篇文章写的深入浅出,把异构计算的思想和行业趋势描述的非常清楚,难得 ...
- 【Java基础】基本类型与运算【重要】
0. Java基本数据类型 Java的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括long.int.short.char和 byte,位运算符具体如下表 ...
- 浅谈原子操作、volatile、CPU执行顺序
浅谈原子操作.volatile.CPU执行顺序 在计算机发展的鸿蒙年代,程序都是顺序执行,编译器也只是简单地翻译指令,随着硬件和软件的飞速增长,原来的工具和硬件渐渐地力不从心,也逐渐涌现出各路大神在原 ...
- CPU的基本组成
1.CPU是用来运算的(加法运算.乘法运算.逻辑运算(与.或.非)等) 2.运算操作涉及到数据输入(input).处理.数据输出(output).A和B是输入数据,加法运算时处理.C是输出数据. 3. ...
随机推荐
- 最好用的流程编辑器bpmn-js系列之基本使用
最好用的流程编辑器bpmn-js系列文章 BPMN(Business Process Modeling Notation)是由业务流程管理倡议组织BPMI(The Business Process M ...
- Shell编程(4)
shell函数 shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直接调用该段代码. 格式 func() { #指定函数名 co ...
- openstack (共享组件) 时间同步服务
云计算openstack共享组件——时间同步服务ntp(2) 一.标准时间讲解 地球分为东西十二个区域,共计 24 个时区 格林威治作为全球标准时间即 (GMT 时间 ),东时区以格林威治时区进行 ...
- JVM内存结构和Java内存模型
一.JVM 首先看一张JVM结构图(某度找的) 主要看运行时数据区,里边有方法区,堆,java虚拟机栈,本地方法栈,程序计数器.其中方法区和堆是线程共享的,也是JVM进行垃圾收集的区域,java虚拟机 ...
- 并发编程(四)Thread类详解
一.引言 Thread类中存在着许多操作线程的方法,学习Thread类是非常有必要的,前面我们也嘘唏了创建线程的几种方式,若线程的创建不是以继承Thread类的方式创建的,那我们又改如何使用Threa ...
- DC 1-3 靶机渗透
DC-1靶机 端口加内网主机探测,发现192.168.114.146这台主机,并且开放了有22,80,111以及48683这几个端口. 发现是Drupal框架. 进行目录的扫描: 发现admin被禁止 ...
- win10病毒和威胁防护无法重新启动解决方法
1.检查电脑中是否安装了任何的第三方反病毒软件 (例如 360.腾讯电脑管家等)?如果有的话,麻烦您将其卸载,卸载完毕后重启设备,再看一下病毒和威胁防护能否正常启动:2.按 "Windows ...
- mysql笔记--基础知识
SQL基础 SQL语句的分类: DQL: 数据库查询语句,基本的就是select查询命令,用于查询数据 DML: 数据操纵语句,用于插入,更新,删除数据,即INSERT, UPDATE,DELETE ...
- 使用Redis做消息队列
基于内存的单线程数据库,使Redis的线程安全性极高.而Redis的双向链表数据类型(List)天生就可作为消息队列存储消息. 在这里就不说消息队列的等等一些优点.但是补充一下Redis的List类型 ...
- VS2015建立一个完整的c++工程:头文件.h 源文件.cpp,自动生成类
https://blog.csdn.net/weixin_40539125/article/details/81430801 打开VS2015 ,新建VS win32工程,前面步骤很简单,不再阐述 下 ...