版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們

CPU的工作原理3——如何加減乘除

孫老師聊人工智能
原創(chuàng)
中國(guó)計(jì)算機(jī)學(xué)會(huì)GESP技術(shù)委員會(huì)主席、科普工委委員
收藏

我們知道CPU的主要功能就是運(yùn)算,加減乘除運(yùn)算的基礎(chǔ)是加法運(yùn)算,所以我們先來(lái)看如何制作一個(gè)加法器。

我們所說的加法器當(dāng)然是指二進(jìn)制的加法,請(qǐng)看下圖:

左邊表格是二個(gè)一位二進(jìn)制數(shù)相加的情況分析(二進(jìn)制沒有2,只能通過進(jìn)位用10描述)。目標(biāo)有了,怎么實(shí)現(xiàn)呢?之前介紹過的異或門的邏輯與此很像(右邊的表格),我們看到前三種情況的加法,異或門可以直接實(shí)現(xiàn),而最后一種情況1+1的結(jié)果是0而不是10,這里面其實(shí)缺少了一個(gè)進(jìn)位,我們可以增加一個(gè)與門,解決進(jìn)位的問題。

電路圖是這樣的,其中異或門的輸出作為“和的個(gè)位數(shù)”,與門的輸出作為進(jìn)位。最終實(shí)現(xiàn)的結(jié)果如下表:

可能有人會(huì)想,1+1=10沒問題,但0+0=00,0+1=01很是奇怪,能否把前面的0去掉呢?其實(shí)我們不用擔(dān)心,這只是與我們的日常思維習(xí)慣有些沖突,并不影響結(jié)果的正確性,畢竟在一個(gè)數(shù)字前面加0和不加0的結(jié)果都一樣。

這樣我們就實(shí)現(xiàn)了一位二進(jìn)制數(shù)的加法電路,使用這個(gè)符號(hào)表示。

為什么叫“半加器”呢?因?yàn)檫€不完善,因?yàn)橐粋€(gè)完整的加法必然要考慮多位數(shù)相加,剛剛分析的只是一位數(shù)相加,如果有多位數(shù),必然要考慮前一位數(shù)字相加后可能有進(jìn)位,這個(gè)進(jìn)位也要加進(jìn)來(lái),所以還可以對(duì)這個(gè)電路繼續(xù)完善,直至滿足多位數(shù)相加,這個(gè)完善的加法電路就稱為全加器,用這個(gè)符號(hào)表示。

有了半加器、全加器,就可以實(shí)現(xiàn)多位二進(jìn)制相加了,例如二個(gè)八位二進(jìn)制數(shù)相加的電路如下:

可簡(jiǎn)化為:

減法器的過程稍顯復(fù)雜,因?yàn)闇p法不考慮進(jìn)位,但需要考慮借位,而借的這一位如何記錄,如何歸還都是問題,所以我們要想辦法將借位化解掉。我們先從熟悉的十進(jìn)制減法入手,例如35-16,用借位法很容易得出結(jié)果19,但現(xiàn)在我們要避免借位,怎么做呢?我們可以把式子變換一下:

35-16=35-16+100-100=35-16+99+1-100=35+(99-16)+1-100

這樣99-16就不涉及到借位,因?yàn)閷?duì)于二位數(shù)來(lái)說99是最大的。我們繼續(xù)變換式子:

35+(99-16)+1-100=35+83+1-100=118+1-100=119-100

這時(shí)又遇到減法,但是不涉及借位,只需把百位的1去掉即可,結(jié)果是19。雖然看起來(lái)繞了很大一個(gè)彎路,但我們成功地避免了借位。

接下來(lái)我們來(lái)看二個(gè)八位二進(jìn)制數(shù)相減的例子:

參考前面十進(jìn)制減法的例子,把這個(gè)式子轉(zhuǎn)換為:

這其中涉及到二次減法,其中:

觀察一下結(jié)果會(huì)發(fā)現(xiàn),差和減數(shù)是按位取反的,也就是每位0、1正好相反,這個(gè)邏輯可以使用如下電路實(shí)現(xiàn):

但問題是,該電路只會(huì)對(duì)輸入取反,而我們要做的是既能做加法也能做減法的電路,所以應(yīng)該在減法時(shí)實(shí)現(xiàn)反轉(zhuǎn),改造電路如下:

當(dāng)做減法時(shí),取反端=1,才對(duì)輸入取反,如果是加法,取反端=0,輸入不取反。我們將這個(gè)電路簡(jiǎn)化一下,稱為求補(bǔ)器:

有了求補(bǔ)器,我們就可以將第一個(gè)減法變?yōu)榧由先》春蟮慕Y(jié)果:

這樣就只剩下最后一個(gè)減法,減去100000000,這個(gè)邏輯很簡(jiǎn)單,只需將首位變?yōu)?即可,當(dāng)然是在做減法的時(shí)候。終于我們將所有的減法都化解掉了,現(xiàn)在我們使用加法器,再配合異或門就可以實(shí)現(xiàn)加減法運(yùn)算。

圖中有三個(gè)SUB端,這就是加減法的切換開關(guān),當(dāng)SUB=0時(shí),進(jìn)行加法運(yùn)算,當(dāng)SUB=1時(shí),進(jìn)行減法運(yùn)算。在減法中,輸入B的數(shù)據(jù)會(huì)先通過求補(bǔ)器進(jìn)行取反,然后再和輸入A相加。另外通過加法器的CI(進(jìn)位輸入)可以實(shí)現(xiàn)結(jié)果+1(因?yàn)镾UB=1),最后加法器的CO進(jìn)位輸出(也就是結(jié)果的首位數(shù)據(jù))通過一個(gè)異或門處理,減去1,最終得到最后的結(jié)果。

至此我們的電路已經(jīng)能做加減法了,而乘法就是多次加法,除法就是多次減法,所以我們也就能實(shí)現(xiàn)乘除的運(yùn)算了。

評(píng)論
科普655c67cf13acd
儒生級(jí)
知道了
2023-11-23
飛馬騰空
太師級(jí)
2023-11-21