找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 4222|回复: 4

【基础】整数运算:CPU内部只有加法运算

[复制链接]
发表于 2014-3-5 00:01:01 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
学汇编的一边儿去。我这里讲的是CPU进行计算的原理。
首先我这里用MC的红石电路模拟了一个加法器:http://www.0xaa55.com/thread-313-1-1.htm
首先加法器是怎么实现的呢?是用了非门电路。首先来看看二进制的加法:
0+0=0
0+1=1
1+0=1
1+1=10
首先来看规律。只看最低位,如果左边的“被加数”和“加数”都一样的话,结果的最低位是0,否则是1.
而如果“被加数”和“加数”都是1,那么就会有进位。
总结出来的规律是:
运算结果最低位=被加数 逻辑非 加数
运算结果的进位=被加数 逻辑与 加数
这个是加法器的原理。
那么回到主题,我说CPU内部只有加法运算。为什么这么说呢?来听我讲解:
CPU对于加法是用的加法运算。那么对于减法是怎么运算的呢?还是用的加法运算。
假设CPU是8位的CPU,那么,让我来举个例子。
01010101+11111111=101010100
得到的计算结果是个9位的二进制数。但是CPU是8位的,寄存器是8位,只能支持8位的二进制计算。多出来的这个位到哪里去了呢?不考虑
一种是CPU把一个数不断加上另一个数,比如3*6,CPU内部就进行3+3+3+3+3+3的运算。
另一种方法是改进了的方法,我举个例:
1010×100100
这个怎么看呢?
首先我们可以把它看成如下:
1000×100100+10×100100
这样就简单了,相当于100100左移3位再加上100100左移1位。
于是CPU内部就先把加数进行移位,然后将移位的加数累加起来。就得到了运算结果了。实质上来说,CPU也只是进行的加法运算。
那么除法运算呢,我这里举个例:10010010÷00101101的商是11,余数是1011。是怎么得来的呢?
其实也和我们小学做竖式的计算一样。
             11
       ________
101101/10010010
        101101
       --------
        1110000
         101101
        -------
           1011
就是这样一位一位除下来。
回复

使用道具 举报

发表于 2014-3-23 13:31:14 | 显示全部楼层
恍惚间记得 貌似在哪看过
说80486后的cpu带硬件乘法器...
记不得了
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2014-3-23 18:44:27 | 显示全部楼层
我晕 发表于 2014-3-23 05:31
恍惚间记得 貌似在哪看过
说80486后的cpu带硬件乘法器...
记不得了

硬件乘法器的原理也是基于加法器和位移器的
回复 赞! 靠!

使用道具 举报

发表于 2014-3-23 23:45:42 | 显示全部楼层
0xAA55 发表于 2014-3-23 18:44
硬件乘法器的原理也是基于加法器和位移器的

好吧...这个
回复 赞! 靠!

使用道具 举报

发表于 2014-3-24 00:31:18 | 显示全部楼层
看看~学习一下~
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-15 10:20 , Processed in 0.043124 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表