今天晚上去了一趟图书馆,令我的心情十分地愉快。原因是我找到了一本书,这本书的译者是华师的黄河。而碰巧的是,这本书是关于计算机结构与设计的国外教材。恰好上了一上午的计算机组成原理,看来这么好的心情,不冲杯咖啡,谈谈计算机是不行了。

今 天学的就是计算机的核心部件cpu的ALU(多功能算术运算器),我们平常进行的 加 减 乘 除 法在计算机中到底是怎么实现的。学习过电子技术的同学都知道布尔代数吧,这个东东就是各种逻辑器件的基础,因为0 / 1恰好代表着真和非真。非常凑巧我们的数表示成二进制之后居然可以和布尔代数完美融合起来。这样,计算机ALU架构起来的理论基础就建立起来了。我们可以 用简单的门来构建加法器,可以做简单的加法。而加法又分为两部分——进位,本位。当然本位要与低位的进位打交道,而进位又由本位相加的结果决定。这种叫做 行波进位。本位的加可以用一个异或门实现,而进位位则由本位通过一个与门来实现(很显然)。图片

如上图所示,就是一个全加器。当然减法通过转换成补码也可以用全加器来实现,只不过符号位的处理单独进行。符号位产生的进位结果是要舍弃的。
乘法和除法则复杂一点,对于乘法来说,结果的符号位是乘数与被乘数的异或。先用我们人类的方法,就是乘数的每一位分别去乘被乘数的每一位,但是结果要依次 左移。然后将结果做加法。具体实现肯定是很复杂的,其实我上课睡觉了,木有听到,老师也没有怎么讲,只是说不是这样的,而是用软件实现(布斯算法——不死 算法: P)。算法就是完成某工作的运算方法,我觉得就算是硬件实现也是有算法的。
除法,用的是加减交替法,也就是加法和减法一视同仁,不用考虑余数是否够除。呵

图片

呵,看起来就挺复杂的。
而且还有个CAS这个东西不知道是什么,其实它是可控加减单元,也就是可以控制的“加法器”。看看上面那个图,就知道要进行比较复杂的运算。现在也不必深究,或许它也是软件实现的呢。
当然计算机里面最基本的就是加减乘除运算了,至于更多的运算比如求平方根,x的n次幂,都是用软件来实现的。它们是C语言中math头文件里面一些基本函数。
当然ALU既然是多功能的,那就必须要能做很多事,比如加法,逻辑运算,取反等等。当然必须要有信号控制cpu到底进行什么操作,里面的一些设计都是非常 的精妙的。而这些操作都与指令集里面的指令相对应,比如汇编里面的add,sub,c语言中的<< 和 >>。这些东东都是相通的。
好了,写完收工,晚安!
对了,怎样在思维转不过弯的时候利用思维导图解决问题。或者在知识体系模糊不清的时候用思维导图的方法来理清思路,想清楚一些东西。下次专门写一篇給自己吧。
在俺们专业发现了很聪明的人哟,看来要好好向他们学习了。
by bibodeng    2011-09-14