一个故事讲完CPU的工作原理

上二年级的小明正坐在教室里 。现在是数学课,下午第一节,窗外的蝉鸣、缓缓旋转的吊扇让同学们昏昏欲睡 。此时,刘老师在黑板上写下一个问题:
 
6324 + 244675 = ?
 
小明抬头看了一眼,觉得这两个数字挺眼熟 。他昨天翘课去网吧了,因此错过了刘老师讲的竖式计算加法 。
 
“同学们算一算这道题 。”刘老师和蔼可亲地说道 。
 
小明盯着黑板懵逼 。
【一个故事讲完CPU的工作原理】 
小学二年级的他面对这样一道世界级难题,束手无策 。小明伸出了自己的左手,打算用一个古老而深邃的方法--掰手指--尝试一下 。
 
小明发现他的每只手只能输入0-5中的正整数,和的范围仅限于0-10,离6324还十分遥远 。
 
“慢着!”小明看向了自己的左手 。他发现,事情有一点不对劲 。
 
我们也来看看小明的左手 。这只左手有5根手指,我们把5根手指都伸开来记为11111,5根手指握拳记为00000,手背面向我们,左手小指是第一个1/0 。
 
小明紧紧地握拳,然后伸出大拇指,此时的左手为00001 。“如果,”小明想,“这样是1” 。
 
他缩回拇指,伸出食指,此时的左手为00010;“这样是2” 。
 
他又伸出拇指,此时的左手为00011;“那么这样是3” 。
 
他缩回拇指和食指,伸出中指,此时的左手为对着自己竖中指00100;“这样就是4!”
 
.....小明的左手飞速运动着,直到五根手指都伸直,像是钢铁侠射了一发掌心炮11111;“这样就是31!一只手可以表示0-31中的任意正整数!”
 
小明为自己的发现感到激动 。可他不知道怎么表示加法 。
 
小明的同桌,英语课代表小红,看他摆弄了半天左手,忍不住问他在干什么 。小明解释了他的发现 。小红听了小明的一番高论,若有所思,提笔在数学书的封底画了一个表格:

一个故事讲完CPU的工作原理

文章插图
 
小红画的表格
 
“如果我们能造一个机器,给它三个输入,它能返回两个结果,那我们就能算出这道题!”小红激动地说 。
 
“啥叫进位啊美女?”小明问道 。
 
“就是你列竖式的时候画的一小撇”,小红回答 。
 
“猎术士是什么,我知道猎魔人和古尔丹 。”
 
小红于是讲解了一下怎么列竖式计算十进制加法 。“我懂了 。”
 
小明说着,拿过小红的数学书,补全了表格:
一个故事讲完CPU的工作原理

文章插图
 
小明试着补全表格
 
“是这样吗?”小明问小红 。
 
小红拿过来看了看,说:“最后一行写错了,输出结果应该是1 。你想啊,1+1+1应该等于11,左边这一位是输出进位,右边这一位是输出结果,都是1,所以输出结果应该是1 。”
 
“噢 。”小明又拿过书来,拿起橡皮铅笔改正:
一个故事讲完CPU的工作原理

文章插图
 
小明改好了
 
“那为什么这个机器能算加法?我还是不懂 。”小明问 。
 
“假设我们已经造出来了这么个机器,长这样”小红继续在封底上画着:
一个故事讲完CPU的工作原理

文章插图
 
小红画的机器
 
“等会等会,怎么变成英文了,我英语不好 。”小明叫道 。
 
“hmmm看来你没读双语幼儿园 。左边这三个是输入,右边是输出,C是进位,C-in是输入进位,C-out是输出进位,Sum是和的意思,明白了么?”小红解释道 。
 
“噢好 。”
 
“假设我们已经造出来了这么个机器,造了好几个,我们这么连起来...诶纸不够大,我写不下了 。”
 
小明一听,赶紧从书桌膛里翻出来一本草稿纸,生怕同桌变成费马 。
 
“谢谢 。先这么连起来:”
一个故事讲完CPU的工作原理

文章插图
 
小红画图中
 
“哦哦哦我懂了,A和B就是两只手,最右边这个one-bit-adder计算的是最小位数的和!”小明说道 。


推荐阅读