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. ...
随机推荐
- [极客大挑战 2019]Secret File wp
通过标题考虑可能为文件包含漏洞方面 打开网页 从页面并没任何思路,查看源代码 得到有一个跳转到./Archive_room.php的超链接,打开Archive_room.php 中央有一个secret ...
- 令人困惑的strtotime
经常会有人被strtotime结合-1 month, +1 month, next month的时候搞得很困惑, 然后就会觉得这个函数有点不那么靠谱, 动不动就出问题. 用的时候就会很慌… 这不, 刚 ...
- 如何借助 IDEA 数据库管理工具可视化使用 TDengine?
什么是IDEA Database管理工具? 这里首先介绍下IDEA,IDEA全称IntelliJ IDEA,是Java语言开发的集成环境,IntelliJ在业界被公认为最好的Java开发工具之一. I ...
- Java基础语法(10)-面向对象之三大特征
title: Java基础语法(9)-面向对象之类的成员 blog: CSDN data: Java学习路线及视频 1.面向对象特征--封装 为什么需要封装?封装的作用和含义? 我要用洗衣机,只需要按 ...
- 分享一个php的防火墙,拦截SQL注入和xss
一个基于php的防火墙程序,拦截sql注入和xss攻击等 安装 composer require xielei/waf 使用说明 $waf = new \Xielei\Waf\Waf(); $waf- ...
- Docker:一、开始部署第一个Asp.net应用
工具: docker desktop :一个使用Docker的IDE工具,可以理解为SourceTree,也是使用git的一个桌面化工具: kitematic :配合desctop,用来管理本地的镜像 ...
- JDK动态代理学习心得
JDK动态代理是代理模式的一种实现方式,其只能代理接口.应用甚为广泛,比如我们的Spring的AOP底层就有涉及到JDK动态代理(此处后面可能会分享) 1.首先来说一下原生的JDK动态代理如何实现: ...
- Java11-ZGC
Java 11包含一个全新的垃圾收集器--ZGC,它由Oracle开发,承诺在数TB的堆上具有非常低的暂停时间. 在本文中,我们将介绍开发新GC的动机,技术概述以及由ZGC开启的一些可能性. 那么为什 ...
- O、Θ、Ω
1.这些是时间复杂度的.(e.g. O(n).Θ(n).Ω(n)) 主要为主定理(坏东西) 2.本质 O <= Θ = Ω >=
- java基础篇1
JAVA基础篇1 注释 单行注释 //这是一个单行注释,由两个斜杠组成,不能嵌套多行注释 多行注释 /*这是一个 多行注释 ,//里面不能嵌套多行注释, 但是可以嵌套单行注释*/ 文档注释 /**ja ...